MailMessage.To.Add()抛出异常:"邮件头中发现了无效字符:','。"

31

我在SharePoint项目中使用它时遇到了这个错误,在控制台应用程序中却正常工作

我正在使用MailMessage类通过SMTP发送电子邮件。 但是当我尝试将用户添加到“To”属性时,我遇到了{"邮件头中发现了一个无效的字符:','。"}异常,我认为这里发生了一些可疑的事情,因为','允许分隔多个用户。添加多个用户

** 多个电子邮件地址必须用逗号(",")分隔。**

MailMessage mailMessage = new MailMessage();

 mailMessage.To.Add("amir_khan@enter.com,walter_white@yahoo.com,");

@Izzy 抱歉,我尝试在stackoverflow上搜索,但无法找到针对这种特定情况的解决方案,即MailMessage在MSDN中写入“,”字符时不被接受。 这与异常有关。 - nbi
6个回答

50
找到了罪魁祸首:就是最后一个电子邮件地址末尾的那个多余的逗号。
mailMessage.To.Add("amir_khan@enter.com,walter_white@yahoo.com,");

去掉末尾的逗号,它就会正常工作。
mailMessage.To.Add("amir_khan@enter.com,walter_white@yahoo.com");

如果在SharePoint中无法工作,请像下面这样将每个地址单独添加到MailMessage对象中;
foreach (var address in StringofEmails.Split(",")) {
    MailMessage.To.Add(new MailAddress(address.Trim(), ""));
}

1
这个回答被低估了。这也是我的问题。谢谢。 - QuietSeditionist
3
没想到这么简单!只需在我的字符串末尾添加.Trim(',');即可。 - Kevin Candlert
如果您的收件人在集合中,则可以使用“string recipients = String.Join(",", _config.NotificationSettings.MailSettings.Recipients);” - Michael Ushakov

14

即使我末尾没有逗号,也收到了错误提示。原来是我需要在逗号后留一个空格。

我需要将代码从string.Join(",", emailList)改为string.Join(", ", emailList)

以下方法对我无效。

mailMessage.To.Add("amir_khan@enter.com,walter_white@yahoo.com");

以下方法适用于我(注意,逗号后面有空格)。

mailMessage.To.Add("amir_khan@enter.com, walter_white@yahoo.com");

1
这是我升级从.Net 3.5 到 .Net 4.7.2 后遇到的问题。他们必须引入了更严格的解析规则。 - zemien
将空格放置在第一个电子邮件地址(amir_khan@enter.com)和第二个名称(walter_white@yahoo.com)之间,这意味着第一个是电子邮件地址,第二个是名称。我认为它不会发送给第二个人(walter_white@yahoo.com)。您确认它已发送到两个电子邮件地址吗? - Robert Smith
嘿@RobertSmith,是的,当我尝试使用.NET Framework 4.6+时,它起作用了。我最近没有尝试过它。 - Thiru

2

我无法复制这个问题。对我来说,上述代码是有效的。也许您可以尝试每次使用单独的“To”添加它们。

mailMessage.To.Add(x);
mailMessage.To.Add(y);

谢谢。它可以工作,但在使用问题中指定的内容方面是否存在任何问题? - nbi
@Nee 抱歉,我找不到问题。我直接将你的代码复制到我的 VS 中,没有遇到任何问题 :? 或许可以尝试重新启动一下 VS,或者在逗号后面添加一个空格? - Stephen Walker
只有在 SharePoint 项目中使用时,我才会遇到这个错误,而在控制台应用程序或其他地方则没有。 - nbi
2
在System.Web和System.Net中都有Smtp类。其中一个必须使用逗号,另一个必须使用分号。我不记得哪个是哪个了。如果我没记错的话,System.Net中的那个是推荐使用的... - user1429080
1
分号与System.Net.Mail.SmtpClient不兼容。 - JayJay

0
在我的情况下,我忘记过滤掉没有电子邮件的用户,因此我像这样形成了我的电子邮件列表:
username1@ldomain.com
username2@domain.com
@domain.com  //PROBLEM HERE
username3@linamar.com

-1

我需要更新一个项目,使其具有更好的电子邮件外观,并发布了Web项目,但出现了以下错误:

我的错误来自一些调试代码,其中

currentUser = myname@mycompany.com   

已添加

MailAddress mailAddressUser = new MailAddress(currentUser + "@mycompany.com");

本质上:

myname@mycompany.com@mycompany.com    

所以,与其说是尾随逗号的问题,实际上更像是另一个 @ 符号。


-1
你也可以这样做。 这种方法在将电子邮件地址添加到分发列表之前还会验证其有效性。 这样你就只会得到有效的分发列表。
var emails = ("amir_khan@enter.com,walter_white@yahoo.com,").Split(',');
MailMessage mailMessage = new MailMessage();
foreach (var email from emails)
{
     var emailAddressAttribute = new EmailAddressAttribute();
     if(emailAddressAttribute.IsValid(email))
     {
          MailMessage.To.Add(email);
     }
}

1
感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有很多答案了,其中一个答案已经得到社区的广泛验证。您确定您的方法之前没有被提到过吗?如果是这样的话,能否请您解释一下您的方法有何不同,什么情况下您的方法可能更好,以及为什么您认为之前的答案不够满意。您能否请编辑您的答案并提供一个解释? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接