![由於使用通訊群組清單時感知到的標頭語法錯誤,來自各種基於 Linux 的系統拒絕的電子郵件](https://rvso.com/image/231069/%E7%94%B1%E6%96%BC%E4%BD%BF%E7%94%A8%E9%80%9A%E8%A8%8A%E7%BE%A4%E7%B5%84%E6%B8%85%E5%96%AE%E6%99%82%E6%84%9F%E7%9F%A5%E5%88%B0%E7%9A%84%E6%A8%99%E9%A0%AD%E8%AA%9E%E6%B3%95%E9%8C%AF%E8%AA%A4%EF%BC%8C%E4%BE%86%E8%87%AA%E5%90%84%E7%A8%AE%E5%9F%BA%E6%96%BC%20Linux%20%E7%9A%84%E7%B3%BB%E7%B5%B1%E6%8B%92%E7%B5%95%E7%9A%84%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6.png)
我錯過了什麼...
給予:基於 Linux 堆疊的電子郵件伺服器系統(託管),帶有 Webmail 元件。各種各樣的電子郵件用戶端和其他網路郵件系統涉及並對此進行了測試。
我們使用網頁郵件用戶端透過分發清單來分發電子郵件。郵件系統會傳送類似以下範例的電子郵件(從來源電子郵件標頭複製)。organisation
通訊組清單的名稱在哪裡:
Date: Sat, 20 Apr 2024 18:35:45 +0200
Message-ID: <[email protected]>
From: [email protected]
To: organisation: [email protected], [email protected];
Subject: here goes the subject
到目前為止,一切順利,電子郵件發送正常(甚至發送到 GMX 郵箱),並且沒有收到「無法發送的電子郵件」訊息。
問題
接下來,從某些電子郵件用戶端或網路郵件系統(例如 GMX 網路郵件)回覆「所有人」會導致明顯錯誤的標頭(而使用例如 Thunderbird 會產生正確的格式)。這些回復會被某些系統拒絕;訊息範例:
您的電子郵件已被我們的郵件系統拒絕,因為電子郵件標頭中提供的資訊不符合 RFC 5322 和 RFC 2047 中的規格。
有問題的電子郵件標題如下所示(請特別注意「收件者:」行):
Received: from ...
Reply-To: ...
From: <[email protected]>
To: <[email protected]>, <organisation: [email protected]>;
References: <[email protected]>
In-Reply-To: <[email protected]>
Subject: AW: here goes the subject
顯然,某些郵件用戶端將提供的通訊群組清單名稱解釋為第一個收件者的電子郵件地址的一部分。
目前的問題是:(1)誰是罪魁禍首? (2)正確的格式是什麼? (3) 分發原始訊息的伺服器是否未遵循某些 RFC,或者這是郵件用戶端或郵件系統中的故障?
=====最後修改=====
這顯然是部落的一個錯誤。票提出了。
答案1
(這可能是錯誤的,但保持原樣,因為下面有一些有用的討論)
其中,組織是通訊群組清單的名稱:
無論生成原始電子郵件的是什麼,這裡都有問題。郵箱名稱(@domain 之前的位元)可以包含空格、@ 字元和各種其他奇怪的東西。因此,轉發正確地將 To: 標頭中的第一個條目解釋為「組織:[電子郵件受保護]」。
我需要進行大量閱讀才能確定顯式空格是否需要引用或轉義(郵箱名稱中的“@”字元需要)。因此,我無法告訴您聲稱這不符合 RFC 的錯誤是否準確 - 但這一點沒有實際意義,因為即使不需要,這也不是您想要的行為。
答案2
RFC 5322是群組位址的當前規範。它們在附錄 A.1.3 中進行了解釋,其中寫道:
From: Pete <[email protected]> To: A Group:Ed Jones <[email protected]>,[email protected],John <[email protected]>; […]
在此訊息中,該
To:
欄位有一個名為“的群組收件人”一個小組”,其中包含 3 個地址 [...]
地址規範在第 3.4 節中正式定義,從這裡我將只挑選相關部分:
3.4.地址規範
地址可以是單一郵箱,也可以是一組郵箱。
group = display-name ":" [group-list] ";" [CFWS] group-list = mailbox-list / CFWS mailbox-list = (mailbox *("," mailbox)) mailbox = name-addr / addr-spec name-addr = [display-name] angle-addr angle-addr = [CFWS] "<" addr-spec ">" [CFWS]
和
3.4.1.地址規格規範
addr-spec 是特定的 Internet 標識符,包含本地解釋的字串,後面跟著 at 符號(“@”,ASCII 值 64),最後是 Internet 域。 [...] 註釋和折疊空格不應在地址規範中的“@”周圍使用。
addr-spec = local-part "@" domain local-part = dot-atom / quoted-string domain = dot-atom / domain-literal
和
3.2.3.原子
dot-atom = [CFWS] dot-atom-text [CFWS]
我在這裡省略了obs-*
RFC 5322 正式規格中存在的條目,因為它們引用了過時的模式。CFWS
表示允許註釋和/或折疊空白。
因此,這兩種格式都應被以下定義所接受group-list
:
A Group:Ed Jones <[email protected]>,[email protected],John <[email protected]>;
A Bare Group:[email protected],[email protected],[email protected];
將這種解釋應用到您自己的群組清單中,我想說您所擁有的內容是有效的:
To: organisation: [email protected], [email protected];
因此,有問題的是接收系統。 (或者是具有積極標頭重寫的中間系統。如果您透過防火牆設備發送電子郵件,或者您的客戶透過防火牆設備接收電子郵件,我會檢查這一點。)