首頁 > 後端開發 > Golang > 使用 net/mail 解析電子郵件

使用 net/mail 解析電子郵件

WBOY
發布: 2024-02-06 09:40:07
轉載
949 人瀏覽過

使用 net/mail 解析电子邮件

問題內容

我目前正在 golang 中使用 net/mail 解析電子郵件。

import (
  "net/mail"
  "io"
  "strings"
)

func main() {
  email := "some email received"

  reader := strings.newreader(emailinput)
  msg, err := mail.readmessage(inputreader)
  check(err)

  body, err := io.readall(msg.body)
  check(err)

  fmt.println(string(body))
}
登入後複製

這對於純文字電子郵件來說效果很好。但是,當我使用包含 html 的 apple mail 應用程式發送電子郵件時,返回了以下正文:

--Apple-Mail=3D_4A1E75FB-9514-439D-B922-8526851CA743
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
    charset=3Dus-ascii

fn main() {
  println!("Hello world!");
}


--Apple-Mail=3D_4A1E75FB-9514-439D-B922-8526851CA743
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
    charset=3Dus-ascii

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3Dus-ascii"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode=
: space; line-break: after-white-space;" class=3D""><pre class=3D"" style=
=3D"color: rgb(209, 209, 209); background-color: rgb(0, 0, 0);">fn <span cl=
ass=3D"" style=3D"color: rgb(230, 97, 112); font-weight: bold;">main</span>=
<span class=3D"" style=3D"color: rgb(210, 205, 134);">(</span><span class=
=3D"" style=3D"color: rgb(210, 205, 134);">)</span> <span class=3D"" style=
=3D"color: rgb(176, 96, 176);">{</span>
  println<span class=3D"" style=3D"color: rgb(210, 205, 134);">!</span><spa=
n class=3D"" style=3D"color: rgb(210, 205, 134);">(</span><span class=3D"" =
style=3D"color: rgb(2, 208, 69);">"</span><span class=3D"" style=3D"color: =
rgb(0, 196, 196);">Hello world!</span><span class=3D"" style=3D"color: rgb(=
2, 208, 69);">"</span><span class=3D"" style=3D"color: rgb(210, 205, 134);"=
>)</span><span class=3D"" style=3D"color: rgb(176, 96, 176);">;</span>
<span class=3D"" style=3D"color: rgb(176, 96, 176);">}</span>

3D"" --Apple-Mail=3D_4A1E75FB-9514-439D-B922-8526851CA743--
登入後複製

當使用 sendgrid 將此正文發送給我自己時,我收到以下電子郵件:

附件也會發生類似的情況。如何正確解析此電子郵件以便我可以將其再次發送到另一個電子郵件地址?


正確答案


如果您想在另一封郵件中重複使用郵件內容(例如重定向),僅包含正文是不夠的,還需要包含郵件標頭。

具體來說,您至少需要包含原始 Content-Type 標頭,該標頭顯示應如何解釋正文。在您的情況下,它包含一些 multipart/* 內容類型(即諸如 multipart/mixed、multipart/related、multipart/alternative 之類的東西)以及分隔郵件正文中各部分的邊界。如果這不是多部分正文,則 Content-Type 包含字元集,該字元集確定使用的文字編碼,即 utf-8、iso-8859-15,...

對於非多部分正文,您還需要包含原始Content-Transfer-Encoding 標頭,該標頭確定正文如何編碼以進行傳輸,即base64、quoted-printable、7bit,.. .

以上是使用 net/mail 解析電子郵件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板