【发布时间】:2021-03-06 00:53:48
【问题描述】:
我正在使用MimeMessage.Load() 和SmtpClient.Send() 加载和发送.eml 文件。问题是 MailKit 将没有传输编码的 UTF-8 text/plain 部分更改为使用 base64 的 UTF-8,而使用 UTF-8 并且没有传输编码的 text/html 部分更改为使用 quoted-printable 的 UTF-8。这可以避免吗?理想情况下,我想按原样发送 eml 文件,只需对 To 和 From 标头进行少量更改。
【问题讨论】:
-
你确定不是 SMTP 服务器在改变这个吗?如果您在调用 SmtpClient.Send() 之前使用
message.WriteTo("filename.txt")编写消息,它是否具有重写的标头?如果不是,那么它可能是 SMTP 服务器。 -
@jstedfast 在发送前将消息写入文件并不会更改部分的传输编码。我还尝试使用 febootimail 工具发送原始 eml 文件,当我在 Thunderbird 中查看接收到的消息的来源时,t 编码也没有改变。会不会是
SmtpClient引起的? -
我刚刚意识到,如果您的文本部分有 UTF-8 文本(非 ASCII)并且没有设置 Content-Transfer-Encoding,那么 SmtpClient 需要强制编码为您的 SMTP 服务器支持的任何内容(它实际上调用
message.Prepare (EncodingConstraints.SevenBit)或message.Prepare (EncodingConstraints.EightBit),具体取决于服务器支持的内容)。