2013-04-22 6 views
1

Я хочу иметь файл с именем Отметка + normal_mail_name + «.eml» ..Rails Mailer: изменение файла при delivery_method: файл

Я посмотрел в рельсах исходный код, исходный код почтового гем и письма opener-gem .. Не могли бы вы дать мне подсказку как (обезьяна-патч) отправить рельсы почтой, чтобы я мог указать что-то вроде:

config.action_mailer.file_settings = {: location => Rails.root.join ('tmp', 'mail'),: file_name => Time.now.to_i.to_s + "mail.eml"}

Спасибо!

UPDATE: Было бы также неплохо иметь эти письма автоматически открываемые с моей локальной связанной электронной программе с Launchy, как письмо открывашка драгоценный камень .. я хотел бы сделать это сам, но я не понимаю sourcecodes ..

ответ

1

Я думаю, что у вас много материала для почтовой рассылки, и вы захотите отладить тело письма, тексты и т. Д.? Я прав? Если я прав, я бы не отправил почту с файлом delivery_method:, я бы просто создал настоящую электронную почту (например, gmail) и отправил почту через тестовую учетную запись.

Например, в вашей конфигурации/сред/development.rb:

email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/mail.yml"))[Rails.env] rescue nil 

if email_settings.nil? 
    config.action_mailer.raise_delivery_errors = false 
    config.action_mailer.perform_deliveries = false 
    config.action_mailer.delivery_method = :file 
else 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.perform_deliveries = true 
    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    :address    => "#{email_settings["address"]}", 
    :port     => email_settings["port"], 
    :authentication  => "#{email_settings["authentication"]}", 
    :user_name   => "#{email_settings["user_name"]}", 
    :password    => "#{email_settings["password"]}", 
    :enable_starttls_auto => email_settings["enable_starttls_auto"] 
    } 
end 

И ваш файл mail.yml:

development: 
    address: smtp.gmail.com 
    port: 587 
    authentication: login 
    user_name: [email protected] 
    password: yourpassword 
    enable_starttls_auto: true 

Это на самом деле не является прямым ответом на ваш вопрос, но, возможно, эта работа - хороший выбор для вас. Вы также можете настроить другие среды таким же образом, в зависимости от ваших потребностей.

0

Если вы просто хотите пропустить передачу сообщений электронной почты через реальный почтовый сервер для просмотра сообщений электронной почты локально, два хороших решений, которые я использовал являются:

Небезопасное, OSX-специфическое решение должно использовать http://mocksmtpapp.com/

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

http://railscasts.com/episodes/206-action-mailer-in-rails-3

Нечто подобное для lib/development_mail_interceptor:

class DevelopmentMailInterceptor 
    def self.delivering_email(message) 
    message.perform_deliveries = false 
    File.open("#{Time.now.to_i}-email.eml", "w") { |f| f.write(message.to_s) } 
    end 
end 

и в конфигурации/инициализаторах/setup_mail.rb

Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?