如何从Go中的imap服务器获取body

时间:2015-01-06 03:29:06

标签: go imap fetch

我使用此网址中的示例代码成功获取了电子邮件标头列表:https://godoc.org/code.google.com/p/go-imap/go1/imap#example-Client。但是,我仍然无法获取电子邮件的正文。任何人都可以展示一些可以从Golang的imap服务器获取电子邮件正文的工作示例代码吗?

2 个答案:

答案 0 :(得分:3)

我想出了如何获取正文。

cmd, _ = c.UIDFetch(set, "RFC822.HEADER", "RFC822.TEXT")

// Process responses while the command is running
fmt.Println("\nMost recent messages:")
for cmd.InProgress() {
    // Wait for the next response (no timeout)
    c.Recv(-1)

    // Process command data
    for _, rsp = range cmd.Data {
        header := imap.AsBytes(rsp.MessageInfo().Attrs["RFC822.HEADER"])
        uid := imap.AsNumber((rsp.MessageInfo().Attrs["UID"]))
        body := imap.AsBytes(rsp.MessageInfo().Attrs["RFC822.TEXT"])
        if msg, _ := mail.ReadMessage(bytes.NewReader(header)); msg != nil {
            fmt.Println("|--", msg.Header.Get("Subject"))
            fmt.Println("UID: ", uid)

            fmt.Println(string(body))
        }
    }
    cmd.Data = nil
    c.Data = nil
}

答案 1 :(得分:1)

您链接的示例代码演示了如何使用IMAP FETCH命令获取消息的RFC822.HEADER消息数据项。 RFC contains a list of standard data items you can fetch from a message

如果你想要整个mime格式的消息(标题和正文),那么请求BODY。您可以分别通过请求BODY[HEADER]BODY[TEXT]来单独获取标头和邮件正文。修改示例程序以使用其中一个数据项应该可以获得您所追踪的数据。