2013-09-04 5 views
2

У меня есть приложение RubyOnRails 3.2.x, которое отправляет письма с помощью Actionmailer.RubyOnbRails - Отправлять почту в строку

Код идет что-то вроде этого:

class Mymailer < ActionMailer::Base 

    def sendout 
     mail(:to->"[email protected]", :from ........... 
    end 

end 

Вместо того, чтобы посылать это письмо, я хочу, чтобы быть оказаны в строку, которую я потом планирую обработать иначе

PS: В моем конкретном case Я хочу передать эту строку серверу Node.JS, который будет выполнять фактическую отправку почты, я использую RubyOnRails для обработки поддержки нескольких языков и форматирования чисел (да, у меня есть несколько шаблонов для разных языков, которые я поддерживаю) ,

+0

Из интереса, почему Rails недостаточно для отправки электронной почты? – Olly

ответ

4

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

В идеале вы можете создать JSON строковое представление по электронной почте, как:

# at the top of the file 
require 'json' 

# then in your method 
json_string = { 
    :to => "[email protected]", 
    :from =>"[email protected]", 
    :body => "this is the body" 
}.to_json 

Затем отправить эту строку на сервер Node.js из (например) контроллера или что-то в настоящее время вызывающего вашего почтовика.

Однако, так как вы хотите, чтобы сделать электронную почту с помощью шаблонов, которые тянут в полях БД и использовать функциональные возможности i18n в Rails, вы можете использовать Mailer но вынести результат в строку, как следует:

mail(to: "[email protected]") do |format| 
    format.html do 
    string = render_to_string("your_template") 

    call_node_js(string) 
    end 
end 
+0

, который работает для простой текстовой почты, у меня есть довольно «большие» электронные письма с большим количеством значений поля базы данных. В общем, в настоящее время я поддерживаю 4 языка и еще больше, поэтому мое желание повторно использовать поддержку I18n Rails. – KKK

+0

Хорошо, я вижу. Мышление ... – Olly

+0

Вы не можете отобразить его в HTML, а затем использовать escape-строку HTML как значение в вашем JSON? – tompave

0

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

Хорошей отправной точкой является ActionMailer::Base метод #mail (Rails 4):
http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail

Во всяком случае, если посылка обрабатывается Node.js, вам не нужно делать это. Просто создайте объект JSON, как предложил Олли, и передайте его.

Смежные вопросы