1

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

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

MailMessage mail = new MailMessage("from@address.com", "to@address.com");

などは正常に機能しましたが、複数の To アドレスを追加する必要があったため、次のように変更しました。

MailMessage mail = new MailMessage();

mail.From = new MailAddress("from@address.com");
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 つの宛先アドレスが存在します。最初に実行されるときは問題ありませんが、2 回目のループではハングします。

client.Send(mail);

ここで何か不足していますか?MailMessage を使用するのは初めてなので、何か重大なことが抜けている可能性があります。

乾杯

レディ

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

4

3 に答える 3

1

To アドレスが必要です。

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

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

于 2009-12-15T16:06:32.823 に答える
0

クラスはMailMessage実装IDiposableしているので、おそらくそれはあなたがそれを処分していないからですか?

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

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("from@address.com");
    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);
    }
}
于 2012-02-03T17:19:01.353 に答える
0

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

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

どうやら例外はなかったので、これはコードを短くするだけです。

デフォルトのタイムアウトは 100 秒です。あなたは十分に長く待っていますか?

もう 1 つのオプションは、ブロックされないようにSendAsyncを使用することです。

ドキュメントをまだ読んでいない場合は、MSDN の SmtpClient.Send へのリンクを次に示します。

于 2009-12-15T16:38:19.123 に答える