C# 文本/普通附件内容显示在正文和附件中

C# 文本/普通附件内容显示在正文和附件中,c#,smtp,mime-types,mailkit,mimekit,C#,Smtp,Mime Types,Mailkit,Mimekit,环境:Windows 10、VisualStudio 2017、C# Mailkit/Mimekit版本2.0.1 问题:文本/普通附件内容显示在正文和附件中。我不会将附件内容出现在身体上 我正在尝试使用MimeKit.BodyBuilder类创建邮件,如下所示: var mail = new MailMessage(); mail.To.Add(new MailboxAddress("name1","name1@def.com"); mail.From.Add(new MailboxAddre

环境:Windows 10、VisualStudio 2017、C# Mailkit/Mimekit版本2.0.1

问题:文本/普通附件内容显示在正文和附件中。我不会将附件内容出现在身体上

我正在尝试使用MimeKit.BodyBuilder类创建邮件,如下所示:

var mail = new MailMessage();
mail.To.Add(new MailboxAddress("name1","name1@def.com");
mail.From.Add(new MailboxAddress("name2","name2@def.com");
var builder = new BodyBuilder();
builder.textBody = "";
buider.Attachments.Add(file);
mail.body = builder.ToMessageBody(); //PROBLEM shows up here.
当我发送这封邮件时,iff附加的文件是文本/纯文本,它也显示在正文中。注意,当附件是xml、json时,不会出现此问题

注意,我没有显式地设置内容类型,因为我遵循MimeKit文档中提供的示例程序

随函附上BodyBuilder::ToMessageBody()相关代码,供您随时参考

开始代码-MIMEKIT

   public MimeEntity ToMessageBody ()
    {
        MultipartAlternative alternative = null;
        MimeEntity body = null;

        if (!string.IsNullOrEmpty (TextBody)) {
            var text = new TextPart ("plain");
            text.Text = TextBody;

            if (!string.IsNullOrEmpty (HtmlBody)) {
                alternative = new MultipartAlternative ();
                alternative.Add (text);
                body = alternative;
            } else {
                body = text;
            }
        }

结束代码…MIMEKIT

如果有人能指出这个问题,我将不胜感激

提前谢谢大家,


关于Atish。

问题在于您没有设置文本或html正文,因此接收客户端显示文本附件,因为它没有其他要显示的内容


我更改了代码,因此如果将
TextBody
设置为
string.Empty
,它只会添加一个空的内联文本部分作为消息体,因此,现在接收客户端应该只显示一个空的正文。

您可以将附件添加到“mail.attachments”属性。.这里的“mail”是MimeKit.MimeMessage类对象,它的附件属性仅为get类型。
if (Attachments.Count > 0) {
            var mixed = new Multipart ("mixed");

            if (body != null)
                mixed.Add (body);

            foreach (var attachment in Attachments)
                mixed.Add (attachment);

            body = mixed;
        }

        return body ?? new TextPart ("plain") { Text = string.Empty };


}