golang--解決郵件發送標題亂碼問題


**一封最簡單的郵件格式內容:**

To: 123@qq.com

CS: 1234@qq.com

From: 1234@qq.com

Subject: test

正文

郵件是和http類似的文本協議,由郵件頭和郵件內容兩部分組成,中間以空行分隔,郵件頭每行對應一個字段,和http頭類似,比如這里的To,CC,From,Subject,分別代表收件人,抄送人,發件人,標題,如果有多個收件人或抄送人,用逗號分隔,郵件內容才是我們在郵件客戶端真正看到的東西

在指定smtp的文檔中(https://tools.ietf.org/html/rfc5321)中,定義了smtp客戶端和服務器的通訊方式和報文的格式.SMTP協議中標題只支持US-Ascii編碼

如果郵件標題直接使用中文字符會導致收到的郵件亂碼,為了避免這種情況,應該對中文進行base64編碼,而這也是郵件最常用的編碼方式,解碼成base64,ascii識別無壓力后,再按UTF-8進行顯示

Golang采用UTF-8和base64編碼的格式如下:

//需引入base64庫
codeSubject := "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte("中文")) + "?="

 

**郵件內容使用html**

To: xiang@qq.com

CC: xiang@qq.com

From: =?UTF-8?B?5rWL6K+V?=\<fengyun@test.com\>

Subject: =?UTF-8?B?5rWL6K+V?=

Content-type: text/html;charset=utf-8

\<h1\>hello world\</h1\>

如果郵件內容是html代碼,則需要在郵件頭添加Content-type字段來標記文本類型,同時還需要標記郵件內容的字符編碼,以下郵件源碼發送的正是html內容

 

其中,“5rWL6K+V”就是中文“測試”進行base編碼得到的
在我們的項目中,只要對標題部分進行雙重編碼,即可解決亂碼問題

subject := "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte("標題")) + "?="

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM