亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重疊的多部分“無媒體類型”

重疊的多部分“無媒體類型”

Go
繁花不似錦 2022-07-11 10:47:05
我正在嘗試提取郵件的正文。我制作了一個函數,當 Content-Type 具有“多部分”時使用。像這樣: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=="但是如果我提取部分重疊的多部分并重新插入它,則會發生錯誤。('無媒體類型'或'格式錯誤的 MIME 標頭:缺少冒號:%!q')我不知道問題出在哪里。
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

您正在創建一條新消息:

newContent := "\nMime-Version: 1.0\n" + "Message-ID: " + ...

因此,示例消息可能是:

Mime-Version: 1.0Message-ID: RANDOMSTRING

這以一個空行開始,這就是將標頭與消息分開的原因,因此當解析消息時,標頭將是空白的(您可以通過fmt.Printf("Header: %v\n", msg.Header)在調用后添加來看到這一點mail.ReadMessage)。

刪除它\n會導致另一個錯誤(如果您檢查錯誤會發生這種情況 - 請記住在每次通話后檢查)malformed MIME header: missing colon: "--=-OM18H8UnjkvG1nNW6D77AQ=="。這是因為您沒有在標題末尾添加空行。所以你需要\n在最后添加另一個。

... + encoding + ";\n\n" + string(slurp)

完成此操作后,代碼運行請參見 playground。請注意,我所做的更改只是為了讓它運行;我沒有進行任何進一步的檢查。我已經留下了一些調試代碼Printf


查看完整回答
反對 回復 2022-07-11
  • 1 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號