2012-06-03 25 views
4

問題:在SMTP中使用Plain,HTML和附件爲電子郵件更正電子郵件格式?

我試圖複製使用基於標題/電子郵件,雅虎和Hotmail,並將它們發送的Telnet,但我得到的電子郵件不顯示包含附件的SMTP,但它確實顯示信息正確。

我懷疑是什麼原因造成:

我相信我對電子郵件的格式不正確,儘管在網上搜索了大量的文章(以及試圖把握複雜和難以閱讀的RFC),我還沒有找到任何有用或簡明的文章解釋如何在SMTP中正確使用全部三種(Plain,HTML和附件)。我花了幾天的時間嘗試修改代碼,但是我要麼獲得只是的消息(無附件)或整個SMTP數據正文顯示(包括邊界,html代碼等)。

我希望通過這個問題來實現:

我希望有人可以查看我下面收集到的信息,並能告訴我,我錯過了什麼(或如何完全電子郵件格式不正確)。

調試信息:

我餵我發送到SMTP服務器文件中的信息重複,我已經粘貼的信息引擎收錄(刪除任何個人信息/編輯了 - 中的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試圖以檢索電子郵件中的多部分/替代缺失。我究竟做錯了什麼?服務器期望什麼?

[感謝您的讚揚 - 我可以重新啓用鏈接!]

+0

如果用戶把http://放在他們面前,鏈接仍然可用 - 我必須禁用它們,因爲新用戶只能放置兩個鏈接。 – user1433767

+0

任何可能的幫助? – user1433767

回答

5

我清理了多邊界符和得到這個,這對我的工作我的服務器上(我已經離開了SMTP命令在這裏):

From: "Edited Out" <[email protected]> 
To: "Edited Out" <[email protected]> 
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-- 

在多電子郵件邊界說明符任何不太可能出現在電子郵件正文/附件中的任意文本。當它在前面出現兩個破折號時,表示新零件的開始(包括第一個零件),當它在開始和結束處用兩個破折號顯示時,表示郵件的結束。原郵件曾在郵件(右<html>Does this actually work?</html>後)的中間這個「結束邊界」標誌,並有兩種不同的界碑(--boundary-type-1234567890--boundary-type-1234567892-alt)。這就解釋了爲什麼該附件是不放過。

+0

我對它進行了修改以符合您的設置,但附件仍然丟失。我使用的兩種不同邊界是基於我從Hotmail電子郵件中得到的(您可以在['格式正確的電子郵件'鏈接](http://pastebin.com/3yBySbxU))下看到它。儘管我必須承認我從未嘗試將電子郵件發送到不同的SMTP服務器,但在這種情況下,雅虎只是在不告訴我的情況下刪除附件。 – user1433767

+0

似乎雅虎根本不顯示附件。 Hotmail沒有這樣的問題,您的SMTP服務器也沒有。通過雅虎在IMAP中檢查電子郵件,多部分邊界仍然缺失(即使附件仍在那裏)。 – user1433767

+0

是的,multipart/alternative和multipart/mixed之間有區別。替代方案應該是相同內容的不同表示方式(通常是同一封電子郵件的HTML和純文本版本)。我想,混合應該是附件。然而,實際上,很多電子郵件客戶端/ MTA忽略了這一點,只是將這些部分視爲混合。 (請注意,我用於測試的SMTP服務器是Exchange 2010 SP1)。 – ejdyksen

2

原來,問題是非常微妙的

傳統的Hotmail(this was the original email I based it on),使用術語「multipart/alternative」用於多個p電子郵件的藝術。我在電子郵件中使用了「multipart/alternative」。

事實證明,雅虎不喜歡'multipart/alternative',並且只有在使用'multipart/mixed'這個詞時才能正確顯示純文本,html和附件(正如我注意到符合雅虎的電子郵件使用這個術語而不是替代方案),結合ejdyksen的建議(儘管雅虎的服務器本身都沒有建議)。

雖然從技術上講這是'正確'的答案,但我會選擇ejdyksen的答案,因爲他的努力表明它是一些服務器端技術性(他的SMTP服務器和hotmail都顯示附件,雅虎沒有)。禮貌地贊成ejdyksen的回答,而不是他做的大部分工作。