首页 > 解决方案 > Mailkit MimeKit.MimeMessage 错误:未知的初始化参数:System.Byte []

问题描述

我想在添加一些评论后转发一封电子邮件。原始电子邮件保存为 eml 文件,因此首先我加载该文件,然后将我的评论添加到正文或附加一些新文件,然后将电子邮件重新发送到新的电子邮件地址。

var mail = new MimeKit.MimeMessage();
var file = System.IO.File.ReadAllBytes("sample.eml"));
var orgMessage = new MimeKit.MimeMessage(file);

var builder = new MimeKit.BodyBuilder();
builder.TextBody = "user comment";
builder.Attachments.Add(new MimeKit.MessagePart { Message = orgMessage });
mail.Body = builder.ToMessageBody();

首先在第 3 行我得到这个错误:未知的初始化参数:System.Byte []

其次,我阅读了这个很好的答案Forward email using MailKit (C#)以及什么是重新发送参数?如果我设置他们我对转发电子邮件的评论未设置?那封电子邮件没有任何变化就清楚地重新发送了?

标签: c#asp.netemailmailkit

解决方案


未知初始化参数:System.Byte[]

这意味着没有MimeMessagebyte[]参数的构造函数。

换句话说,你不能这样做:

var file = System.IO.File.ReadAllBytes("sample.eml"));
var orgMessage = new MimeKit.MimeMessage(file);

从文件加载消息的正确方法是这样做:

var orgMessage = MimeMessage.Load ("sample.eml");

其次,我阅读了这个很好的答案 Forward email using MailKit (C#) 以及什么是重新发送参数?如果我设置他们我对转发电子邮件的评论未设置?那封电子邮件没有任何变化就清楚地重新发送了?

这些MimeMessage.Resent*属性仅在转发消息而不将其附加到新消息时使用。

您只需要在您链接到的我的答案中选择 3 个解决方案中的 1 个。

如果您要附加原始消息(就像您正在做的那样),那么您不应该Resent使用MimeMessage.


推荐阅读