MailAddress 构造函数中的多个地址

Posted

技术标签:

【中文标题】MailAddress 构造函数中的多个地址【英文标题】:Multiple address in MailAddress constructor 【发布时间】:2012-04-01 22:21:45 【问题描述】:

我正试图将多个添加到这样的地址。

MailAddress mailAddressTo = new MailAddress("sample@google.com;sample1@google.com","Vetrivelmp");

但会抛出类似

的错误
An invalid character was found in the mail header: ';'

【问题讨论】:

【参考方案1】:

您不能使用MailAddress 构造函数来指定多个收据,但您可以使用MailMessage 对象,如下所示。

使用MailMessage (not MailAddress) 构造函数:

var msg = new MailMessage("from@domain.com", "to1@gmail.com, to2@gmail.com");

另一种方法是:

MailMessage mail = new MailMessage();
mail.To.Add("me@mycompany.com,him@hiscompany.com,her@hercompany.com");

另一种方法是:

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");

【讨论】:

我的和你的有什么区别? 我知道这个但是如何在构造函数本身中设置? 他有一个 MailMessage 对象作为开始。实际上,我在回答中已经对此进行了一些解释。简单的答案是mail.To 是一个MailAddressCollection,它允许多个电子邮件地址。 MailAddress 只拥有一个地址(它的单数可能有助于您记住这一点)。 是的,但如果我给出像“sample@google.com;sample1&google.com”这样的格式。它需要第二个电子邮件 ID 和发送邮件。这是正确的功能吗? mail.To = "me@mycompany.com;him@hiscompany.com;her@hercompany.com"; 真的有用吗? MailMessage.To 是一个 MailAddressCollection 对象。您不能为其分配字符串 - 您需要使用 .Add 方法,并且您的电子邮件地址列表必须用逗号分隔,而不是分号。【参考方案2】:

实际上,分号不是有效的分隔符。不幸的是,MSDN 没有记录这一点,必须自己找出来。

如果您想添加更多地址,请用逗号分隔。并且空间将划分显示名称和电子邮件地址。 “To”属性接受以下格式:

“email@server.com” “email1@server1.com, email2@server2.com” “名称 email@server.com” “名称 email@server1.com, email@server2.com”

等等……

我写了更多关于这个话题in this blog post

【讨论】:

在您的最后一个示例中,"name email@server1.com, email@server2.com",MailMessage 将我所做的测试解释为“电子邮件名称”作为电子邮件前缀。我必须这样做:"Adam Miller <AdamMiller@somewhere.com>" 分隔符现在在文档中 - docs.microsoft.com/en-us/dotnet/api/…【参考方案3】:

使用逗号 (,) 代替分号 (;) 作为分隔符。

如果以分号字符 (";") 分隔的多个电子邮件地址在地址参数中传递。引发 FormatException 异常。

MailAddressCollection.Add(String) Method

有效的例子

MailAddressCollection.Add(String):

using (MailMessage msg = new MailMessage())

  ...
  msg.To.Add("sample@google.com, sample1@google.com");
  ...

MailAddressCollection.Add(MailAddress):

using (MailMessage msg = new MailMessage())

  ...
  msg.To.Add(new MailAddress("sample@google.com", "Vetrivelmp"));
  msg.To.Add(new MailAddress("sample1@google.com", "Vetrivelmp1"));
  ...

【讨论】:

【参考方案4】:

可能会有一个问题,您为什么要这样做?像MailMessage.To 这样的东西是MailAddressCollection,它的Add 方法被重载以在一个字符串中接收多个电子邮件地址,用逗号分隔(参见http://msdn.microsoft.com/en-us/library/ms144695.aspx)。

MailAddress 对象的通常用途是将它们添加到电子邮件中,如果您有多个地址,那么我假设您想将它们添加到 To、CC 等字段之一,在这种情况下,您应该使用 Add 重载很好。如果还有其他事情,那么您将不得不为您正在尝试做的事情提供更多背景信息。

【讨论】:

原因是我有预定义的代码,我不应该更改。那么是否可以在 mailaddress 构造函数中添加多个 id? 不,你不能。 MailAddress 对象用于单个邮件地址。 msdn.microsoft.com/en-us/library/… 是希望回答您对该对象的任何其他问题的文档。【参考方案5】:

这是这个主题的另一个变体,FWIW:

    SenderEmail = "me@mine.com";
    RecipientEmail = "this@this.com, that@that.com, other@theother.com";
    MailMessage msg = new MailMessage(SenderEmail, RecipientEmail);

注意逗号。更多详细信息可以在 MSDN here 找到。

【讨论】:

【参考方案6】:

@Tschareck

“逗号用于分隔邮件地址列表中的元素。因此,在列表中未加引号的显示名称中不应使用逗号。允许使用以下邮件地址”http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress.aspx

最好的问候, 阿那鲁德​​

【讨论】:

【参考方案7】:

这对我有用。

  MailMessage m_message = new MailMessage();
  string m_addys = "addy2@foo.com,addy1@foo.com";
  m_message.To.Add(m_addys);

【讨论】:

这并不像你认为的那样。仅向 addy2@foo.com 发送电子邮件,此人的姓名将显示为 addy1@foo.com 你是对的。它应该是这样的:“addy2@foo.com,addy1@foo.com”。它是一个字符串而不是 MailAddress。

以上是关于MailAddress 构造函数中的多个地址的主要内容,如果未能解决你的问题,请参考以下文章

复制构造函数中的c ++用户定义成员

继承中子类构造函数相关问题

java中一个对象的初始化过程

javascript中的多个构造函数

super staticfinal关键字加深记忆哦!还有父子类构造函数调用问题

打字稿中的多个构造函数