zoukankan      html  css  js  c++  java
  • 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("标题")) + "?="
  • 相关阅读:
    python中神之bug
    常用好的软件
    远程登录
    centos7改静态ip
    SpringMVC归纳
    mysql数据库操作手册
    MyBatis归纳
    Maven归纳
    maven操作手册
    java知识库
  • 原文地址:https://www.cnblogs.com/s42-/p/13053885.html
Copyright © 2011-2022 走看看