如何编写mbox格式的文件?

时间:2016-03-18 08:15:12

标签: go

我已使用Gmail API获取了邮件内容和必要的标题。我想把它们写入mbox文件。我可以找到Go包和样本来读取和解析mbox文件。但是如何使用Go创建和编写mbox文件?

1 个答案:

答案 0 :(得分:5)

mbox file format (Wikipedia)实际上非常简单。

每封邮件都有第一行开始" From"。电子邮件正文中的任何第一行恰好以" From"开头。有两个" "或">"前缀。在每个邮件正文之后,插入了一个额外的空白行。通常,邮件标题已经有一个" From ..."第一行,所以你需要做的是"遍历每封电子邮件,打印它,扫描身体以确保所有行开始" From"有一个逃脱,然后用空行完成每封邮件"。

类似以下内容(需要适应您代表电子邮件的方式):

package main

import (
    "fmt"
    "io"
    "os"
    "strings"
)

type Mail struct {
    Headers []string
    Body    []string
}

func (m *Mail) Save(w io.Writer) {
    for _, h := range m.Headers {
        fmt.Fprintln(w, h)
    }
    fmt.Println("")
    for _, b := range m.Body {
        if strings.HasPrefix(b, "From ") {
            fmt.Fprintln(w, ">", b)
        } else {
            fmt.Fprintln(w, b)
        }
    }
}

func WriteMbox(w io.Writer, mails []Mail) {
    for _, m := range mails {
        m.Save(w)
        fmt.Fprintln(w, "")
    }
}

func main() {
    m := Mail{Headers: []string{"From test", "Subject: Test"}, 
              Body: []string{"Mail body, totes, like"}}
    WriteMbox(os.Stdout, []Mail{m, m, m})
}