2010-03-04 99 views
5

我剛剛聽到喬爾&傑夫在他們的播客號碼83中談到了發件人ID,這讓我想起了我正在爲我正在工作的網站所需要的東西。如何通過C#發送郵件時實現發件人ID?

從服務器發送的所有電子郵件中有大約90%被反彈或類似,可能是因爲服務器未被「驗證」。

我有一個服務器的SPF記錄,但這也差不多。

因此,因爲StackOverflow已經解決了這些問題,所以我猜Sender ID一定是要走的路。

據我可以告訴從維基百科,它需要你發送郵件時修改郵件頭 - 我怎麼會去做這個從C#?

此外,我需要設置DNS明智等,使這項工作?

還是我在這裏完全錯誤的軌道?

編輯:我在C#中使用標準的SmtpClient類來發送郵件,並且我包含了一個明文和一個HTML版本的mailbody。

+0

您將spf添加到您的域的DNS配置? – curtisk 2010-03-04 18:56:40

+0

是按順序得到那部分:-) – Steffen 2010-03-05 07:58:08

回答

4

如果你在代表其他用戶發送郵件,你希望它被接受,你可能需要做到以下幾點:

在你的對象MAILMESSAGE:

mail.To = new MailAddress("[email protected]", "To Someone"); 
mail.From = new MailAddress("[email protected]", "Sending User"); 
mail.Sender = new MailAddress("[email protected]", "Your Server"); 
mail.ReplyTo = new MailAddress("[email protected]", "Sending User"); 

這將生成SPF驗證工作所需的頭文件(假設服務器已將其設置爲默認值,他們可以選擇要驗證的部分)。這將使得電子郵件的樣子(Outlook)中

來源:您的服務器代表發送用戶
要的:某人

大多數SPF協議將驗證Sender:頭,以確定是否發送域允許或拒絕它,所以這需要來自您的域名,而不管您是從哪個人發送它。

此外,您可能需要再次檢查您是否有your SPF records set up right,並且您的IP地址不在blacklist(如spamhaus)上。檢查呼叫的實際返回文本通常會告訴你爲什麼它會被一個5.something錯誤阻塞。

+0

我的代碼中沒有發件人部分,所以可能會有所幫助。另外,我會檢查您的鏈接是否有SPF記錄,並確保我的判斷正確。謝謝 :-) – Steffen 2010-03-05 08:00:05

2

我不明白你爲什麼需要對發件人ID/SPF進行任何標題更改。使用您的記錄,您只需確保您的傳出消息來自:在DNS中的SPF記錄中具有匹配發布的公共IP的域。

不過,我想你可以檢查MailMessage.Headers看到正在發送的內容標題(或發送消息到自己),以確定基於您的SPF記錄類型如何接收郵件服務器將計算域匹配到你的SPF記錄。