在Go中解析电子邮件标题

时间:2016-03-29 21:23:08

标签: email parsing go syntax

如何从Go中的电子邮件中读取一些标题?

通常我会使用ReadMIMEHeader(),但遗憾的是并非所有人都阅读了所有相关的RFC,而对于某些消息,我得到的输出如下:

  

格式错误的MIME标题行:name =" 7DDA4_foo_9E5D72.zip"

我把罪魁祸首缩小为

Content-Type: application/x-zip-compressed; x-unix-mode=0600;
name="7DDA4_foo_9E5D72.zip"

而不是

Content-Type: application/x-zip-compressed; x-unix-mode=0600; 
  name="7DDA4_foo_9E5D72.zip"

在消息来源中。

Go Playground example

正确解析标题的正确方法是什么,无论是否缩进?

2 个答案:

答案 0 :(得分:1)

鉴于消息格式不正确,我会通过重新格式化消息的单独代码修复它:

func fixBrokenMime(r_ io.Reader, w io.WriteCloser) {
    r := bufio.NewScanner(bufio.NewReader(r_))
    for r.Scan() {
        line := r.Text()
        if len(line) > 0 && line[0] != ' ' && strings.IndexByte(line, ':') < 0 {
            line = " " + line
        }
        w.Write([]byte(line+"\n"))
    }
    w.Close()
}

游乐场:http://play.golang.org/p/OZsXT7pmtN

显然,您可能需要不同的启发式方法。我假设一条没有缩进但不包含“:”的行必须缩进。

答案 1 :(得分:0)

查看https://github.com/sendgrid/go-gmime(免责声明,我使用SendGrid,但未在lib中放置任何内容)