web-dev-qa-db-ja.com

複数の「宛先」アドレスを追加する.Net System.Mail.Message

編集:この質問は、赤いニシンの練習問題を除いて無意味です。この問題は、私の愚かさ(ホストが指定されておらず、web.configで間違っていたために電子メールが送信されなかった)と、ユーザーが電子メールを受信する場合と受信しない場合があることを組み合わせたものであることが判明しました実際には、彼らは決してメールを受け取っていませんでした。

だから、制御された設定で問題を再現するための適切な手順をとる代わりに、ユーザー情報と「私のマシンで動作する」という考え方に頼っていました。自分自身と、時としてばかであることがある他の人たちへの良いリマインダー。


矛盾していると思うものをヒットし、何か間違っているのか、バカなのか、または...

MailMessage msg = new MailMessage();
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");

本当にこのメールは最後の1人にしか送信されません。

倍数を追加するには、これを行う必要があります。

msg.To.Add("[email protected],[email protected],[email protected],[email protected]");

わかりません。私はToアドレスコレクションに複数の人を追加すると思っていましたが、私はそれを置き換えていました。

私は自分のエラーに気付いたと思う-コレクションに1つのアイテムを追加するには、.To.Add(new MailAddress( "[email protected]"))を使用します

stringのみを使用すると、リストにあるすべてのものが置き換えられます。 編集:他の人々はテストしており、この動作を見ていません。これは、フレームワークの特定のバージョンのバグか、おそらく私によるバカ操作です。

あーこれはかなり大きな問題だと思います!私は自分の質問に答えましたが、これはstackoverflowアーカイブにある価値があると思うので、私はまだ尋ねます。たぶん、誰かがあなたが陥る可能性のある他のトラップのアイデアを持っているかもしれません。

40
Matt Dawdy

バグを再現できませんでした:

var message = new MailMessage();

message.To.Add("[email protected]");
message.To.Add("[email protected]");

message.From = new MailAddress("[email protected]");
message.Subject = "Test";
message.Body = "Test";

var client = new SmtpClient("localhost", 25);
client.Send(message);

宛先の内容のダンプ: MailAddressCollection

MailAddressCollection(2アイテム)
DisplayNameユーザーホストアドレス

ユーザーexample.com [email protected]
user2 example.com [email protected]

smtp4dev でキャッチされた結果の電子メール:

Received: from mycomputername (mycomputername [127.0.0.1])
     by localhost (Eric Daugherty's C# Email Server)
     3/8/2010 12:50:28 PM
MIME-Version: 1.0
From: [email protected]
To: [email protected], [email protected]
Date: 8 Mar 2010 12:50:28 -0800
Subject: Test
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

Test

コードまたはSMTPサーバーで他の問題が発生していないことを確認していますか?

33
Lance McNearney

これは、複数のSystem.Net.Mail.MailAddressオブジェクト、またはカンマで区切られたすべてのアドレスを含む単一の文字列を提供できます

10
Brian Surowiec
private string FormatMultipleEmailAddresses(string emailAddresses)
    {
      var delimiters = new[] { ',', ';' };

      var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

      return string.Join(",", addresses);
    }

次のように使用できます

var mailMessage = new MailMessage();
mailMessage.To.Add(FormatMultipleEmailAddresses("[email protected];[email protected],[email protected]"));
9
prashant

電子メールをコンマ区切りの文字列("[email protected], [email protected]"):

C#:

ArrayList arEmails = new ArrayList();
arEmails.Add("[email protected]");
arEmails.Add("[email protected]");
           
string strEmails = string.Join(", ", arEmails);

興味があるならVB.NET:

Dim arEmails As New ArrayList
arEmails.Add("[email protected]")
arEmails.Add("[email protected]")

Dim strEmails As String = String.Join(", ", arEmails)
5
Chad Levy

複数のSystem.MailAdressオブジェクトを追加して、必要なものを取得します。

3
David Brunelle

これを見つけてくれてありがとう、私は彼らがコレクションの最後に追加されるあなたと同じように考える文字列を追加しようとしていました。パラメーターは次のとおりです。

msg.to.Add(<MailAddress>)は、コレクションの最後にMailAddressを追加します
msg.to.Add(<string>)メールのリストをコレクションに追加します

パラメーターのタイプによって若干異なるアクションがありますが、これはかなり悪い形式だと思います。何かの分割メソッドAddStringListを好んだと思います。

0
Mike

このコードをアドレスに入れてください:

objMessage.To.Add(***addresses:=***"[email protected] , [email protected] , [email protected]")

0
user2923556