登录
首页 >  Golang >  Go问答

使用net/mail库来解析电子邮件

来源:stackoverflow

时间:2024-02-10 12:36:22 263浏览 收藏

哈喽!今天心血来潮给大家带来了《使用net/mail库来解析电子邮件》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我目前正在 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

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

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库来解析电子邮件》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>