我可以(可靠地)使用SmtpClient在附件上使用TransferEncoding.EightBit吗?

时间:2016-01-13 02:16:17

标签: c# .net email encoding smtp

我正在尝试使用.Net的SmtpClient将二进制文件作为电子邮件附件发送。默认情况下,我看到的行为是附件作为Base64字符串发送。因此,如果我在磁盘上有类似3mb文件的东西,当我附加它并邮寄它时,结果是在4-5mb .eml文件之间。

我快速浏览了TransferEndcoding Enum,希望得到像'二进制'这样的东西,但没有这样的运气。但是,如果我选择8位编码,附件/消息会更小,文件的完整性也很好。我已经测试了几次,使用不同的文件,它似乎有效。

我担心的是:

  

数据是8位字符,可能代表国际   总行长度不超过1000 8位的字符   字符。有关此8位MIME传输的详细信息   扩展,请参阅IETF RFC 6152。

什么决定了线长?如果幸运的话,编码的二进制数据碰巧有一个8位字符,在我的示例中每1000个或更少字符映射到一个新行.....但使用8位编码不是一个可行的解决方案电子邮件附件?

1 个答案:

答案 0 :(得分:0)

Content-Transfer-Encoding: 8bit适用于国际文字,而非图片,视频,zip文件或任何其他二进制内容。

如果您希望能够通过SMTP发送包含二进制内容的邮件,则需要使用Content-Transfer-Encoding: binary,这是使用System.Net.Mail.SmtpClient无法实现的。

要发送二进制内容,您需要使用其他邮件库,例如MailKit(由我编写)。实际上,我认为.NET的任何其他邮件库都不支持SMTP BINARY扩展。