說明
新註冊使用者Message-ID不符合規則將被退信,現有使用者不受影響。
一、什麼是Message-ID
Message-ID是一個唯一的標識,用於在郵件系統中區分不同的郵件。
二、Message-ID的文法規則
我們給出一個規範Message-ID的子集:
Message-ID首尾分別是<和>
@符號的左邊和右邊的字串是由零個或多個 . 分割的非空子字串組成
非Null 字元串裡只能存在可列印的ASCII字元
RFC-5322規範樣本:
<d52ce63e-a0d5-4f95-b6a9-e1256a44f5fb@example.net>
<5ef31701.1c631ghz1.13943.bu15@example.net>
校正的該規則的Regex為:
<[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*>如需要在Message-ID中加入注釋之類的需求,可自行參考RFC 5322,如:
(THIS IS A COMMENT 1)<test@example.net>(THIS is A COMMENT 2))
三、Message-ID的影響
1、一些郵件服務商比如Gmail要求收到的郵件Message-ID符合RFC 5322規範,否則可能會被退信或進入垃圾箱,因此建議發信時,最佳化Message-ID。
2、郵件通過SMTP程式,入信到阿里的郵件伺服器,若Message-ID不符合上述規則,將入信失敗,錯誤如下:
#Message-ID不合法:
564 The format of the message-id is incorrect.Please refer to RFC 5322 section 3.6.4
#注釋嵌套太多:如:(outer(inner)(another comment))
565 The nested comment depth exceeds the server's supportPython樣本:
# -*- coding: utf-8 -*-
import re
def find_message_ids(text_list):
# 定義一個用於匹配Message-ID的Regex模式
pattern = '''<[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*>'''
# 遍曆列表中的每個文本
for text in text_list:
# 使用findall方法在文本中尋找所有匹配的電子郵件地址
emails = re.findall(pattern, text)
# 列印符合規則的Message-ID
for email in emails:
print(f"符合規則: {email}")
# 測試文本列表,包含多個字串
test_text = [
"<d52ce63e-a0d5-4f95-b6a9-e1256a44f5fb@example.net>",
"這是一個測試文本,Message-ID。",
"<5ef31701.1c631ghz1.13943.bu15@example.net>"
]
# 調用函數
find_message_ids(test_text)