使用MimeKit的BodyBuilder生成us-ascii编码纯文本邮件正文的可行方案咨询
使用MimeKit的BodyBuilder生成us-ascii编码纯文本邮件正文的可行方案咨询
刚好我之前处理过类似的场景,给你整理几个可行的方案,你可以根据自己的代码情况选择:
直接通过BodyBuilder使用自定义编码的TextPart
BodyBuilder其实支持直接将自定义的MimeEntity赋值给它的Body属性,所以我们可以先创建一个指定us-ascii编码的纯文本部分,再传给BodyBuilder,这样生成的正文就会符合目标应用的要求。代码示例如下:var bodyBuilder = new BodyBuilder(); // 创建指定us-ascii编码的纯文本内容 var textPart = new TextPart("plain") { Text = "这里是需要发送的邮件内容", ContentType = new ContentType("text", "plain") { Charset = "us-ascii" } }; // 将自定义TextPart设置为BodyBuilder的正文 bodyBuilder.Body = textPart; // 生成符合要求的MessageBody var messageBody = bodyBuilder.ToMessageBody();生成MessageBody后修改编码
如果你的现有代码已经基于BodyBuilder.TextBody实现,不想大改的话,也可以在生成MessageBody之后,手动修改其编码。因为ToMessageBody()返回的是MimeEntity,我们可以将其转换为TextPart后调整ContentType的Charset属性:var bodyBuilder = new BodyBuilder(); bodyBuilder.TextBody = "这里是需要发送的邮件内容"; var messageBody = bodyBuilder.ToMessageBody(); // 检查是否为纯文本部分,然后修改编码 if (messageBody is TextPart textPart) { textPart.ContentType.Charset = "us-ascii"; }这个方法简单直接,不需要调整原有构建正文的逻辑。
完全手动构建邮件正文(不依赖BodyBuilder)
如果你不需要BodyBuilder的其他功能(比如同时添加HTML正文、附件等),也可以直接创建TextPart作为邮件正文,这种方式最直接,能完全控制编码细节:var textPart = new TextPart("plain") { Text = "这里是需要发送的邮件内容", ContentType = new ContentType("text", "plain") { Charset = "us-ascii" } }; // textPart即可直接作为邮件正文使用
需要注意的是:请确保你的邮件内容所有字符都在us-ascii的编码范围内(ASCII码0-127),如果包含超出范围的字符,编码时可能会出现错误或者字符丢失的情况。
内容来源于stack exchange
相关产品推荐
相关产品推荐

