C# 如何避免MailKit更改文本/纯文本和文本/html部分的传输编码?

C# 如何避免MailKit更改文本/纯文本和文本/html部分的传输编码?,c#,mailkit,C#,Mailkit,我正在使用MimeMessage.Load()和SmtpClient.Send()来加载和发送.eml文件。问题是MailKit将不带传输编码的UTF-8text/plain部分更改为带base64的UTF-8,将不带传输编码的UTF-8text/html部分更改为带引号的可打印的UTF-8。这能避免吗?理想情况下,我希望将eml文件完全按原样发送,只需对到和从头进行最小的更改。在发送邮件之前,MailKit的SmtpClient将根据SMTP服务器的编码约束(根据服务器支持的编码约束为:7位、

我正在使用
MimeMessage.Load()
SmtpClient.Send()
来加载和发送
.eml
文件。问题是MailKit将不带传输编码的UTF-8
text/plain
部分更改为带
base64
的UTF-8,将不带传输编码的UTF-8
text/html
部分更改为带
引号的可打印的UTF-8。这能避免吗?理想情况下,我希望将eml文件完全按原样发送,只需对
头进行最小的更改。

在发送邮件之前,MailKit的SmtpClient将根据SMTP服务器的编码约束(根据服务器支持的编码约束为:7位、8位或二进制)对邮件进行传输

SmtpClient的Prepare()方法是虚拟的,因此可以重写

默认实现实际上只是调用


此方法所做的是遍历MIME部件树,确保每个MIME部件都有符合提供的编码约束的内容。如果发现不一致的部分,它将计算要使用的最佳内容传输编码,然后设置该编码。

您确定不是SMTP服务器在更改此编码吗?如果在调用SmtpClient.Send()之前使用
message.WriteTo(“filename.txt”)
编写消息,它是否具有重写的标题?如果不是,则可能是SMTP服务器。@jstedfast在发送前将邮件写入文件不会更改部件的传输编码。我还尝试使用febootimail工具发送原始eml文件,当我在Thunderbird中查看接收到的消息源时,t编码也没有改变。这可能是由
SmtpClient
引起的吗?我刚刚意识到,如果您的文本部分有UTF-8文本(非ASCII),并且没有内容传输编码集,那么SmtpClient需要强制编码到SMTP服务器支持的任何内容(它实际上调用
message.Prepare(EncodingConstraints.SevenBit)
message.Prepare(EncodingConstraints.EightBit)
取决于服务器支持的内容。那么,使用空实现重写SmtpClient的
Prepare()
是否可以实现我的目标,使消息与原始eml文件保持一致?是的,应该是这样。