我在用一个生 rust 的程序发邮件。
电子邮件文本在编码为UTF8的Postgresql数据库中。我通过postgres crate查询数据库:https://crates.io/crates/postgres
我在Windows上工作。如果我打印的消息似乎是正确的:
但当我在Thunderbird上收到它时,它显示:“Questo =C3=A8 il”
如果我从Gmail网页界面读到它似乎是正确的,但当我检查“显示原始邮件”时,它又错了。
我读到这样一条带有查询的消息:
let query = "SELECT * FROM myschema.retrieve_messages($1, $2, $3, $4);";
for row in &db_client.query(query, &[&pg_working_date, &max_messages_per_run, &_force_retry, &run_id]).unwrap()
然后我循环结果,并将它们放入Vec中。我检索body:
mail_body: row.get("mail_body")
如果我打印消息的正文:
println!("Body is: {}", m.mail_body);
看起来还行。
然后我使用lettre crate发送电子邮件https://crates.io/crates/lettre
我这样连接:
let mailer = SmtpTransport::relay(&smtp_server)
.unwrap()
.credentials(smpt_credentials)
.build();
我用这个代码发送消息:
let shipping_message = Message::builder()
.from("Hello <shippingaddress@shippngdomain.something>".parse().unwrap())
.to(m.email_address.parse().unwrap())
.subject(m.mail_subject)
.body(m.mail_body)
.unwrap();
然后发货:
match mailer.send(&shipping_message) {some other irrelevant code}
代码有问题吗?我可以检查什么?
1条答案
按热度按时间hmae6n7t1#
当你调用
MessageBuilder::body
时,你的body被编码为:基于最有效和有效的body编码,自动使用
7bit
、quoted-printable
或base64
Content-Transfer-Encoding
进行编码。如果不需要这种行为,可以使用带有
SinglePart
的MIME
主体。我想这应该对你有帮助: