电子邮件编码和通过SMTP发送 - Ruby

时间:2010-10-26 07:43:38

标签: ruby email encoding

我遇到了一个有趣的问题。我通过Apple的me.com SMTP服务器通过Ruby中的NET :: SMTP类发送附件的电子邮件,我遇到了一些有趣的问题。

我正在尝试通过SMTP服务器发送一系列jpg文件。我在ruby编码它们,当我发送到另一个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个文件,我用 - #{marker} -

结束标记

我真的很感激你能给予的任何帮助。我完全难过了。其他几个笔记。我正在使用MacRuby而不是所有Gems都在使用它,特别是对于嵌入式MacRuby。我在小型图书馆取得了一些成功,但我对ActionMailer没有任何好运。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我没有附件编码的经验,但我认为7bit仍然是标准。

我建议使用一个邮件库来完成所有这些,就像Mikel那样。重新发明轮子并不是很有用,除非你只想学习发明轮子。

链接到Mikel的邮件库:http://github.com/mikel/mail