【问题标题】:How to fetch the email body in go ( with imap )?如何在 go ( 使用 imap ) 中获取电子邮件正文?
【发布时间】:2014-07-20 22:28:40
【问题描述】:

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

【问题讨论】:

    标签: go


    【解决方案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
    }
    

    【讨论】:

    • 这是什么包?
    • 抱歉回复晚了。我刚刚检查了我的源代码。是code.google.com/p/go-imap/go1/imap
    【解决方案2】:

    BODY[]BODY.PEEK[] 属性发送一个FETCH 命令。

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

    【讨论】:

    • 我正在使用 UIDFetch[1] 。不应该这样做吗? [1]godoc.org/code.google.com/p/go-imap/go1/imap#Client.UIDFetch
    • @hey:是的,但你需要告诉它获取属性。
    • 我如何告诉它要获取什么 UID ?我的计划是遍历所有电子邮件 c.UIDFetch(set, "RFC822.HEADER") ,然后使用 c.UIDFetch(set, "BODY[]") 获取每条消息。但是我不知道如何设置我想要获取的 UID。
    • @hey:使用seq参数。
    • 您能否展示一些示例代码来获取BODY[]BODY.PEAK[] 属性?谢谢。
    【解决方案3】:

    我也遇到过类似的问题。 我发现这个示例命令使用“Fetch”和“Uid”。

    $ UID FETCH uid (body[text])
    

    还有我的 C# 代码示例

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

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2018-05-26
      • 2016-06-22
      • 1970-01-01
      • 2012-11-16
      相关资源
      最近更新 更多