【问题标题】:Rails Cast: ActionMailer Email not sent to inboxRails Cast:ActionMailer 电子邮件未发送到收件箱
【发布时间】:2011-09-14 20:15:54
【问题描述】:

服务器指出电子邮件已发送到正确的地址,但我的收件箱中没有收到邮件。

我的 Setup_mail.rb 文件

ActionMailer::Base.smtp_settings ={
  :address          => "smtp.gmail.com",
  :port         => 587,
  :domain           => "gmail.com",
  :user_name        => "my_user_name@gmail.com",
  :password         => "my_password",
  :authentication       => "Plain",
  :enable_starttls_auto => true
}

我的development.rb 文件是:

# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true #default value
config.action_mailer.delivery_method = :smtp #default value

我的test.rb 文件是:

config.action_mailer.delivery_method = :smtp

我尝试了多种变体,但我迷路了。我在 Windows 7 机器上运行。我正在运行 Ruby 1.8.7 和 Rails 3.0.7

谁能帮忙?

这是我的创建方法:

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

我的 user_mailer.rb 类 UserMailer

default :from => "my_user_name@gmail.com"

def registration_confirmation(user)
mail(:to => user.email, :subject => "Thanks for registering")

end
end

【问题讨论】:

  • 您能否发布此邮件特定于模型和控制器的代码?
  • 我认为 google 要求您使用 SSL/TLS。
  • @caley Woods: :enable_starttls_auto => true 表示使用 SSL/TLS!
  • @andre 谢谢我错过了那行。

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


【解决方案1】:

看看你的服务器。我很确定您可以在日志中看到它实际上是在尝试发送邮件。

问题在于 Google 不信任您的本地 IP 地址,因此您的邮件不会被递送(甚至不会递送到垃圾邮件目录)。没有办法解决这个问题,只能使用列入白名单的服务器。

如果您在生产环境中试用您的应用,这应该可以正常工作,例如将您的应用部署到 heroku 进行测试。

【讨论】:

  • 这是正确的。我部署到 Heroku 和电子邮件工作人员。感谢您的信息。
  • 是的,我检查了我的 /var/log/mail.log 并找到了根本原因。非常感谢!
【解决方案2】:

尝试在最后输入.deliver。这为我解决了这个问题:

mail(:to .....).deliver!

【讨论】:

    【解决方案3】:

    尝试将身份验证从字符串更改为符号。

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

    【讨论】:

    • 我更改了身份验证,但电子邮件没有进入收件箱。感谢您的建议。
    • @user797995 这很有趣。 rails guide说它需要是一个符号:plain,但在他们的示例中,他们使用“普通”字符串。
    • 我部署到 Heroku,这解决了这个问题。但是这在开发或测试中仍然不起作用。
    【解决方案4】:

    您应该检查 my_user_name@gmail.com 确实已发送电子邮件。我们过去在通过 Gmail 的 SMTP 服务器发送验证电子邮件时遇到过这个问题,因为批量发送最终根本不发送。

    我建议您登录 my_user_name@gmail.com 并确认没有问题并且电子邮件已发送。

    如果没有,您可能需要尝试Send Grid 之类的服务来发送外发电子邮件。

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,我可以看到在我的控制台中发送了邮件,但在收件箱中没有出现任何内容,一件事是您可以将您的应用程序部署在像 heroku 这样的白名单服务器上,或者如果您只想查看为了通过您的本地进行测试,只需在浏览器中启用安全性较低的应用程序,您应该能够在收件箱中看到该电子邮件 https://myaccount.google.com/lesssecureapps

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-09
        • 2014-03-12
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-20
        相关资源
        最近更新 更多