如何修复向多个收件人发送邮件时抛出的异常?

时间:2011-05-06 16:45:07

标签: c# email .net-4.0

在下面的代码片段中,我在'this.Recipients'上获得了FormatException。更具体地说,消息是“在邮件标题中找到了无效字符:';'”。

收件人是由分号(';'字符)分隔的三个电子邮件地址的字符串。从app.config中读取收件人列表,数据将其添加到“收件人”变量中。

如果多个收件人应以分号分隔,我怎么能收到此错误?有什么建议?一如既往,感谢您的帮助!

public bool Send()
{
    MailMessage mailMsg = 
       new MailMessage(this.Sender, this.Recipients, this.Subject, this.Message);

    SmtpClient smtpServer = new SmtpClient(SMTP);
    smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;

编辑#1 - This表示使用分号。

5 个答案:

答案 0 :(得分:14)

我在MailMessage constructor documentation中看不到任何建议您可以指定多个这样的收件人。我建议您创建MailMessage对象,然后单独添加每个电子邮件地址。

请注意,MailAddressCollection.Add方法已记录为接受逗号分隔的地址...因此可能也可以在构造函数中使用。< / p>

答案 1 :(得分:5)

您必须使用.Add方法添加这些地址。以下是我使用的一些示例代码:

string[] toAddressList = toAddress.Split(';');

//Loads the To address field
foreach (string address in toAddressList)
{
    if (address.Length > 0)
    {
        mail.To.Add(address);
    }
}

答案 2 :(得分:2)

如果您使用逗号分隔收件人电子邮件地址,则可以将其从死亡中恢复,这将有效。

this.Recipients = "email1@test.com, email2@test.com";

var mailMsg = new MailMessage(this.Sender, this.Recipients, this.Subject, this.Message);
SmtpClient smtpServer = new SmtpClient(SMTP);
smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpServer.Send(mailMsg);

答案 3 :(得分:0)

试试这个

            string[] allTo = strTo.Split(';');
            for (int i = 0; i < allTo.Length; i++)
            { 
                if (allTo[i].Trim() != "")
                    message.To.Add(new MailAddress(allTo[i]));
            }                

答案 4 :(得分:0)

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("test@gmail.com;john@rediff.com,prashant@mail.com"));