为了账号安全,请及时绑定邮箱和手机立即绑定

解析来自maildir的多部分电子邮件

解析来自maildir的多部分电子邮件

Go
BIG阳 2021-12-13 18:37:18
我需要解析从 unix maildir 读取的多部分电子邮件文件。你能推荐一个合适的图书馆来做到这一点吗?电子邮件通过 IMAP 被吸入并转储到 maildir。我需要解析这些电子邮件文件并提取所有部分,包括标题、base64 附件、html 部分和纯文本部分。谢谢编辑我知道我可以搜索带有关键字和内容的库,但如果可能的话,我也想对质量和体验提出一些意见。我可以处理实际的邮件目录并获取邮件文件。我关心的是解析多部分电子邮件(作为字符串输入)并提取各个部分。
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

我在github.com/jhillyerd/enmime包中很幸运地做到了这一点。给定一个io.Reader r:


// Parse message body

env, _ := enmime.ReadEnvelope(r)

// Headers can be retrieved via Envelope.GetHeader(name).

fmt.Printf("From: %v\n", env.GetHeader("From"))

// Address-type headers can be parsed into a list of decoded mail.Address structs.

alist, _ := env.AddressList("To")

for _, addr := range alist {

  fmt.Printf("To: %s <%s>\n", addr.Name, addr.Address)

}

fmt.Printf("Subject: %v\n", env.GetHeader("Subject"))


// The plain text body is available as mime.Text.

fmt.Printf("Text Body: %v chars\n", len(env.Text))


// The HTML body is stored in mime.HTML.

fmt.Printf("HTML Body: %v chars\n", len(env.HTML))


// mime.Inlines is a slice of inlined attacments.

fmt.Printf("Inlines: %v\n", len(env.Inlines))


// mime.Attachments contains the non-inline attachments.

fmt.Printf("Attachments: %v\n", len(env.Attachments))


查看完整回答
反对 回复 2021-12-13
?
万千封印

TA贡献1891条经验 获得超3个赞

查看完整回答
反对 回复 2021-12-13
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这是我的示例:缺少的部分是提取附件。如果你想通了那部分,请告诉我......几个星期以来我一直在挠头提取附件......


import (

    "fmt"

    "io/ioutil"

    "net/mail"

)


func extractEmail(mail *mail.Message){

    header := mail.Header


    fmt.Println(header.Get("Date"))

    fmt.Println(header.Get("From"))

    fmt.Println(header.Get("To"))

    fmt.Println(header.Get("cc"))

    fmt.Println(header.Get("bcc"))

    fmt.Println(header.Get("Subject"))


    body, err := ioutil.ReadAll(mail.Body)

    if err != nil {

        checkErr(err, "Reading Body")

    }


    fmt.Println(body)

}


查看完整回答
反对 回复 2021-12-13
  • 3 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信