如何在go中获取电子邮件正文(使用imap)?

时间:2014-07-20 22:28:41

标签: go

如何在go(使用imap)中获取电子邮件正文?到目前为止,我可以找到headers,但没有迹象表明在哪里寻找身体。

3 个答案:

答案 0 :(得分:1)

我想出了如何获取正文。这是代码:

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
}

答案 1 :(得分:0)

发送BODY[]BODY.PEEK[]属性的FETCH命令。<​​/ p>

有关详细信息,请参阅IMAP spec

答案 2 :(得分:0)

我遇到了类似的麻烦。 我找到了用于“ Fetch”和“ Uid”的示例命令。

$ UID FETCH uid (body[text])

和我的C#代码示例

string fileBody = ReceiveResponse($"$ UID FETCH {uidList[i]} (body[text])\r\n");