4

問題:

yahoo と hotmail で使用される SMTP ベースのヘッダー/電子メールをコピーして Telnet 経由で送信しようとしましたが、受信した電子メールには含まれている添付ファイルが表示されませんが、メッセージは正しく表示されます。

私がそれを引き起こしていると思われるもの:

電子メールの形式が間違っていると思います。オンラインで多数の記事を検索しても (複雑で読みにくい RFC を把握しようとしても)、3 つすべての使用方法を説明する役立つ記事や簡潔な記事は見つかりませんでした (Plain 、HTML および添付ファイル) を SMTP で正しく送信します。コードを変更しようと数日を費やしましたがメッセージのみ (添付ファイルなし) または SMTP データ本体全体 (境界、html コードなどを含む) が表示されます。

この質問を通じて私が達成したいこと:

誰かが私が以下に集めた情報を調べて、何が欠けているか (または電子メールの形式が正確に間違っているか) を教えてくれることを願っています。

デバッグ情報:

SMTPサーバーに送信した情報の複製をファイルに送り、その情報をpastebinに貼り付けました(個人情報は削除/編集されています-Base64でエンコードされた添付ファイルは、IMAPから取得した別の電子メールの単なるテキストファイルです):

逐語的に (制御文字を除いて) SMTP サーバーに送信される情報:

http://pastebin.com/QYwzWT0S

メール クライアントに表示される内容 (添付ファイルがないことに注意してください):

http://i45.tinypic.com/29b1zci.jpg

メールをダウンロードしたときに IMAP に表示される内容 (形式が正しくないことに注意してください):

http://pastebin.com/zv3PBr8N

正しくフォーマットされた電子メールは、IMAP では次のように表示されます。

http://pastebin.com/3yBySbxU

SMTP が送信内容を誤解していると思われます。これが、IMAP が電子メールを取得しようとしたときに multipart/alternative が見つからない理由です。私は正確に何を間違っていますか?サーバーは何を期待していますか?

[賛成票をありがとう - リンクを再度有効にできます!]

4

2 に答える 2

8

マルチパート境界指定子をクリーンアップして、これを取得しました。これは、サーバーで機能します (ここでは SMTP コマンドを省略しました)。

From: "Edited Out" <editedout@yahoo.com> 
To: "Edited Out" <editedout@yahoo.com> 
Subject: Testing 4
MIME-Version: 1.0
Content-Type: multipart/alternative;
  boundary="boundary-type-1234567892-alt"

--boundary-type-1234567892-alt
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


Testing the text to see if it works!

--boundary-type-1234567892-alt
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


<html>Does this actually work?</html>

--boundary-type-1234567892-alt
Content-Transfer-Encoding: base64
Content-Type: text/plain;name="Here2.txt"
Content-Disposition: attachment;filename="Here2.txt"

KiAxMyBGRVRDSCAoQk9EWVtURVhUXSB7NjU5fQ0KLS1fZjZiM2I1ZWUtMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXw0    KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZG    luZzogcXVvdGVkLXByaW50YWJsZQ0KDQoNCkp1c3Qgc2VlaW5nIHdoYXQgdGhpcyBhY3R1
YWxseSBjb250YWlucyEgCQkgCSAgIAkJICA9DQoNCi0tX2Y2YjNiNWVlLTIwN2EtNGQ3Yi04NDU4LTQ2OWJlZTQ5MThkYV8    NCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZG    luZzogcXVvdGVkLXByaW50YWJsZQ0KDQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPjwhLS0N
Ci5obW1lc3NhZ2UgUA0Kew0KbWFyZ2luOjBweD0zQg0KcGFkZGluZzowcHgNCn0NCmJvZHkuaG1tZXNzYWdlDQp7DQpmb25    0LXNpemU6IDEwcHQ9M0INCmZvbnQtZmFtaWx5OlRhaG9tYQ0KfQ0KLS0+PC9zdHlsZT48L2hlYWQ+DQo8Ym9keSBjbGFzcz    0zRCdobW1lc3NhZ2UnPjxkaXYgZGlyPTNEJ2x0cic+DQpKdXN0IHNlZWluZyB3aGF0IHRo
aXMgYWN0dWFsbHkgY29udGFpbnMhIAkJIAkgICAJCSAgPC9kaXY+PC9ib2R5Pg0KPC9odG1sPj0NCg0KLS1fZjZiM2I1ZWU    tMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXy0tDQopDQpmbHlubmNvbXB1dGVyIE9LIEZFVENIIGNvbXBsZXRlZA


--boundary-type-1234567890-alt--

マルチパート メールの境界指定子は、メールの本文や添付ファイルに表示される可能性が低い任意のテキストです。前に 2 つのダッシュが付いている場合は、新しい部分 (最初の部分を含む) の始まりを示します。最初と最後に 2 つのダッシュが付いている場合は、メールの終わりを示します。

元のメールには、この「終了境界」マーカーがメールの中央 ( の直後<html>Does this actually work?</html>) にあり、2 つの異なる境界マーカー (--boundary-type-1234567890--boundary-type-1234567892-alt) がありました。それが、添付ファイルが取り残された理由を説明しています。

于 2012-06-05T02:57:37.163 に答える
3

問題は信じられないほど微妙であることがわかりました。

従来、Hotmail (これは私が元にした元の電子メールでした) では、電子メールの複数の部分に対して「マルチパート/代替」という用語を使用しています。メールで「multipart/alternative」を使用しました。

yahoo は「multipart/alternative」が好きではなく、代わりに「multipart/mixed」という用語が使用されている場合にのみ、プレーン テキスト、html、および添付ファイルを正しく表示することがわかります (yahoo 準拠の電子メールでは代替の代わりにこの用語が使用されていることに気付きました)。 、ejdyksenの提案と組み合わせて(ただし、yahooのサーバーではどちらの提案も単独では機能しません)。

技術的に言えば、これは「正しい」答えですが、ejdyksen の回答を選択したままにします。なぜなら、彼の努力により、それがサーバー側の専門性であることが示されたからです (彼の SMTP サーバーと hotmail の両方に添付ファイルが表示されましたが、yahoo の回答は表示されませんでした)。彼がほとんどのレッグワークを行ったので、代わりにejdyksenの答えに丁寧に賛成票を投じてください。

于 2012-06-05T14:41:49.610 に答える