6

我们之前在 StackOverflow 上看到过一些类似的问题,System.Web.Helpers.Webmail.Send但我没有看到对发生的事情的正确解释。

关于to:参数,文档说:

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

而且我看到答案说“使用逗号,因为文档错误”,或“使用分号”,或“可能是环境问题”

编码

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 的系统上,我只成功使用了一个地址。

4

2 回答 2

2

这可能与您连接的继电器的种类以及它们接受的方法的种类有关。分隔符不仅对每个特定的邮件服务器很重要,而且电子邮件地址也很重要(因为不同的中继将被配置为接受某些电子邮件,并且会为错误的电子邮件抛出各种错误代码,这又会引发各种异常)。

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

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

于 2013-08-29T17:08:39.163 回答
1

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

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

结果,它只是创建了一个需要分隔符的新MailAddressCollectioncomma。字符串从未to替换或操作分号(除非这是在Helper类中完成的,但情况似乎并非如此)。

于 2013-08-29T17:08:41.020 回答