8

カスタム配信方法を定義し、それをイニシャライザーにロードしました。

ActionMailer::Base.add_delivery_method :custom, CustomDelivery

config.action_mailer.delivery_method = :custom次に、development.rbとproduction.rbの両方に追加しました。

でもメールを送りたいとき

UserMailer.authorize(user).deliver

SMTP(ArgumentError: A sender (Return-Path, Sender or From) required to send a message from /Users/me/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/network/delivery_methods/smtp.rb:99:in deliver!')に関連するもので失敗します-私は使用したくありません

カスタム配信方法を採用しないのはなぜですか?

更新:コンソールから試してみると、次のことに気付きます。

irb(main):019:0> UserMailer.delivery_method
=> :custom

irb(main):020:0> UserMailer.authorize(user).delivery_method 
=> #<Mail::SMTP:0x00000100bdc738 @settings={:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil}>

(ところで、プロジェクトで「SMTP」を検索しましたが、発生は0回です)

4

2 に答える 2

2

カスタム配信クラスで action_mailer delivery_method を構成します。

config.action_mailer.delivery_method = MyCustomDelivery

そのクラスは配信を実装する必要があります! Mailgemのインスタンスを取るインスタンス メソッド。このようなもの:

class MyCustomDelivery
  def deliver!(mail)
    puts "MAIL FROM: #{mail.from}"
    puts "RCPT TO: #{mail.to}"
    puts "DATA: #{mail.to_s}"
  end
end
于 2014-08-28T13:28:22.707 に答える
-1

経由で SMTP を設定しましたenvironment.rbか? これが私の外観です。

ActionMailer::Base.smtp_settings = {
  :domain          => 'gmail.com',
  :address         => 'smtp.gmail.com',
  :port            => 587,
  :tls             => true,
  :authentication  => :plain,
  :charset         => 'utf-8',
  :user_name       => ENV['GMAIL_USERNAME'],
  :password        => ENV['GMAIL_PASSWORD'],
  :enable_starttls_auto => true
}
于 2012-07-15T14:53:22.950 に答える