Ruby on rails 3 为什么';t Rails选择我的自定义邮件传递方式?

Ruby on rails 3 为什么';t Rails选择我的自定义邮件传递方式?,ruby-on-rails-3,Ruby On Rails 3,我定义了一个自定义传递方法,并将其加载到初始值设定项中: ActionMailer::Base.add_delivery_method :custom, CustomDelivery 然后我向development.rb和production.rb添加了config.action\u mailer.delivery\u method=:custom 但是当我想发电子邮件的时候 UserMailer.authorize(user).deliver 它因与SMTP相关的内容而失败(Argumen

我定义了一个自定义传递方法,并将其加载到初始值设定项中:

ActionMailer::Base.add_delivery_method :custom, CustomDelivery
然后我向development.rb和production.rb添加了
config.action\u mailer.delivery\u method=:custom

但是当我想发电子邮件的时候

UserMailer.authorize(user).deliver
它因与SMTP相关的内容而失败(
ArgumentError:发送邮件所需的发件人(返回路径、发件人或发件人)
来自/Users/me/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/network/delivery\u 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}>
irb(main):019:0>UserMailer.delivery\u方法
=>:自定义
irb(主):020:0>UserMailer.authorize(user.delivery\u方法
=>#“localhost”、:port=>25、:domain=>localhost.localdomain、:user\u name=>nil、:password=>nil、:authentication=>nil、:enable\u starttls\u auto=>true、:openssl\u verify\u mode=>nil、:ssl=>nil、:tls=>nil}>

(顺便说一句,我在我的项目中搜索了“SMTP”,出现次数为0次)

您是否通过
environment.rb
配置了SMTP?这是我的样子

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
}

使用自定义传递类配置action_mailer delivery_方法:

config.action_mailer.delivery_method = MyCustomDelivery
该类应该实现一个deliver!获取
邮件
gem实例的实例方法。大概是这样的:

class MyCustomDelivery
  def deliver!(mail)
    puts "MAIL FROM: #{mail.from}"
    puts "RCPT TO: #{mail.to}"
    puts "DATA: #{mail.to_s}"
  end
end

运气好吗?我想编写一个自定义的delivery\u方法来使用SendGrid API