如何从 Go 中的 imap 服务器获取 body
How to fetch body from imap server in Go
我使用 url 中的示例代码成功获取了电子邮件列表 headers:https://godoc.org/code.google.com/p/go-imap/go1/imap#example-Client。但是,我仍然无法获取电子邮件的 body。谁能展示一些可以从 Golang 中的 imap 服务器获取电子邮件的 body 的工作示例代码?
您链接到的示例代码演示了如何使用 IMAP FETCH
命令获取消息的 RFC822.HEADER
消息数据项。 RFC contains a list of standard data items you can fetch from a message.
如果您想要整个 mime 格式的消息(headers 和 body),那么请求 BODY
应该可以。您可以分别请求 BODY[HEADER]
和 BODY[TEXT]
来分别获取 headers 和消息 body。修改示例程序以使用这些数据项之一应该会得到您想要的数据。
我现在知道如何获取正文了。
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
}
我使用 url 中的示例代码成功获取了电子邮件列表 headers:https://godoc.org/code.google.com/p/go-imap/go1/imap#example-Client。但是,我仍然无法获取电子邮件的 body。谁能展示一些可以从 Golang 中的 imap 服务器获取电子邮件的 body 的工作示例代码?
您链接到的示例代码演示了如何使用 IMAP FETCH
命令获取消息的 RFC822.HEADER
消息数据项。 RFC contains a list of standard data items you can fetch from a message.
如果您想要整个 mime 格式的消息(headers 和 body),那么请求 BODY
应该可以。您可以分别请求 BODY[HEADER]
和 BODY[TEXT]
来分别获取 headers 和消息 body。修改示例程序以使用这些数据项之一应该会得到您想要的数据。
我现在知道如何获取正文了。
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
}