WebMail.Send有什么问题,涉及到多个收件人?

时间:2013-08-29 16:30:33

标签: c# .net email webmail

在关于System.Web.Helpers.Webmail.Send之前,我们已经在StackOverflow上看到了一些类似的问题,但我看不到正在发生的事情的正确解释。

关于to:参数,the documentation说:

  

收件人或收件人的电子邮件地址。使用分号(;)分隔多个收件人。

我看过"use a comma because the docs are wrong"或“使用分号”或"maybe it's an environment issue"的答案。

代码

WebMail.Send(
    to: "joe.bloggs@mail.com,jane.bloggs@mail.com",
    from: "no-reply@company.com",
    subject: "Some Automated Email",
    body: "<strong>Lorem Ipsum</strong>",
    isBodyHtml: true
);

我尝试了几种方案:

joe.bloggs@mail.com;jane.bloggs@mail.com

未收到任何电子邮件:An invalid character was found in the mail header: ';'.

joe.bloggs@mail.com; jane.bloggs@mail.com

只有第一位收件人才会收到电子邮件

joe.bloggs@mail.com,jane.bloggs@mail.com

都收到了电子邮件

joe.bloggs@mail.com, jane.bloggs@mail.com

都收到了电子邮件

joe.bloggs@mail.com, non-existant@mail.com

首先收到了电子邮件,但未被捕获的例外:Mailbox unavailable. The server response was: 5.7.1 Unable to relay

non-existant@mail.com, joe.bloggs@mail.com

未收到任何电子邮件:An invalid character was found in the mail header: ','.

有人可以对此有所了解吗?我实际上在不同的服务器上有更多的眩晕行为;我正在使用Exchange进行上述测试,但实际上在hMailServer上遇到了不同的行为,其中joe.bloggs@mail.com,jane.bloggs@mail.com导致静默失败,没有服务器错误,hMailServer日志中没有外发邮件。在使用hMailServer的系统上,我只使用一个地址获得了成功。

2 个答案:

答案 0 :(得分:2)

这可能与您连接的各种继电器以及它们接受的各种方法有关。分隔符不仅对每个特定的邮件服务器都很重要,而且电子邮件地址也是如此(因为不同的中继将被配置为接受某些电子邮件,并且会针对糟糕的电子邮件返回各种错误代码,这将反过来抛出各种例外)。

System.Net.Mail命名空间有一个MailMessage对象,其中包含To,CC和Bcc的MailAddressCollection对象,您可以为每个收件人调用Add()。

我有library发送使用它的邮件(没有中继)(一切都转到密件抄送),你可以检查那里的代码。如果您碰巧使用该库,请确保您的IP地址保持良好的声誉,并确保您的DNS记录设置与您作为中继时的设置相同(PTR和A记录所有设置)。

答案 1 :(得分:1)

据我了解,文档中的错误是可能的情况。我没有这个程序集,所以我无法在ILSpy中确认它,但显然帮助程序类只使用System.Net.Mail。通过我的四个参数重载,我得到了这个内部方法。

internal Message(string from, string to) : this()
{
    //...
    this.to = new MailAddressCollection
    {
       to
    }
}

因此,它只是创建一个新的MailAddressCollection,需要comma分隔符。 to字符串在任何时候都没有替换或操纵分号(除非这是在Helper类中完成的,但似乎并非如此)。