我有一个可以正常工作的rails 3.2.3应用程序,并提供设计创建的邮件消息,注册确认和密码忘记邮件消息以设置新密码。
但是,我有一个不同的地方,我想传递邮件通知。
这是我的Notifier
型号。
# encoding: utf-8
class Notifier < ActionMailer::Base
default from: "no-reply@domain.com"
default to: "admin@domain.com"
def new_post_submitted(post)
@post = post
mail(subject: "Anúncio enviado: #{@post.title}")
end
def new_message(message)
@message = message
mail(subject: "Mensagem de contato: #{@message.subject}")
end
end
并且控制器调用:
def create
@message = Message.new(params[:message])
if @message.valid?
Notifier.new_message(@message).deliver
redirect_to(root_path, :notice => "Obrigado. Sua Mensagem enviada com sucesso")
else
flash.now.alert = "Por favor preencha todos os campos."
render :new
end
end
日志输出显示已交付:
Started POST "/contato" for 187.57.102.168 at 2012-08-31 11:28:51 +0900
Processing by ContactController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"TVdmDYCA4x3JVi+9pMcpY7OSU/P1lE9enLiFJlK9W1M=", "message"=>{"name"=>"kleber", "email"=>"test@gmail.com", "subject"=>"teste", "body"=>"hello there"}, "commit"=>"Enviar"}
Rendered notifier/new_message.html.erb (0.1ms)
Sent mail to admin@domain.com (152ms)
Redirected to http://www.domain.com/
Completed 302 Found in 158ms (ActiveRecord: 0.0ms)
以及config/production.rb
文件中的以下配置。
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "localhost",
:port => 25,
:domain => "domain.com",
:authentication => :login,
:user_name => "admin@domain.com",
:password => "mypassword",
:enable_starttls_auto => false
}
有关这里发生的事情的任何线索?
答案 0 :(得分:1)
以下是我的production.rb文件中的设置。
ActionMailer::Base.smtp_settings = {
:address => 'mail.domain.com',
:port => 587,
:domain => 'domain.com',
:authentication => :login,
:user_name => 'postmaster@domain.com',
:password => 'password'
}
不确定您是否必须指定delivery_method?
ActionMailer::Base.delivery_method = :smtp
我的配置中没有,一切正常。
在rails API http://api.rubyonrails.org/ ActionMailer部分中,有一个设置传递错误的选项。
raise_delivery_errors - Whether or not errors should be raised if the email fails to be delivered.
您可以尝试进一步解决问题。
答案 1 :(得分:0)
首先,确保您没有关闭环境文件中其他位置的交付:
# the default is true anyway, so if you don't see it anywhere in
# the file, you should be okay
config.action_mailer.perform_deliveries = true
接下来我会尝试将投放方式更改为:sendmail
或:file
。如果您在系统上安装并配置了sendmail(至少是开发系统),那么您应该会收到您发送的电子邮件。有一点我发现sendmail在OS X上开箱即用,我感到很惊讶。我不确定你是否在CentOS上找到了同样的东西。
如果您没有sendmail或者不想配置它,请使用:file
传送方法将电子邮件转储到文件系统上的文件中。
此时,如果电子邮件不通过sendmail或文件传送,您知道堆栈中存在问题。如果他们确实提供,那么问题是您的SMTP配置。尝试使用已知的有效SMTP服务器(例如您的Gmail帐户)。如果可行,那么您知道在localhost上运行的SMTP服务器存在问题,而不是ActionMailer。