0

過去 3 日間、多くの時間を費やしてきた 2 つの問題があります。ここで私を助けてくれた経験豊富なコーダーに本当に感謝しています。

User登録コントローラーからDevise invitableを使って確認メールを送るモデルがあります。

User.invite!({:email => email, ...)

今、私はこれらの設定を持っています

config/environments/development.rb 内

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.smtp_settings = {
      address:              'mail.myapp.com',
      port:                  26, 
      domain:               'myapp.com',
      user_name:            'notifications@myapp.com',
      password:             'xxxx',
      authentication:       'plain',
      enable_starttls_auto:  true,
      openssl_verify_mode:   'none'
  }

およびconfig/devise.rb

config.mailer_sender = 'notifications@myapp.com'

このメールは、デバッグ出力に「Sent email to ...」と表示されてからちょうど 20 分後に配信されます。

今、私はカスタム NotificationsMailer をコード内の他の場所でも使用しています。ここでは、デバイス ベースの登録プロセス以外の通知メールを送信しています。上記と同じ設定を入力しましたがconfig/initializers/setup_mail.rbこの場合、メールは瞬時に配信されます。この遅延はなぜですか?

質問/疑問 #2 メール送信の配信プロセスを傍受できれば、ログを介して Mail::Message オブジェクトをチェックし、後で Sidekiq を使用して処理する非同期の方法を開発できると考えました。

そのため、config/application.rbで

ActionMailer::Base.add_delivery_method :queued, :QueuedDelivery

config/environments/development.rb 内

config.action_mailer.delivery_method = :queued

lib/queued_delivery.rb

class QueuedDelivery
  def deliver!(mail)
    logger.debug "mail object string rep: #{mail.to_s}"
    logger.debug "mail object settings: #{mail.deliver_method.settings}"
  end
end

配信方法を変更したにもかかわらず、Devise がいつものように 20 分遅れてメールを送信し、上記のデバッグ レベルのログが表示されないのは奇妙です。 Devise はどのようにこれらのメールを送信していますか?! devise gemをチェックインdevise_mail()したところ、このコードが finally で使用されていますmail headers_for(action, opts)。ここで何が起こっているのですか?

4

0 に答える 0