為什麼 DMARC 對發件人地址而不是信封發件人(返迴路徑)進行操作?
從我的網路伺服器發送到 Gmail 地址的幾封電子郵件(
From:
地址為websitevisitor@gmail.com
)已被 Gmail 標記為垃圾郵件。該From:
欄位由表單數據填充,並對應於訪問者的實際電子郵件地址,通常是 Gmail 地址。Return-Path:
總是指向一個地址,這account@mywebserver.com
意味著 SPF 和 DKIM 檢查將起作用。當我檢查 Gmail 帳戶中的原始電子郵件時,我看到以下內容:
Delivered-To: webformrecipient@gmail.com ... Return-Path: <account@mywebserver.com> Received: from mywebserver.com (mywebserver.com. [my:ipv6:address]) by mx.google.com with ESMTPS id xxx for <webformrecipient@gmail.com> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Feb 2016 00:40:02 -0800 (PST) Received-SPF: pass (google.com: domain of account@mywebserver.com designates my:ipv6:address as permitted sender) client-ip=xxx; Authentication-Results: mx.google.com; spf=pass (google.com: domain of account@mywebserver.com designates my:ipv6:address as permitted sender) smtp.mailfrom=account@mywebserver.com; dkim=pass header.i=@mywebserver.com; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mywebserver.com; s=mydkim; h=Date:Message-Id:Sender:From:Subject:To; bh=w2snQznwxlVRVACmfQELC7VGmD1dcYdiCXbCIRYFKRs=; b=a0Vy3Ky43J5FdiWSuQ4qvTTH47G+Js0W/qtRU5gMlxfesNqrlyaIyExaIZlWvHNL4o0LNOF1GI94w4C41mmH+2JIkMEQZazw0MainP7UyUgsm/RZbAWoRuecPv+k108FlsWMP/l1UttXAdlvBVJmV2UGsYYlSSjKErQEF8tv3K0=; Received: from apache by mywebserver.com with local (Exim 4.80) (envelope-from <account@mywebserver.com>) id 1aQWVF-00009b-2X for webformrecipient@mywebserver.com; Tue, 02 Feb 2016 09:40:01 +0100 To: webformrecipient@mywebserver.com From: Website User <website-user@gmail.com> Sender: webformrecipient@mywebserver.com ...
請注意,SPF 和 DKIM 檢查都通過了,但 DMARC 檢查沒有通過。
From:
經過一番搜尋後,我根據這個關於 stack overflow 的答案,使用該地址將其追踪到 DMARC以獲取其參考域。三個問題:
- 是否可能確實
dmarc=fail
是Gmail將電子郵件分配給垃圾郵件的原因?- 為什麼 DMARC 對
From:
地址進行操作,而不是Return-Path
像 SPF 和 DKIM 那樣對(信封發件人)進行操作?- 如果現在
From:
標題也必須對應一個地址,@mydomain.com
那麼我們應該如何指定消息的實際(邏輯、血肉)發送者?
將 SPF 和 DKIM 視為驗證郵件路徑的方法,並將 DMARC 視為也驗證郵件發件人的擴展。將其視為遞送聯邦快遞的信件。很容易驗證信封是從哪裡發貨的,並且快遞員是合法的,但它沒有提供一種方法來證明信封內的信件確實來自上面印有姓名的人。
您的網路伺服器是 mywebserver.com 的有效 SMTP 伺服器,並且您的發件人地址是合法的,但這不足以讓其他伺服器相信您有權作為 website-user@gmail.com 發送。GMail 如何知道您的伺服器沒有被黑客入侵或以其他方式被用於惡意目的?Gmail 的伺服器不會盲目地信任您作為他們的使用者之一發送郵件——除非您是由他們託管的,否則您可能無法向 Yahoo 發送郵件。
為了解決您問題的第一部分,是的,這很可能就是 GMail 將其歸類為垃圾郵件的原因。最古老的垃圾郵件形式圍繞著欺騙“發件人”地址。這是大多數使用者在收到消息時看到的內容,也是他們想要信任的主要欄位。當來自合法郵件伺服器的郵件使用不屬於該郵件伺服器的發件人地址發送時,它仍然是一個危險信號。
正如您所提到的,DMARC 作為規範的一部分對發件人地址進行操作。誠然,編寫代表某人發送的網路應用程序變得更加困難,但這就是重點。至於他們為什麼這樣做——嗯,這取決於規範的設計者,但這是一個權衡。如果您保持在該限制範圍內,他們正在走高路並製作一個執行良好的系統。也許未來的機制會找到解決這個問題的方法。
不幸的解決方案是僅使用您可以控制的地址。要解決您的第三個問題,請使用您的域名簽署您的郵件,並在正文中提及它是代表 website-user@gmail.com 發送的。否則,您將不得不要求您的收件人將該地址添加到他們的白名單中。對於合法的 Web 應用程序開發人員來說,這並不好玩,但它會保護收件人收件箱的神聖性。使用帶有 Web 使用者電子郵件地址的回复標頭可能會很幸運。
在這個 DMARC 執行緒上有一個關於這個限制的討論。
同時,您可以嘗試確保您的伺服器沒有被列入任何 RBL 的黑名單。如果你有足夠好的聲譽,你可能會失敗 DMARC,但仍然可以通過一些垃圾郵件過濾器……但我不會依賴它。