【问题标题】:Multiple address in MailAddress constructorMailAddress 构造函数中的多个地址
【发布时间】: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: ';'

【问题讨论】:

    标签: c# .net system.net.mail mailmessage


    【解决方案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):

    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。
          猜你喜欢
          • 2022-01-04
          • 2017-10-27
          • 2011-11-20
          • 1970-01-01
          • 2013-02-05
          • 1970-01-01
          • 2022-01-26
          • 1970-01-01
          • 2018-09-16
          相关资源
          最近更新 更多