这可能是迄今为止客户针对 .NET 4.0 Framework 中的 System.Net.Mail 类报告的第一个错误,或者至少是我处理的第一个错误。这是非常直接的重现,我不必做太多事情就可以在本地重现该问题。
static void Main(string[] args)
{
SmtpClient client = new SmtpClient("contoso_smtp_server");
client.Credentials = new System.Net.NetworkCredential("User1", "Password", "contoso");
MailMessage msg = new MailMessage("user1@contoso.com", "user2@contoso.com", "Large Attachment Mail", "Large Attachment - Test Body");
Attachment attachment = new Attachment(@"d:\3mb.dat");
msg.Attachments.Add(attachment);
client.Send(msg);
}
这是您可以编写的使用 SNM 发送电子邮件的最简单代码,但问题是它失败并显示“发送电子邮件时出错”消息。因此,我查看了正在发生的事情,发现问题与 SNM 没有直接关系,而是与它的底层类有关,特别是 Base64Encoding 类,它被用作在发送时对电子邮件附件进行编码的默认方法。
这为我节省了更多的故障排除,我将附件的编码方式从 Base64 更改为 7Bit,它的工作方式非常有魅力。
因此,您需要做的就是将以下任何一行添加到您的代码中以使其工作。
这两个代码部分中的任何“一个”都可以使用
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;
在这篇文章中找到了这个解决方案