0

我已经浏览了这个链接。(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 的文件,我不会出错!我通过谷歌搜索但我没有得到它。

变通解决方案无法按预期正常工作。使用此解决方法一段时间后,我发现某些文件已损坏。所以这不是这个错误的解决方案。

我们已经应用了那个 Microsoft 补丁,但我们仍然发现问题?
有人可以告诉我如何解决这个问题吗?

4

2 回答 2

0

使用 SMTP Pickup Directory 的可能解决方法

我不知道该错误是在通过 SMTP 发送消息的代码中还是在带有大附件的序列化 MailMessage 中。如果它在发送中并且序列化没问题,您可以尝试通过 Pickup Directory 使用发送来克服它。

像这样的东西:

        //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 组件就是此类 SMTP 库的示例)。

于 2010-09-22T12:24:14.077 回答
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;

在这篇文章中找到了这个解决方案

于 2015-08-24T18:58:44.167 回答