Golang:遇到问题,试图解析Outlook邮件文件(电子邮件)格式错误的MIME头:缺少冒号:

bzzcjhmw  于 2023-01-10  发布在  Go
关注(0)|答案(2)|浏览(337)

我的任务是使用Go语言解析EML和MSG格式的电子邮件文件。有一个很好的包解析EML文件,然而,与MSG,无论我研究什么包,并试图实现,我遇到同样的错误,每一次。
格式错误的MIME标头:缺少冒号:
这不是msg文件本身,我在. NET中有相同的服务,它可以完美地读取msg文件(MsgReader库)。
有人能推荐一个我可以在Go语言中读取msg文件的包吗?我想知道这是不是编码问题(这不是eml文件的问题)。
我试过使用这些软件包:

作为一个例子,这里有一个函数,我已经尝试读取一个msg文件。

func parse_msg_file() {

    var filePath string = "c://messages//kraken.msg"
    var reader io.Reader

    f, err := os.Open(filePath)
    checkerr(err, "file "+filePath+" not found or can not be readed")

    defer f.Close()

    reader = bufio.NewReader(f)

    msg, err := email.ParseMessage(reader)
    checkerr(err, "failed to parse raw msg file")
    if msg == nil {
        checkerr(err, "failed to parse raw msg file")
    }
}

调用这个函数的输出是

malformed MIME header: missing colon: "\xd0\xcf\x11\u0871\x1a\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>\x00\x03\x00\xfe\xff\t\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\t\x00\x00\x00\x02\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x03\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffR\x00o\x00o\x00t\x00 \x00E\x00n\x00t\x00r\x00y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\t-0r$\xd9\x01"
exit status 255
h6my8fg2

h6my8fg21#

为了补充我的评论,我在Google上搜索了“msg parsers in go”,它提供了这个库-https://github.com/oucema001/OutlookMessageParser-Go。我不知道它是否真的工作-它很旧,没有文档,所以不太可能很容易使用,但你可以从那里开始。

lstz6jyr

lstz6jyr2#

复合文件二进制文件格式 * 为
一种通用文件格式,在文件内提供类似文件系统的结构,用于存储任意的、特定于应用程序的数据流。
我相信这些东西都来自微软的旧OLE/COM(对象链接和嵌入/组件对象模型)。
FWIW,这里有一个复合文件二进制文件格式的解析器。不知道它是否工作,或者关于它的任何其他东西,但它可能是,至少,对你来说是一个起点。
https://github.com/richardlehane/mscfb
[编辑注解]
上面的包似乎是https://github.com/oucema001/OutlookMessageParser-Go的依赖项,在this answer by @astax中引用。

相关问题