2013-08-29 57 views
6

在討論System.Web.Helpers.Webmail.Send之前,我們已經在StackOverflow上看到了一些類似的問題,但是我看不到有關發生的事情的正確解釋。WebMail.Send發生何種問題涉及多個收件人?

關於to:參數,the documentation說:

一個或多個收件人的電子郵件地址。使用分號(;)分隔多個收件人。

我看到答案是"use a comma because the docs are wrong"或「使用分號」或"maybe it's an environment issue"

代碼

WebMail.Send(
    to: "[email protected],[email protected]", 
    from: "[email protected]", 
    subject: "Some Automated Email", 
    body: "<strong>Lorem Ipsum</strong>", 
    isBodyHtml: true 
); 

我已經嘗試了幾個方案:

[email protected];[email protected]

沒有收到電子郵件:An invalid character was found in the mail header: ';'.

[email protected]; [email protected]

只有第一個收件人收到

[email protected],[email protected]

都收到電子郵件

[email protected], [email protected]

都收到的電子郵件的郵件

[email protected], [email protected]

首先收到的電子郵件,但是未捕獲的異常:Mailbox unavailable. The server response was: 5.7.1 Unable to relay

[email protected], [email protected]

沒有收到電子郵件:An invalid character was found in the mail header: ','.

任何人可以提供一些線索這光?我實際上在另一臺服務器上有更多的bizzare行爲;我正在使用Exchange進行上述測試,但在hMailServer上實際遇到了不同的行爲,其中[email protected],[email protected]導致無提示失敗,並且沒有服務器錯誤,並且在hMailServer日誌中沒有發送郵件。在帶有hMailServer的系統上,我只有一個地址才能成功。

回答

2

這可能與您連接的各種繼電器以及它們接受的各種方法有關。不僅定界符字符對每個特定的郵件服務器都很重要,而且電子郵件地址也是這樣(因爲不同的中繼器將被配置爲接受某些電子郵件,並且會爲錯誤的電子郵件返回各種錯誤代碼,這反過來會引發各種例外)。

System.Net.Mail命名空間有一個MailMessage對象,它包含To,CC和Bcc的MailAddressCollection對象,您可以爲每個收件人調用Add()。

我有一個library發送郵件(沒有中繼),使用它(一切都去密送),你可以檢查那裏的代碼。如果您碰巧使用了該庫,請務必保持良好聲譽的IP地址,並確保您的DNS記錄的設置方式與繼電器(PTR和A記錄所有設置)相同。

1

據我所知,文檔中的錯誤是可能的情況。我沒有這個程序集,所以我無法在ILSpy中確認它,但顯然幫助程序類僅使用System.Net.Mail。通過我得到這個內部方法的四個參數重載。

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

其結果是,它只需創建一個新的MailAddressCollection這需要一個comma分隔符。在任何時候,to字符串都不會替換或操作分號(除非在Helper類中完成,但似乎並非如此)。