2016-03-29 9 views
0

Goの電子メールメッセージからいくつかのヘッダーを読み取る方法はありますか?Goの電子メールメッセージヘッダーの解析

通常、私はReadMIMEHeader()を使用することになり、残念ながら誰もが関連するすべてのRFCを読んでいると、いくつかのメッセージのために、私は、出力のように取得していない:

不正なMIMEヘッダー行:名=「7DDA4_foo_9E5D72.zip」

私は

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

の代わり

する犯人を狭め3210
Content-Type: application/x-zip-compressed; x-unix-mode=0600; 
    name="7DDA4_foo_9E5D72.zip" 

メッセージの送信元。インデントするかどう

Go Playground example

正しくヘッダを解析する正しい方法に関係なく、何ですか?

答えて

1

(免責事項、私はSendGridで動作しますが、libに一緒に何かを入れていない)https://github.com/sendgrid/go-gmimeをチェックアウト、私は再フォーマットコードの別の部分を通してそれを修正しますメッセージ:

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

、あなたは別のヒューリスティックをしたいことがあります。私はインデントされていない ":"を含まない行はインデントしなければならないと仮定しました。

+0

これは問題を100%修正しませんが(メッセージ本体からすべての行をインデントします)、このメッセージを受け入れるのは、解析前にメッセージを正式に再フォーマットするのが最も理にかなっているからです。渋滞に感謝します。 – astropanic

+0

元のメッセージから、本文を含む完全なMIMEメッセージを処理するコードが必要であることが100%明確ではありませんでした。しかし、それを修正するのは簡単です:空の行が見えるときにインデントを止めてください。参照してください:http://play.golang.org/p/Z_9wWW24_x –

+0

私はこの単純な例で達成したいことを明確にしたかっただけです。あなたの2番目の提案は、マルチパートのMIMEメッセージでは機能しませんが、私はその考えを持っています。 – astropanic

0

メッセージが不正であることを考えると

+0

thxですが、私は追加のC依存関係を避けたいと思います。 – astropanic

関連する問題