Отправка почты с вложением в Rails 3.0 с использованием ActionMailer :: Base в одну или две строки - PullRequest
6 голосов
/ 06 марта 2012

Это мой первый вопрос, но я пытаюсь отправить письмо с вложением в консоль rails, используя одну или две строки.Я не хочу создавать экземпляр класса, как ..

class Mailer

Я хочу попробовать это следующим образом:

m=ActionMailer::Base.mail(:to => "harry@example.com", :from => "test@example.com", :subject=>"test from zip", :content_type=>"multipart/mixed")
m.attachments['file.zip']={:mime_type => "application/zip", :data=>File.read("#{Rails.root}/tmp/test.zip")}
m.deliver

Это отправит электронное письмо, но вложение называется noname, которое нельзя распаковать.Кажется, что не правильно анализировать данные для вложения.Если я посмотрю на необработанное электронное письмо, содержимое вложения будет выглядеть примерно так:

--
Date: Tue, 06 Mar 2012 06:59:42 -0800
Mime-Version: 1.0
Content-Type: application/zip;
charset=UTF-8
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=file.zip
Content-ID: <4f56264f16e82_498a46e93467093@ip-10-125-15-127.mail>

UEsDBBQAAAAIAE9iZUBSMYOwkKgZANRakgAQABUAbG9hbl9kZXRhaWxzLmNz
dlVUCQADlh9VT0QfVU9VeAQA6APoA8xdW3PiuLZ+37+Ch6ldZ1dZGUvyNW/c
EwKBQLiENze4gytgZ9tmMplff5YMlgQWmV1tk5qufiAkwV8trcu3bko/8sLa
m/+p9dmLJPXSfaI1oyR4Df21Non28crPvt+MfS/117Uo5C+9VKu/v8fRH4e3
O0HobWte9g68gHdaQfJjHyeHb4/9/+79JPu9XbQPU22y2kTRVuv74dqPa7G/
...

1) возможно ли даже отправить электронное письмо с таким вложением без использования чего-то вроде пони драгоценный камень

1 Ответ

2 голосов
/ 08 января 2013

Оценка того, почему это не работает

Согласно сообщению SO Неверное имя файла в электронной почте (ActionMailer) Похоже, что ActionMailer хочет автоматически получать информацию из файлов, что недоступно из консоли.

Я заметил, что следующее, хотя и грязное, работает (достаточно для моих целей) с консоли:

File.open("magical_elephant_potato.txt", 'w') {|f| f.write("Heyyyy youuu!") }
m=ActionMailer::Base.mail(:to => "rainbowpony@company.com", :from => "noreply@railsapp.com", :subject=>"Behold my MEP attache", :content_type=>"multipart/mixed")
m.attachments['magical_elephant_potato.txt']=File.read("magical_elephant_potato.txt")
m.deliver
FileUtils.rm('magical_elephant_potato.txt')

Учитывая, что запись и удаление файлов через консоль работают, возможно, файлы, требуемые ActionMailer, можно записать, использовать, а затем удалить? Мы идем на липкую территорию для обхода здесь, хотя. Проблема в том, что ActionMailer будет искать подходящее представление почтовой программы, но как и как мы можем указать ActionMailer, где искать файлы почтовой программы? (Как в имени файла)

Что касается информации, которая не была правильно закодирована, я думаю, проблема в том, что она упакована в файл «noname» с некоторой информацией заголовка. Данные, скорее всего, не повреждены, как в моем примере:

--
Date: Tue, 08 Jan 2013 11:08:57 +0000
Mime-Version: 1.0
Content-Type: text/plain;
 charset=UTF-8;
 filename=magical_elephant_potato.txt
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=magical_elephant_potato.txt
Content-ID: <50bbfe4898ac_6d7febf6a312062@ws9.companydev.com.mail>

Heyyyy youuu!

----

: когда я открываю «noname» в текстовом редакторе.

...