Rails 3邮件无法正常工作,但设计邮件确实有效

时间:2012-08-31 02:53:23

标签: ruby-on-rails-3 centos actionmailer

我有一个可以正常工作的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
}

有关这里发生的事情的任何线索?

2 个答案:

答案 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。