重叠的多部分“无媒体类型”

问题描述

我正在尝试提取邮件正文。

我创建了一个当Content-Type具有'multipart'时使用的函数。

像这样:

func multipartFunc(w http.ResponseWriter,content string) string {

 msg,err := mail.ReadMessage(bytes.NewBufferString(content))
 var uDec []byte 
 mediaType,params,err := mime.ParseMediaType(msg.Header.Get("Content-Type"))

if err != nil {
    log.Fatal("2 error: ",err)
}

if strings.HasPrefix(mediaType,"multipart/") {
    mr := multipart.NewReader(msg.Body,params["boundary"])
    for {
        p,err := mr.NextPart()
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatal(err)
        }

        slurp,err := ioutil.ReadAll(p)
        if err != nil {
            log.Fatal(err)
        }
        encoding := p.Header.Get("Content-Transfer-Encoding\n")
        if encoding == "" {
            encoding = "7bit"
        }
        if strings.Contains(p.Header.Get("Content-Type"),"multipart") {
            newContent := "\nMime-Version: 1.0\n" + "Message-ID: " + randomString(12) + "\nContent-Type: " + p.Header.Get("Content-Type") + "\nContent-Transfer-Encoding: " + encoding + ";\n" + string(slurp)
            **ss := multipartFunc(w,newContent)**
            return ss
        }

        if p.Header.Get("Content-Transfer-Encoding") == "base64" {
            uDec,_ = base64.StdEncoding.DecodeString(string(slurp))
        } else if p.Header.Get("Content-Transfer-Encoding") == "quoted-printable" {
            uDec,_ = ioutil.ReadAll(quotedprintable.NewReader(strings.NewReader(string(slurp))))
        } else {
            uDec = []byte(string(slurp))
        }
    }
} 
return string(uDec)

示例邮件:

 From: <[email protected]>
 Date: Wed,07 Oct 2020 09:25:49 +0900
 Message-Id: <RWAA4Q95VBU4.esdqwe@ds4>
 To: [email protected]
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="=-pm6oKFbVvZj4hXY1hoVA4g=="

 --=-pm6oKFbVvZj4hXY1hoVA4g==
 Content-Type: multipart/alternative; boundary="=-OM18H8UnjkvG1nNW6D77AQ=="

 --=-OM18H8UnjkvG1nNW6D77AQ==
 Content-Type: text/plain; charset=utf-8
 Content-Transfer-Encoding: base64

 DQoNCg0KCQ0KICAgICAgICAgICAgICAgIA


 --=-OM18H8UnjkvG1nNW6D77AQ==
 Content-Type: text/html; charset=utf-8
 Content-Transfer-Encoding: base64

 PGh0bWwgbGFuZz0ia28iPg0KPG1ldGEgYLTgiPg0KDQoJPGRpdiBpZD0i


 --=-OM18H8UnjkvG1nNW6D77AQ==--

 --=-pm6oKFbVvZj4hXY1hoVA4g==--

但是,如果我提取重叠的部分并将其重新插入, 发生错误。 (“无媒体类型”或“格式错误的MIME标头:缺少冒号:%!q”)

我不知道问题出在哪里。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)