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

使用 net/mail 解析電子郵件

WBOY
WBOY轉載
2024-02-06 09:40:07923瀏覽

使用 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刪除