2013-03-05 21 views
10

傳送電子郵件時,我發現有關點填充的衝突信息。SMTP點填充..何時何地做它?

  1. 東西如果線路包含一個單一的點(以避免過早地終止)
  2. 東西的點到每一行統計以點
  3. 東西的點到開始點(1)和對每一行部分引用可打印的消息部分只有

任何人都可以澄清?

回答

17

按照SMTP標準RFC 5321,第4.5.2節:

http://tools.ietf.org/html/rfc5321#section-4.5.2

爲了允許所有用戶構成的文本要被透明傳輸中,使用以下程序:

  • 在發送一行郵件文本之前,SMTP客戶端會檢查該行的第一個字符。如果是一個時間段,則在該行的開頭插入一個附加時間段。
  • 當SMTP服務器收到一行郵件文本時,它會檢查該行。如果該行由單個時段組成,則將其視爲郵件結束指示符。如果第一個字符是一個句點,並且該行上還有其他字符,則會刪除第一個字符。

所以,從你的問題的三點來看,第二點是正確的。

+0

如果一臺服務器只刪除一行中的兩個點中的一個,則它正在執行標準指定的內容。當原始消息的一行的第一個字符是句點時,客戶端在發送消息之前添加另一個字符。然後,服務器刪除添加的時間段。 – chus 2013-04-20 22:00:34

+1

我的意思是它只能刪除兩個中的一個,如果整個行只包含兩個點。例如:\ r \ n .. \ r \ n但不適用於其他任何行。 – transilvlad 2013-04-20 22:53:16

+0

我想現在我可以看到這一點。解決方案取決於您正在實施的代理(MTA,MDA)。也許你可以識別不符合RFC的服務器並處理該消息以保留原始文本。 – chus 2013-04-20 23:38:03

0

在SMTP協議的郵件是由一個單一的點和一個換行字符(多個)

簡單來說終止類似:

\ r \ n \ r \ n

字符:

CR LF DOT CR LF

它對應於一行開頭處的單個點。

如果郵件數據包含單個郵件。在行的開頭,後面跟着一個新的行字符,然後SMTP協議將它視爲郵件終止,因此只有一部分郵件將被傳送。

所以整個想法是通過填充一個額外的點來避免這種情況。

+3

這並不回答我的問題。 – transilvlad 2013-03-07 20:40:37

2

實際的答案:如果您使用引用的可打印格式,則始終將點轉換爲= 2E。您不能依賴所有正確執行點刪除的smtp服務器。

如果你想假設整個世界是符合標準的,那麼就去回答2。

+0

時間越流逝,我看到的不符合規則的錯誤越多,我越記得您的答案。謝謝。 – transilvlad 2017-04-06 12:09:20