ActionMailer在日志中发送邮件没有问题,但未在收件箱中收到

时间:2014-08-15 07:02:13

标签: ruby email ruby-on-rails-4 actionmailer

我在将ActionMailer集成到我的Rails应用程序时遇到了一些问题,因此我尝试制作一个非常简单的示例来测试它。我按照ActionMailer guide进行了操作。

当用户访问/test时,它应该向他们发送电子邮件并将其重定向到根目录。下面的日志似乎表明邮件是在没有错误的情况下发送的,但是我的收件箱中没有收到任何内容。

用户访问/test 时的

日志
UserMailer#welcome: processed outbound mail in 16.5ms

Sent mail to me@gmail.com (6.5ms)
Date: Fri, 15 Aug 2014 14:38:26 +0800
From: itsupport@mydomain.com
To: me@gmail.com
Message-ID: <53edaae23b766_58de3fe95291a584391d@MacBook-Pro.local.mail>
Subject: Welcome
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

#message content correctly formatted

Redirected to http://localhost:3000/
Completed 302 Found in 29ms (ActiveRecord: 1.2ms)

development.rb

  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.perform_deliveries = true 
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      :address              => 'smtp.gmail.com',
      :port                 => 587,
      :domain               => 'mydomain.com',
      :user_name            => 'itsupport@mydomain.com',
      :password             => 'password',
      :authentication       => 'plain',
      :enable_starttls_auto => true }

usermailer.rb

class UserMailer < ActionMailer::Base
  default from: "itsupport@mydomain.com"

  def welcome(user)
    @user = user
    mail(to: user.email, subject: 'Welcome')
  end
end

课程控制器

def sendemail
    UserMailer.welcome(current_user).deliver
    redirect_to root_path
end

的routes.rb

 get 'test' => 'lessons#sendemail'

我已经尝试了

  • 检查垃圾邮件
  • 更改&#39; plain&#39;和&#39;登录&#39;
  • 以开发模式显式启动服务器
  • Not specifying the 'from' field
  • 拥有域名:作为我的域名和gmail.com(不同的答案可互换使用)

日志中的消息ID表明它是从我的个人计算机而不是gmail发送的 - 我是完全错了还是这个问题?

如果您可以帮我收到这些电子邮件,我非常感谢!

编辑 - 我已经将应用程序推送到Heroku以解决gmail不喜欢localhost发送的电子邮件的可能性,正如一些答案所暗示的那样。我的Heroku记录说邮件已发送到me@gmail.com,但我的收件箱中仍未显示任何内容......

3 个答案:

答案 0 :(得分:1)

我尝试使用SMTP设置创建一个全新的应用程序,看它是否有效,它确实有效!它让我想知道有什么不同,我意识到它可能是我在我的应用程序上的Devise gem。正在搜索有关Devise电子邮件的帮助this answer,这导致我将代码更改为:

配置/环境/ development.rb

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true 
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
   :address => "smtp.gmail.com",
   :port => 587,
   :domain => "gmail.com",
   :authentication => 'plain',
   :user_name => "me@domain.com",
   :password => "password",
   :enable_starttls_auto => true
}

现在电子邮件正在发送!

如果有人能够详细解释为什么config.action_mailer没有工作,那就太棒了,为了我自己的理解。

答案 1 :(得分:0)

也许您在config/initializers中有一个ActionMailer SMTP配置,它会覆盖您正确的SMTP设置。

答案 2 :(得分:0)

对我来说,解决方案是改变身份验证:

ActionMailer::Base.smtp_settings = {authentication: :plain}

ActionMailer::Base.smtp_settings = {authentication: 'plain'}

字符串而不是符号。这很奇怪,因为它适用于我上周写的最后两个邮件功能。