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 に設定した場合、同じコードが小さいファイルと大きいファイルに対して機能します。したがって、これは私たちのメール構成の問題ではありません! たとえば、2 MB のファイルを 10 個添付してもエラーは発生しません。Googleで検索しましたが、わかりませんでした。

回避策が期待どおりに機能していません。この回避策をしばらく使用した後、一部のファイルが破損していることがわかりました。したがって、これはこのバグの解決策ではありません。

Microsoft のパッチを適用しましたが、まだ問題が発生していますか?
誰かがこれを修正する方法を教えてもらえますか?

4

2 に答える 2

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コンポーネントはそのような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 に変更したところ、魅力的に機能しました。

したがって、コードを機能させるには、次の行のいずれかをコードに追加するだけです。

これらの 2 つのコード セクションの「いずれか」が機能します。

attachment.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;

attachment.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;

この解決策はこの投稿で見つかりました

于 2015-08-24T18:58:44.167 に答える