我定义了一个自定义传递方法,并将其加载到初始化程序中:
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次出现)
答案 0 :(得分:1)
使用自定义投放类配置action_mailer delivery_method:
config.action_mailer.delivery_method = MyCustomDelivery
那个班应该实现交付!获取Mail
gem实例的instance方法。像这样:
class MyCustomDelivery
def deliver!(mail)
puts "MAIL FROM: #{mail.from}"
puts "RCPT TO: #{mail.to}"
puts "DATA: #{mail.to_s}"
end
end
答案 1 :(得分: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
}