1


0

MailMessageプロパティを変更し、client.Sendでハングするようになりました

System.Net.Mail.MailMessageを使用して、C#Windowsアプリからメールを送信しています。

私はもともとこれを持っていました:

MailMessage mail = new MailMessage("[email protected]", "[email protected]");

などはうまくいきましたが、アドレスに複数を追加する必要があったため、これに変更しました:

MailMessage mail = new MailMessage();

mail.From = new MailAddress("[email protected]");
foreach (string to in to_add)
{
    if (to.Trim() != "")
    {
        mail.To.Add(to.Trim());
    }
}

mail.Body = message;
mail.Subject = "Subject Text";

SmtpClient client = new SmtpClient("0.0.0.0");
client.UseDefaultCredentials = true;

client.Send(mail);

このコードは数回ループする可能性があり、文字列配列には最大3つのToアドレスがあります-最初に実行されたときは問題ありませんが、2番目のループはハングします

client.Send(mail);

私はここに何かが足りない? MailMessageを使用したのは初めてなので、何か重要なものを見逃している可能性があります。

乾杯

主人公

p.s. IPアドレス「0.0.0.0」を使用していませんが、セキュリティ上の理由から正しいアドレスを削除しました。

3 Answer


1


宛先アドレスが必要です。

投稿したコードは、MailMessageにToアドレスがない場合があります。

さらに、SMTPサーバー「0.0.0.0」は存在しません。 これはサーバーの有効なIPアドレスではありません-「不明」のために予約されています。


0


to_addがアドレスの配列であると仮定すると、それらをループしてループを追加する必要はありません。 これはうまくいくはずです。

mail.To.Add( string.Join( ",", to_add ) );

明らかに例外はなかったので、これはコードを短縮するのに役立ちます。

デフォルトのhttp://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.timeout.aspx[timeout]は100秒です。 十分に待っていますか?

別のオプションは、ブロックしないようにhttp://msdn.microsoft.com/en-us/library/x5x13z6h.aspx[SendAsync]を使用することです。

ドキュメントをまだ読んでいない場合は、http://msdn.microsoft.com/en-us/library/swas0fwc.aspx [MSDのSmtpClient.Send]へのリンクをご覧ください。


0


MailMessage`クラスは IDiposable`を実装しているので、おそらくあなたがそれを破棄していないからでしょうか?

また、.NET 4.0より前は、System.Net.Mail.SmtpClientは使い捨てではありませんでしたが、4.0では「IDisposable」を実装しているため、「using」ステートメントでもラップする必要があります。 コードは次のようになります。

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add(string.Join(",", to_add ));
    mail.Body = message;
    mail.Subject = "Subject Text";

    using (SmtpClient client = new SmtpClient("0.0.0.0"))
    {
        client.UseDefaultCredentials = true;
        client.Send(mail);
    }
}