6

主に SMTP を使用して電子メール メッセージを送信するアプリケーションを開発しました。メッセージを 1 つずつ送信するのは問題ありませんが、プロセスを高速化したいと考えています。SmtpClient相互の競合を避けるために、メッセージと同様に複数のインスタンスを作成しました。個別のインスタンスがあるため、.Send()複数のスレッドで実行するとうまくいくと思いました。ただし、Threadこのコードを使用して 1 つのスレッドで 1 つの電子メールを送信することもできないため、コードだけでは何かが機能しません。"Failure sending mail"あいまいな例外を受け取るだけです。Thread動作するコードと動作しないコードを投稿します。誰かが原因であると信じていることを共有できますか?

現在、新しい機能を使用するつもりはありませんasync、代わりに活用していますThread

作業宣言とメソッド呼び出し:

var SMTP = new SmtpClient
    {
        Host = txtBxSenderHost.Text,
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
    };

using (var message = new MailMessage(senderAdrress, toAddress)
    {
        Subject = strSubject,
        Body = strBody
    })

    {
        SMTP.Send(message);
    }

NOT ワーキング スレッド宣言とメソッド呼び出し:

var SMTP = new SmtpClient
    {
        Host = txtBxSenderHost.Text,
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
    };

using (var message = new MailMessage(senderAdrress, toAddress)
    {
        Subject = strSubject,
        Body = strBody
    })

    {
        Thread T1 = new Thread(delegate() { SMTP.Send(message); } );
        T1.Start();
    }
4

3 に答える 3

13

解決済み:

var SMTP = new SmtpClient
        {
            Host = txtBxSenderHost.Text,
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
        };

        Thread T1 = new Thread(delegate()
        {
            using (var message = new MailMessage(senderAdrress, toAddress)
            {
                Subject = strSubject,
                Body = strBody
            })
            {
                {
                    SMTP.Send(message);
                }
            }
        });

        T1.Start();
于 2013-01-25T09:27:33.270 に答える
1

Smtp.SendAsync メソッドを使用しないのはなぜですか?

http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx

于 2013-01-25T10:41:39.933 に答える