кодирование и отправка электронной почты через SMTP - Ruby - PullRequest
2 голосов
/ 26 октября 2010

Я столкнулся с интересной проблемой. Я отправляю электронную почту с вложениями через класс NET :: SMTP в ruby ​​через SMTP-серверы Apple me.com и сталкиваюсь с некоторыми забавными проблемами.

Я пытаюсь отправить серию jpg-файлов через SMTP-сервер. Я кодирую их в ruby, и когда я отправляю письмо на другой me.com, все пять изображений jpg появляются на другом конце в отличном состоянии. Когда я отправляю на свой адрес электронной почты, файлы обрезаются до 90 КБ (обычно они около 500 КБ). Когда я открываю два письма в textmate, я вижу, что кодировка текстовой части письма - 8 бит в письме, отправленном на адрес .me, и 7 бит в письме, отправленном на сервер gmail. Я не уверен, если это моя проблема или нет.

Вот краткое описание кода, который я использую:

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 ]

2 голосов
/ 28 октября 2010

У меня был друг, и мы проработали его, и вот результат.

В кодировках электронной почты разрывы строк чрезвычайно важны. Некоторые почтовые серверы выглядят более щадящими (яблочные), поэтому я изначально не видел проблемы.

Вот рабочий код:

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 голосов
/ 26 октября 2010

У меня нет опыта работы с кодировкой вложений, но я думаю, что 7bit по-прежнему стандарт.

Я рекомендую использовать почтовую библиотеку, которая сделает все это за вас, например, от Микеля. Повторное изобретение колеса не очень полезно, если только вы не хотите научиться изобретать колеса.

Ссылка на почту Mikel lib: http://github.com/mikel/mail

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...