Rails 4 ActionMailer不以开发模式发送电子邮件

时间:2015-08-25 18:59:47

标签: ruby-on-rails ruby-on-rails-4 devise actionmailer devise-confirmable

首先,让我指出我知道ActionMailer在开发模式下默认 NOT 发送电子邮件

另外,我看了类似的问题,但没有一个与我的情况有关。

所以,我们走了:

  1. 我正在关注Ilya Bodrov-Krukowski的this Site Point tutorial,从2015年3月26日开始,以便在我的Rails 4应用程序上安装和设置Devise。

  2. 因为我们激活了Devise的confirmable模块,所以我需要在开发中发送电子邮件,以允许注册的用户激活他们的帐户并登录。

  3. 每当我创建新用户(通过http://localhost:3000/users/sign_up)时,我都会收到以下警告:

  4.   

    带有确认链接的邮件已发送到您的电子邮箱   地址。请点击链接激活您的帐户。

    1. 但是,我实际上从未收到带有确认链接的电子邮件。
    2. ----------

      更新

      在我的development.log文件中,我可以看到电子邮件已“发送”:

      Devise::Mailer#confirmation_instructions: processed outbound mail in 172.1ms
      
      Sent mail to hello@mydomain.com (54.4ms)
      Date: Tue, 25 Aug 2015 12:15:15 -0700
      From: contact@anotherdomain.com
      Reply-To: contact@anotherdomain.com
      To: hello@mydomain.com
      Message-ID: <55dcbec3a1ef8_33b93fcffc4988f493685@XXXXXX.local.mail>
      Subject: Confirmation instructions
      Mime-Version: 1.0
      Content-Type: text/html;
       charset=UTF-8
      Content-Transfer-Encoding: 7bit
      
      <p>Welcome hello@mydomain.com!</p>
      
      <p>You can confirm your account email through the link below:</p>
      
      <p><a href="http://localhost:3000/users/confirmation?confirmation_token=ZsL_iQVxfDQd7mB1RkGf">Confirm my account</a></p>
      
        [1m[35m (0.8ms)[0m  commit transaction
      Redirected to http://localhost:3000/
      Completed 302 Found in 560ms (ActiveRecord: 1.7ms)
      

      而且,当我将日志中的链接复制并粘贴到我的浏览器中时,我收到以下警告:

        

      成功登记。

      因此,似乎唯一不起作用的是实际发送/接收电子邮件。

      ----------

      根据教程中的建议,我遵循了关于ActionMailer configuration的Rails文档,这是我在config/environments/development.rb file中的内容:

      config.action_mailer.delivery_method = :sendmail
        # Defaults to:
        # config.action_mailer.sendmail_settings = {
        #   location: '/usr/sbin/sendmail',
        #   arguments: '-i -t'
        # }
        config.action_mailer.perform_deliveries = true
        config.action_mailer.raise_delivery_errors = true
        config.action_mailer.default_options = {from: 'hello@mydomain.com'}
        config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
      

      显然,我遗漏了一些东西,但我无法弄清楚是什么(我非常非常适合Rails)。

      有什么想法吗?

2 个答案:

答案 0 :(得分:4)

默认情况下,不会在开发中发送邮件。要启用此功能,您必须在config.action_mailer.perform_deliveries = true文件中设置development.rb,我认为您已经拥有该文件。

您可能还必须启用config.action_mailer.raise_delivery_errors = true来提出投放错误。这样,您就可以看到电子邮件递送过程中是否有任何错误。

另外,如果邮件有效,请仔细检查default from

同时尝试将投放方式切换为sendmail

config.action_mailer.delivery_method = :sendmail

这可以解决您的问题。

答案 1 :(得分:0)

您需要Action Mailer的邮件服务器才能发送电子邮件。 如 MailGun 它有一个免费帐户和一个宝石,使设置容易。 mailgun_rails