【问题标题】:An invalid character was found in the mail header: ';' in c#在邮件标头中发现无效字符:';'在c#中
【发布时间】:2015-09-18 05:49:12
【问题描述】:

我正在使用 System.Net.Mail 在我的应用程序中发送电子邮件,但我遇到了一个异常,我无法弄清楚问题出在哪里/在哪里以及如何解决它。

错误提示我有一些无效字符:

在邮件标题中发现无效字符:';'。

我尝试了谷歌但没有成功。

带有电子邮件地址的字符串是:

john@mydomain.org; beth@mydomain.org; alfred@mydomain.org; barbie@mydomain.org; 

这是我的电子邮件发送代码:

    SmtpClient smtpClient = new SmtpClient("smtp.........");
    System.Net.Mail.MailMessage mailMessagePlainText = new System.Net.Mail.MailMessage();

    mailMessagePlainText.IsBodyHtml = true;
    mailMessagePlainText.From = new MailAddress("vincent@mydomain.org", "admin");

    mailMessagePlainText.Subject = "test";
    mailMessagePlainText.Body = "test";

    mailMessagePlainText.To.Add(new MailAddress(List1.ToString(), ""));
    mailMessagePlainText.Bcc.Add(new MailAddress("vincent@mydomain.org", ""));

    try
    {
        smtpClient.Send(mailMessagePlainText);
    }
    catch (Exception ex)
    {
        throw (ex);
    }

【问题讨论】:

  • List1 的值是多少?是你提到的邮箱地址吗?
  • @MeanGreen:是的,先生,List1 的值是电子邮件地址字符串:john@mydomain.org; beth@mydomain.org; alfred@mydomain.org; barbie@mydomain.org;
  • 只是一个建议,您可以尝试使用 Trim() 或 .Replace() 方法显式删除它
  • 使用;在 SMTP 中无效;它们需要用逗号分隔。您应该有一个此类字符串的列表(不是单个字符串),然后单独添加它们以让 SMTP 库为您处理它。

标签: c# email


【解决方案1】:
foreach (var address in List1.split(';')) {
    mailMessagePlainText.To.Add(new MailAddress(address.Trim(), ""));
}

因为根据您上面的字符串,上面这个循环中的每个地址都会产生以下内容:

"john@mydomain.org"
" beth@mydomain.org"
" alfred@mydomain.org"
" barbie@mydomain.org"

因此,将.Trim() 添加到地址将使您的代码正常工作。

【讨论】:

  • 参数“地址”不能为空字符串。参数名称:地址
  • 出现“空字符串”错误的原因是电子邮件地址的字符串带有分号后缀。因此,Split() 方法会将分号后面的空格视为完全有效的空字符串。但是,当它被传递到MailAddress 的构造函数中时(在foreach 循环的最终交互中),它无法验证电子邮件地址。修复 - 删除结束分号。我知道这是一篇旧帖子,但遇到此问题的任何人都可能会发现如果没有此修复,上述答案是不够的。
【解决方案2】:

MailAddressCollection(如您的mailMessagePlainText.To)有一个Add method,它接受包含邮件地址列表的字符串,用逗号分隔

因此,要使用它,您需要将 ; 更改为 , 并可能删除多余的空格。

【讨论】:

  • 字符串中没有空格,我已经替换了';'和 ','。问题是字符串中的最后一个字符...
【解决方案3】:

您似乎将地址添加为单个 MailAddress,您需要一次添加 1 个地址。我不知道还有哪些其他重载可用,但以下可能会起作用。

我将字符串按; 拆分,并分别添加每个地址。​​

替换

mailMessagePlainText.To.Add(new MailAddress(List1.ToString(), ""));

foreach (var address in List1.split(';')) {
    mailMessagePlainText.To.Add(new MailAddress(address , ""));
}

【讨论】:

  • 谢谢,但现在我有了新的例外:指定的字符串不是电子邮件地址所需的格式。
  • 正如 Hans Kesting 在他的回答中提到的(我现在无法访问 API),角色应该是 ,而不是 ;
猜你喜欢
  • 2012-05-07
  • 1970-01-01
  • 2013-07-29
  • 2014-01-03
  • 2014-11-12
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多