4

ActionMailer で遅延ジョブを実装する際に問題があります: 遅延ジョブの実装前:

class NotificationsMailer < ActionMailer::Base

  default :from => "noreply@mycompany.com"
  default :to => "info@mycompany.com"

  def new_message(message)
    @message = message
    mail(:subject => "[Company Notification] #{message.subject}")
  end

end

そして、この行を使用してそれを呼び出しました(それは完全にうまくいきました):

NotificationsMailer.new_message(@message).deliver

遅延ジョブの実装後、私がしたことは、配信行を次のように変更することだけでした。

NotificationsMailer.delay.new_message(@message)

さらに、次を使用してジョブキューを開始しました

rake jobs:work

ジョブが閉じられている場合、データベース内のオブジェクトを見ることができ、ワーカーを開始した後にそれらがポップされるのを見ることができますが、何も起こりません (電子メールは送信されません)。

更新 - その他の遅延タスク (メールとは関係ありません) は正常に動作しています。

誰でも初心者を助けることができますか?

前もって感謝します!!

4

2 に答える 2

5

遅延ジョブを使用して電子メールを送信するのに多くの時間を費やしましたが、最終的には機能します。

Gem ファイル内

gem 'delayed_job'
gem 'delayed_job_active_record'

コントローラー内

 def dtest

    UserMailer.delay.welcome_email
    render json:"Succes"
    return
 end

メーラーで

class UserMailer < ActionMailer::Base
  default from: "from@example.com"

  def welcome_email
    ActionMailer::Base.delivery_method = :smtp 
        ActionMailer::Base.smtp_settings = {
                address: "smtp.gmail.com", 
                port: 587, 
                domain: 'gmail.com',
                Authentication: "plain", 
                enable_starttls_auto: true, 
                user_name: 'your@gmail.com',
                password: 'yourpassword'
            }

    mail(to: 'no-reply@gmail.com', subject: 'Background Email Test').deliver

  end

end

この後、レールサーバーを起動して仕事を始めるだけです

rake jobs:work

皆さんのお役に立ち、「delayed-jobs」を使用してメール送信が正常に機能することを願っています:)

于 2014-11-18T12:15:07.983 に答える