.Net System.Mail.Message添加多个"To"地址

Mat*_*wdy 40 asp.net system.net.mail

编辑:这个问题毫无意义,除了作为红鲱鱼的练习.问题结果是我的愚蠢(NO ONE正在通过电子邮件发送,因为主机没有被指定,并且在web.config中不正确),用户告诉我他们有时会收到电子邮件,有时却没有,当时实际上他们从来没有收到过电子邮件.

因此,我没有采取适当的步骤在受控设置中重现问题,而是依靠用户信息和"它在我的机器上工作"的心态.很好地提醒自己和那些有时候是白痴的人.


我只是打了一些我认为不一致的东西,想看看我做错了什么,如果我是个白痴,或者......

MailMessage msg = new MailMessage();
msg.To.Add("person1@domain.com");
msg.To.Add("person2@domain.com");
msg.To.Add("person3@domain.com");
msg.To.Add("person4@domain.com");
Run Code Online (Sandbox Code Playgroud)

真的只发送这封电子邮件给1个人,最后一个.

要添加倍数,我必须这样做:

msg.To.Add("person1@domain.com,person2@domain.com,person3@domain.com,person4@domain.com");
Run Code Online (Sandbox Code Playgroud)

我不明白.我以为我在To地址集中添加了多个人,但我正在做的是替换它.

我想我刚刚意识到我的错误 - 要将一个项目添加到集合中,请使用.To.Add(new MailAddress("person@domain.com"))

如果您只使用a string,它将替换其列表中的所有内容. 编辑:其他人已经测试,并没有看到这种行为.这可能是我特定版本的框架中的错误,或者更可能是我的白痴动作.

啊.我认为这是一个相当大的陷阱!既然我回答了我自己的问题,但我认为这在stackoverflow存档中很有价值,我仍然会问它.也许有人甚至会想到你可以陷入的其他陷阱.

Lan*_*ney 33

我无法复制你的错误:

var message = new MailMessage();

message.To.Add("user@example.com");
message.To.Add("user2@example.com");

message.From = new MailAddress("test@example.com");
message.Subject = "Test";
message.Body = "Test";

var client = new SmtpClient("localhost", 25);
client.Send(message);
Run Code Online (Sandbox Code Playgroud)

转储To:MailAddressCollection的内容:

MailAddressCollection(2项)
DisplayName用户主机地址

user example.com user@example.com
user2 example.com user2@example.com

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: test@example.com
To: user@example.com, user2@example.com
Date: 8 Mar 2010 12:50:28 -0800
Subject: Test
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

Test
Run Code Online (Sandbox Code Playgroud)

您确定您的代码或SMTP服务器上没有其他问题吗?

  • @Matt Dawdy:您可以下载链接的smtp4dev来验证*您正在做的事情. (3认同)

Bri*_*iec 10

您可以使用多个System.Net.Mail.MailAddress对象执行此操作,也可以提供包含以逗号分隔的所有地址的单个字符串


pra*_*ant 9

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

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

      return string.Join(",", addresses);
    }
Run Code Online (Sandbox Code Playgroud)

现在你可以像使用它一样

var mailMessage = new MailMessage();
mailMessage.To.Add(FormatMultipleEmailAddresses("test@gmail.com;john@rediff.com,prashant@mail.com"));
Run Code Online (Sandbox Code Playgroud)


Cha*_*evy 5

您可以尝试将电子邮件放入逗号分隔的字符串("person1@domain.com, person2@domain.com")中:

C#:

ArrayList arEmails = new ArrayList();
arEmails.Add("person1@domain.com");
arEmails.Add("person2@domain.com");
           
string strEmails = string.Join(", ", arEmails);
Run Code Online (Sandbox Code Playgroud)

VB.NET如果你有兴趣:

Dim arEmails As New ArrayList
arEmails.Add("person1@domain.com")
arEmails.Add("person2@domain.com")

Dim strEmails As String = String.Join(", ", arEmails)
Run Code Online (Sandbox Code Playgroud)