Golang:从maildir解析多部分电子邮件

时间:2016-02-16 02:58:34

标签: go

我需要解析从unix maildir读取的多部分电子邮件文件。 你能建议一个合适的图书馆吗?

电子邮件通过IMAP吸入并转储到maildir。 我需要解析这些电子邮件文件并提取所有部分,包括header,base64附件,html部分和明文部分。

由于

修改

我知道我可以搜索带有关键字和内容的库,但如果可能的话,我也希望对质量和经验有所了解。

我可以处理实际的maildir并拾取邮件文件。我关心的是解析多部分电子邮件(以字符串形式提供)并提取单个部分。

3 个答案:

答案 0 :(得分:2)

我用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))

答案 1 :(得分:1)

答案 2 :(得分:0)

以下是我的示例:缺少的部分是提取附件。如果你想出那部分内容,请告诉我......现在我一直在试着提取附件......

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)
}