无法在VS 2010中发送包含大附件的电子邮件

时间:2010-09-21 14:13:36

标签: asp.net email .net-4.0 email-attachments

我已经通过了这个链接。 (http://connect.microsoft.com/VisualStudio/feedback/details/544562/cannot-send-e-mails-with-large-attachments-system-net-mail-smtpclient-system-net-mail-mailmessage

在.NET Framework 4.0中无法发送附件大于4 MB的电子邮件。如果将目标平台从.NET Framework 4.0设置为.NET Framework 3.5,则相同的代码适用于小型和大型文件。所以这对我们的邮件配置来说不是问题!如果我附上例如,我没有错误10个2 MB的文件!我在Google上搜索过但我没有得到它。

解决方法解决方案无法正常工作。使用此解决方法一段时间后,我发现有些文件已损坏。所以这不是这个bug的解决方案。

我们已经应用了微软补丁,我们仍然看到了这个问题? 谁能告诉我如何解决这个问题?

2 个答案:

答案 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