web-dev-qa-db-ja.com

レール、アクションメーラーが送信しない

Railsで完全な初心者です。誰かがactionmailerを使用してサインアップした後でメールを送信しようとしています。

ログにメールが送信されていると記載されているが、Gmailがそれを取得しない

config/initializers/setup_mail.rb

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "asciicasts.com",
  :user_name            => "asciicasts",
  :password             => "secret",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
  default :from => "[email protected]"

  def registration_confirmation(user)
    mail(:to => user.email, :subject => "Registered")
  end
end

controllers/users_controller.rb

...
def create
    @user = User.new(params[:user])
    if @user.save
      UserMailer.registration_confirmation(@user).deliver
      sign_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end
...

ありがとう!

17
Pavel Babin

config/environments/development.rbにこのオプションが設定されていることを確認してください:

config.action_mailer.delivery_method = :smtp

また、ActionMailer::Base.smtp_settingsでは、有効なGmailアカウントを指定する必要があります。コピー貼り付け(asciicast)は、ここではカットしません。

参考のためにこの質問を参照してください: Rails開発環境では3)でメールを送信する

18
mihai

「smtp」の代わりに「sendmail」を使用できます

ActionMailer::Base.delivery_method = :sendmail

ActionMailer::Base.sendmail_settings = { :address => "smtp.gmail.com",
     :port => "587", :domain => "gmail.com", :user_name => "[email protected]", 
    :password => "yyy", :authentication => "plain", :enable_starttls_auto => true }
4
pinku

私がセットアップした新しいメーラーで、同じ問題に遭遇しました。この新しいメーラーがメールを送信できなかった理由を理解できず、メーラーのメソッドにアクセスできなかったのです。

解決

deliver_nowまたはdeliver*メーラー内のコード。メールを送信しません。

壊れた例

  def email_message()
    message = mail(to: User.first, subject: 'test', body: "body text for mail")
    message.deliver_now
  end

修正済み

  #Different class; in my case a service
  def caller
    message = MyMailer.email_message
    message.deliver_now
  end

  def email_message()
    mail(to: User.first, subject: 'test', body: "body text for mail")
  end

これで問題が解決しました。他の誰かが問題を解決してくれることを願っています。

1
gwnp