DSN:SMTP電子郵件的傳遞狀態通知

了解DSN如何將傳遞狀態引入SMTP電子郵件。

想知道您發送的電子郵件發生了什麼?

即使只是對SMTP協議的簡要介紹,您也會注意到除了通常的HELO之外,還有EHLO,這使得擴展 SMTP服務器在原始標準之外宣傳其功能。 其中之一是DSN。 DSN? DNA和DDT不夠?

為了爭辯說電子郵件是不可靠的,有人應該“ ......更好地服務於他們的服務器;牠吃掉了我的郵件...... ”並不罕見。 我自己做。 但是,沒有太多理由支持這些懷疑。

自RFC 821(從1982年)開始實施交付系統。 只要SMTP協議的數據部分完成並且服務器已接受發送的電子郵件,它就會對此負責。 如果由於任何原因無法將其發送給收件人,則必須將其發送回原始發件人並通知該錯誤。 這導致了一些模糊的電子郵件

除此之外,這個老慣例意味著要么你得到了一個錯誤信息,要么你什麼也得不到,在這種情況下你什麼都不知道:郵件可能已經到達,或者它可能沒有。 許多情況下的錯誤消息與沒有錯誤消息一樣有用。 隨著電子郵件變得越來越重要,這不再令人滿意(就像以前一樣)。

DSN擴展到SMTP

RFC 1891提出了對SMTP協議的一些擴展,這應該導致更可靠和更可用的DSN系統。 它是MAIL和RCPT命令的一組擴展(如果這對你來說毫無意義,請閱讀SMTP的工作方式 ,然後返回)。

沒有EHLO,沒有樂趣

首先,我們必須確保服務器支持DSN。 因此,我們必須向他說EHLO並仔細聆聽。 如果它在功能列表中以某種方式響應DSN,我們可以假定它能夠服務於我們的請求。 如果不是,那麼不是:我們可以嘗試另一台服務器,或者直接退回到沒有DSN的電子郵件 。 例如(我的輸入是藍色的,服務器的輸出是黑色的):

220 larose.magnet.at ESMTP Sendmail 8.8.6 / 8.8.6; Sun,1997年8月24日18:23:22 +0200
EHLO本地主機
250-larose.magnet.at Hello localhost [127.0.0.1],很高興認識你
250 EXPN
250動詞
250-8BITMIME
250-SIZE
250-DSN
250 ONEX
250-ETRN
250 XUSR
250幫助

幸運的是,我們還發現了DSN。

DSN發件人擴展

下一個命令通常是MAIL FROM :. 有了DSN,這也不例外。 但是您可能會發出兩個其他選項:RET和ENVID。

RET選項相當隨意放置在MAIL命令中,但它適用於此處以及其他任何地方。 目的是指定在發送失敗的情況下應該返回多少原始消息。 有效的參數是FULL和HDRS。 前者意味著完整的消息應包含在錯誤消息中,HDRS指示服務器僅返回失敗郵件的標題。 如果沒有指定RET,則由服務器決定做什麼。 在大多數情況下,HDRS將成為默認值。

ENVID確實屬於發件人,因為她或(而不是)她的電子郵件客戶端將成為唯一使我們獲得此信封標識符的人 。 其目的是告訴發件人可能發出的錯誤信息與哪個電子郵件相對應。 這個ID的格式基本上留給了發件人的想像。 我們不會在我們的例子中使用ENVID(想像!):

MAIL FROM:sender@example.com RET = HDRS
250 sender@example.com ...發件人確定

顯然,我們只想把頭部放回到我們的DSN中。

DSN收件人擴展

RCPT TO:獲得擴展的公平份額:NOTIFY和ORCPT。

NOTIFY是DSN的真正核心。 它告訴服務器何時發送傳送狀態通知。 第一個可能的值是從不意味著在任何情況下都不得將DSN返回給發件人。 沒有DSN,這是不可能的。 然後是SUCCESS,當你的郵件在目的地安排時,它會通知你。 FAILURE是SUCCESS的對手(!):如果在交付過程中發生了恐慌,DSN將到達。 最後一個選項是DELAY:如果交貨時間延遲,您將收到通知,但實際交付的結果(成功或失敗)尚未確定。 如果指定了它,它絕不是唯一的參數,其他三個可能出現在列表中,用逗號分隔。 成功和失敗彌補了一個非常強大的團隊(!),告訴你(幾乎)任何情況下你的郵件發生了什麼事情。

ORCPT的目的是保存電子郵件的原始收件人,例如,如果它被轉發到另一個地址。 此選項的參數是原始收件人的電子郵件地址以及地址類型。 地址類型首先是分號,最後是地址。 例如:

RCPT TO:support@example.com NOTIFY = FAILURE,DELAY ORCPT = rfc822; support@example.com
250 support@example.com ...收件人確定(將排隊)

接下來是DATA,因為我們知道它,並最終希望通過發送狀態通知來通知您成功。

DSN是否有效?

當然,只有從發件人到收件人的郵件運輸代理支持DSN,所有這些美麗和智慧才會起作用。 有一天他們會。