【发布时间】:2014-07-20 22:28:40
【问题描述】:
如何在 go ( 使用 imap ) 中获取电子邮件正文?到目前为止,我可以找到headers,但没有迹象表明在哪里可以找到尸体。
【问题讨论】:
标签: go
如何在 go ( 使用 imap ) 中获取电子邮件正文?到目前为止,我可以找到headers,但没有迹象表明在哪里可以找到尸体。
【问题讨论】:
标签: go
我想出了如何获取正文。代码如下:
c.Select("INBOX", true)
//fmt.Print("\nMailbox status:\n", c.Mailbox)
// Fetch the headers of the 10 most recent messages
set, _ := imap.NewSeqSet("4:*")
//if c.Mailbox.Messages >= 10 {
// set.AddRange(c.Mailbox.Messages-9, c.Mailbox.Messages)
//} else {
// set.Add("1:*")
//}
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
}
【讨论】:
code.google.com/p/go-imap/go1/imap。
为BODY[] 或BODY.PEEK[] 属性发送一个FETCH 命令。
有关详细信息,请参阅IMAP spec。
【讨论】:
seq参数。
BODY[] 或BODY.PEAK[] 属性?谢谢。
我也遇到过类似的问题。 我发现这个示例命令使用“Fetch”和“Uid”。
$ UID FETCH uid (body[text])
还有我的 C# 代码示例
string fileBody = ReceiveResponse($"$ UID FETCH {uidList[i]} (body[text])\r\n");
【讨论】: