11

転送された電子メールを解析するためのコードを書いています。私が確信していないのは、Pythonライブラリ、私が固執できるRFC、またはタスクを自動化できるその他のリソースがあるかどうかです。

正確には、転送された電子メールの「レイアウト」が何らかの標準または推奨事項でカバーされているかどうか、またはそれが何年にもわたって進化したばかりであるため、現在ほとんどの電子メールクライアントがテキスト部分に対して同様の出力を生成するかどうかはわかりません。

    Begin forwarded message: 

    > From: Me <me@me.me>
    > Date: January 30, 2010 18:26:33 PM GMT+02:00
    > To: Other Me <other-me@me.me>
    > Subject: Unwise question

-そして、添付ファイル(および他のMIMEセクションが存在する可能性があるもの)を探します。

それでも十分に正確でない場合は、明確にしますが、何を質問すればよいか(RFC、Python lib、規則など)が100%わからないだけです。

4

4 に答える 4

5

他の多くの人が言っていることとは異なり、転送される電子メールには、10年以上前のRFC 2046「多目的インターネットメール拡張機能(MIME)パート2:メディアタイプ」という標準あります特にそのセクション5.2「メッセージメディアタイプ」を参照してください。

RFC 2046の背後にある基本的な考え方は、(残念ながら)という名前のタイプの別のメッセージのMIME部分にカプセル化するmessage/rfc822ことです(MIMEが再帰的であることを忘れないでください)。PythonのMIMEライブラリはそれをうまく処理できます。

私は他の回答に反対票を投じませんでした。なぜなら、それらは1つの点で正しいからです。つまり、すべてのメーラーが標準に準拠しているわけではありません。たとえば、muttメーラーはRFC 2046形式だけでなく、アドホック形式でもメッセージを転送できます。したがって、実際には、メーラーはおそらくRFC 2046のみを処理することはできず、他のさまざまな構文や指定不足の構文も解析する必要があります。

于 2010-01-31T15:46:27.643 に答える
2

私の経験では、電子メールクライアントはこれまでとは異なる方法で転送/返信します。通常、メールパックの下部にあるmimeには、プレーンテキストバージョンとHTMLエンコードバージョンがあります。メールヘッダーにはRFC(http://www.faqs.org/rfcs/rfc2822.html "2822")がありますが、残念ながらメッセージ本文の内容は範囲外です。

メールクライアントの違いだけでなく、ユーザー設定の違いにも対処する必要があります。例:Lotus Notesは返信を一番上に置き、Thunderbirdの返信は一番下に置きます。したがって、ThunderbirdユーザーがLotus Notesユーザーの返信に返信する場合、返信を上部に挿入し、署名を下部に残す場合があります。

もう1つの落とし穴は、返信されたチェーンのワードラップと競合している可能性があります。

>> >>制限を超え、中間の返信
者のメールクライアントによって単語が折り返される外側の返信\n
>>中間の返信のメッセージ本文
>前の返信
最新の返信

私はメッセージを解析せず、ユーザーの頭の中で解析するようにユーザーに任せます。または、別のプロジェクトからコードを借ります。

于 2010-01-30T18:31:27.447 に答える
2

他の回答がすでに示しているように、標準はなく、プログラムは完璧ではありません。

ヘッダー、特にヘッダーを調べて、User-Agent使用されたクライアントの種類と、最も一般的なクライアント専用のコードを確認できます。

サポートを検討する必要のあるクライアントを見つけるには、この人気調査をご覧ください。さまざまなOutlook、Yahoo!、Hotmail、Mail.app、iPhoneメール、Gmail、LotusNotesが上位にランクされています。メールの約11%は「検出不能」に分類されますが、転送された電子メールのヘッダーを使用すると、それよりもうまくいく可能性があります。統計は電子メール内に画像を配置することによって収集されたため、結果が歪む可能性があることに注意してください。

もう1つの問題は、プレーンテキストバージョンが含まれる場合と含まれない場合があるHTMLメールです。この点でのクライアントの通常の行動についてはよくわかりません。

于 2010-01-30T18:47:42.123 に答える
1

返信/転送の標準は、最初の電子メールを誰が送信したかを含め、メールがネストされた回数を各行の前に追加することです。したがって、Pythonで行う必要があるのは、各行の先頭に>を追加することです。

imap Test <imap@gazler.com> Wrote:
>
>twice
>imap Test wrote:
>> nested
>>
>> imap@gazler.com wrote:
>>> test
>>>
>>> -- 
>>> Message sent via AHEM.
>>>   
>>
>

添付ファイルは、メッセージに添付するか、メッセージを「ワイルドにする」必要があります。

私はPythonに精通していませんが、コードは次のようになると思います。

string = string.replace("\n","\n>")
于 2010-01-30T17:32:37.633 に答える