
本文 (https://www.sparkpost.com/resources/email-explained/return-path-explained/) 對「Return-Path」的解釋如下:
當電子郵件未到達其預期目的地時,返迴路徑會指示未送達回執(或退回郵件)的傳送位置。
和
許多寄件者會將識別碼符合並到返迴路徑位址中,以簡化回覆和退回流量的處理,稱為可變信封返迴路徑 (VERP)。
我將其理解為:「作為電子郵件發送者,您指定返迴路徑標頭」。
然而,給出以下答案(https://stackoverflow.com/a/28494070/9878135),似乎接收伺服器總是覆蓋 Return-Path:
在出站電子郵件上設定 Return-Path: 標頭是沒有意義的,因為它將被收件者的 MTA 取代。如果您想控制在那裡寫入的內容,請設定信封寄件者(傳統上,sendmail -f[電子郵件受保護])
我目前正在嘗試建立一個使用 VERP 處理電子郵件的電子郵件伺服器。咱們說“[電子郵件受保護]「想要向外部發送電子郵件。「寄件者」應該是「[電子郵件受保護]」 而「Return-Path」應該是完全不同的東西(例如「[電子郵件受保護]”)。當外部電子郵件服務無法發送電子郵件時,應將電子郵件發送回“[電子郵件受保護]「。我的伺服器現在可以在資料庫中找到此退回郵件並通知[電子郵件受保護]關於發貨失敗。
我使用 Postfix 發送和接收郵件(並使用 Python 來建立郵件)。然而,其他電子郵件服務(例如 Google Mail 或 ProtonMail)似乎從未收到 Return-Path。 Google Mail 根本不顯示標題,而 ProtonMail 會用「寄件者」地址覆蓋它。
那麼誰設定了 Return-Path 標頭,為什麼其他電子郵件服務無法接收我的標頭?
答案1
Return-Path:
標頭包含「信封寄件者」地址的副本。 Return-Path:
標頭通常由 SMTP/MTA(重新)生成,直接傳送到收件者的郵箱(在最終 SMTP 躍點之後)。
MAIL FROM:
「信封寄件者」是SMTP 會話中命令中使用的位址。
因此,您的發送客戶端軟體應設定「信封寄件者」=>它將(通常)複製到Return-Path:
.
https://en.wikipedia.org/wiki/Bounce_address#Terminology
回程路徑- 當電子郵件放入收件者的電子郵件箱時,將建立一個名為「Return-Path:」的新郵件標頭,其中包含 MAIL FROM 命令上的地址。早期形式的電子郵件(例如 UUCP)需要有關電子郵件到達目的地的路徑上的每個「躍點」的信息,因此名稱中包含「路徑」部分。用於RFC 2821,RFC 3834,RFC 4409。
答案2
電子郵件Return-Path
標頭應該包含來自傳遞路徑中最新 SMTP 握手的最後一個已知退回位址。與例如標頭不同,郵件中的Received
現有標頭可能會被後續伺服器丟棄。Return-Path
請注意,退回郵件將根據 SMTPMAIL FROM
資料發送,而不是根據Return-Path
資料發送,以防這些值不一致。
事實上,人們應該將頭球Return-Path
視為一場歷史事故。它可能包含或不包含可用地址,並且它正式不用於任何用途,並且應僅被視為偵錯資訊。 SMTPMAIL FROM
資料是實際使用的退回位址,可能會也可能不會複製到該位址Return-Path
進行偵錯。該Return-Path
數據應該是更值得信賴的數據,因為它是由接收伺服器設定的,但由於它只是它的盲拷貝,所以MAIL FROM
它實際上可以包含任何內容。
長話短說: Return-Path
是由設定的調試訊息接收用於 SMTP 或 ESMTP 事務的伺服器。Return-Path
在新增標頭之前,實際電子郵件中的任何現有標頭可能會也可能不會被刪除Return-Path
。