在.NET Framework 4.0中无法发送附件大于4 MB的电子邮件。如果将目标平台从.NET Framework 4.0设置为.NET Framework 3.5,则相同的代码适用于小型和大型文件。所以这对我们的邮件配置来说不是问题!如果我附上例如,我没有错误10个2 MB的文件!我在Google上搜索过但我没有得到它。
解决方法解决方案无法正常工作。使用此解决方法一段时间后,我发现有些文件已损坏。所以这不是这个bug的解决方案。
我们已经应用了微软补丁,我们仍然看到了这个问题? 谁能告诉我如何解决这个问题?
答案 0 :(得分:0)
使用SMTP分拣目录的可能解决方法
我不知道该错误是否在通过SMTP或带有大附件的序列化MailMessage发送消息的代码中。如果它在发送和序列化中没问题,您可以尝试使用通过分拣目录发送来克服它。
这样的事情:
//create the mail message
MailMessage mail = new MailMessage();
//set the addresses
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");
//set the content
mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";
//if we are using the IIS SMTP Service, we can write the message
//directly to the PickupDirectory, and bypass the Network layer
SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
smtp.Send(mail);
您需要在运行代码的同一台计算机上运行Microsoft SMTP服务器(Microsoft IIS,Microsoft Exchange)。
替代解决方案:
使用没有附件大小限制的第三方SMTP组件可能是一种方法(我们的Rebex Secure Mail .NET component是此类SMTP库的示例)。
答案 1 :(得分:0)
这可能是客户到目前为止为.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;
此解决方案见于this post