2010-10-26 40 views
2

我遇到了一個有趣的問題。我通過蘋果公司的me.com SMTP服務器通過Ruby :: NET中的SMTP類發送帶有附件的電子郵件,我遇到了一些有趣的問題。郵件編碼和通過SMTP發送 - 紅寶石

我試圖通過SMTP服務器發送一系列jpg文件。我用紅寶石編碼它們,當我發送給另一個me.com電子郵件時,所有五個jpg圖像都以完美的狀態出現在另一端。當我發送到我的Gmail地址的文件截斷在90K(他們通常在500K左右)。當我在textmate中打開兩封電子郵件時,我發現電子郵件的文本部分的編碼在發送到.me地址的電子郵件中是8位,而在發送到gmail服務器的電子郵件中是7位。我不確定這是否是我的問題。

這裏是我使用的代碼的簡要:

file1Content = File.read(目錄+ '/ Photo_1.jpg')
file1的= [file1Content] .pack( 「M」)

marker = "AUNIQUEMARKER" 

body =<<EOF 
#{emailbody} 
EOF 

# Define the main headers. 
part1 =<<EOF 
From: #{from} 
To: #{donor} 
Subject: #{subject} 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary=#{marker} 
--#{marker} 
EOF 

# Define the message action 
part2 =<<EOF 
Content-Transfer-Encoding:8bit 
Content-Type: text/plain 
#{body} 
--#{marker} 
EOF 

# Define the attachment section 
part3 =<<EOF 
Content-Type: image/jpeg; name=\"Photo_1.jpg\" 
Content-Transfer-Encoding:base64 
Content-Disposition: attachment; filename="Photo_1.jpg" 
#{file1} 
--#{marker} 
EOF 

(等5個文件,我結束標記與 - #{}標記 -

我真的很感激任何幫助,您可以給我完全難倒一對夫婦的其他注意事項。我使用的是MacRuby,並不是所有的Gem都可以使用它,特別是嵌入式Mac紅寶石。我已經在小型圖書館取得了一些成功,但是我沒有與ActionMailer交往過。

回答

2

我有一個朋友進來,我們通過它的工作,這裏是結果。

在電子郵件編碼中,換行符非常重要。一些郵件服務器似乎更寬容(蘋果的),這就是爲什麼我最初沒有看到問題。

這裏是工作代碼:

marker = "AUNIQUEMARKER" 

body =<<EOF 
#{emailbody} 
EOF 

# Define the main headers. 
part1 =<<EOF 
From: #{from} 
To: #{donor} 
Subject: #{subject} 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary=#{marker} 

--#{marker} 
EOF 

# Define the message action 
part2 =<<EOF 
Content-Type: text/plain 
Content-Transfer-Encoding:8bit 

#{body} 
--#{marker} 
EOF 

# Define the attachment section 
part3 =<<EOF 
Content-Type: image/jpeg; name=Photo_1.jpg 
Content-Transfer-Encoding:base64 
Content-Disposition: attachment; filename=Photo_1.jpg 

#{file1} 
--#{marker} 
EOF 

part4 =<<EOF 
Content-Type: image/jpeg; name=Photo_2.jpg 
Content-Transfer-Encoding:base64 
Content-Disposition: attachment; filename=Photo_2.jpg 

#{file2} 
--#{marker} 
EOF 
0

我沒有附件編碼的經驗,但我認爲7bit仍然是標準。

我推薦使用一個郵件庫,它可以爲你做所有這些事情,比如Mikel。重新發明車輪並不是很有用,除非你只想學習發明車輪。

鏈接米克爾的郵件LIB:http://github.com/mikel/mail

+0

感謝Ariejan,正如我在一封電子郵件中提到,我使用的MacRuby和一些寶石不爲它工作。我真的需要推出自己的。我不喜歡發明輪子,但這是我爲使用新技術而付出的代價。 – tsugua 2010-10-26 20:33:59

+0

在這種情況下,您可以使用Mikel的庫作爲一個很好的起點。 7位編碼將在某處供您查看。 – Ariejan 2010-10-27 08:56:57