【问题标题】:How to fetch body from imap server in Go如何从 Go 中的 imap 服务器获取正文
【发布时间】:2015-03-03 16:57:28
【问题描述】:

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

【问题讨论】:

    标签: go imap fetch


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

    【讨论】:

      【解决方案2】:

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

      如果您想要整个 mime 格式的消息(标题和正文),那么请求 BODY 应该可以。您可以分别通过请求BODY[HEADER]BODY[TEXT] 来分别获取标头和消息正文。修改示例程序以使用这些数据项之一应该会得到您想要的数据。

      【讨论】:

      • 谢谢詹姆斯。现在我正在阅读 RFC 3501 以获得更多关于 IMAP 协议的知识。我仍在努力让 Go API 工作以获取正文。你能告诉我一些获取邮件正文的工作代码示例吗?谢谢。
      猜你喜欢
      • 2017-01-24
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2015-09-21
      • 2013-05-25
      • 1970-01-01
      • 2018-07-16
      • 2014-12-09
      相关资源
      最近更新 更多