You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 10:33:08