0

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
}

ここで何が起こっているのか手がかりはありますか?

4

2 に答える 2

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.

問題をさらにトラブルシューティングするためにそれを試すことができます。

于 2012-09-07T14:20:55.570 に答える
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 アカウントなど) を使用してみてください。これが機能する場合は、ActionMailer ではなく、localhost で実行されている SMTP サーバーに問題があることがわかります。

于 2012-09-08T13:53:52.260 に答える