2014-12-18 3 views
1

Я пытаюсь отправить электронное письмо в отдельном потоке (по бюджетной причине я не хочу повторно нажимать на данный момент). Электронная почта отправляется, когда я вызываю функцию почты без потока, но когда я обертываю ее в поток, не отправляется электронное письмо.Rails Отправить письмо в теме Не работает

#Thread.new do 
    puts "hello1" 
    mail(to: "[email protected]", subject: "blah blah",body: some_var.text) 
    puts "hello2" 
# end 

Так что этот кусок кода работает, но когда я раскомментировать это электронная почта не отправляется (Однако я вижу «hello1 hello2» напечатаны, и я могу войти в функцию почты, так что нить называя и он заканчивается, но, увы, почта не отправляется).

Я нахожусь на Rails 4.16, режиме разработки (Webrick работает от Rubymine).

ответ

0

Если это в мэйлера модели как

class MyMailer < ActionMailer::Base 
    def my_method 
    mail # ... 
    end 
end 

Тогда он не посылает электронную почту, потому что вы также должны вызвать .deliver на него, так что, когда вы запустите его в тему, вы не вернете объект mail, но thread - главный вопрос. Это, вероятно, может выполняться, когда вы что-то вроде:

class MyMailer < ActionMailer::Base 
    def my_method 
    Thread.new do 
     mail().deliver # parameters to mail method as needed 
    end 
    end 
end 
0

Я попытался с решением privied от @ Лешек-Залевский, но она не работает для меня.

То, что я сделал это из модели (где я запуская действие электронной почты) Я изменил его:

Перед (в моем NotificationMailer < ActionMailer :: Base):

def login_email() 

    subject = 'New Login' 

    Thread.new do 
     mail(to: "XYZ", subject: subject).deliver 
    end 
    end 

Сейчас (в модель администратора):

def after_database_authentication 
    Thread.new do 
     NotificationMailer.login_email().deliver 
    end 
    end 

и я удаляла блок Thread.new в NotificationMailer

и там вы идете!

Надеюсь, это поможет.

0

Вы можете использовать ActiveJob (запас в рельсах 4.2 и activejob_backport для рельсов 4+) с помощью Backload для SuckerPunch для выполнения заданий в том же процессе