代码之家  ›  专栏  ›  技术社区  ›  Josemafuen

Rails邮件程序未发送

  •  2
  • Josemafuen  · 技术社区  · 7 年前

    我正试图通过Rails应用程序发送“密码重置”邮件。但问题是,尽管我的日志上说邮件已经发送了,但它从未收到。

    这是config/environments/development中的配置。rb型

    config.action_mailer.delivery_method = :smtp
      config.action_mailer.smtp_settings = {
          address:              'smtp.gmail.com',
          port:                 587,
          user_name:            'xxxxx@gmail.com',
          password:             'yyyyy',
          authentication:       'plain',
          enable_starttls_auto: true  }
    

    我的应用程序/邮箱/用户邮箱。rb:

    class UserMailer < ActionMailer::Base
      default from: "xxxxx@gmail.com"
    
      def password_reset(user)
        @user = user
        mail :to => user.email, :subject => "Password Reset"
      end
    end
    

    以及在应用程序/模型/用户中调用邮件程序的方法。rb型

    def send_password_reset
        generate_token(:password_reset_token)
        self.password_reset_sent_at = Time.zone.now
        save!(:validate => false)
        UserMailer.password_reset(self).deliver_now
      end
    

    视图和一切都很好,因为正如我所说的,日志上说电子邮件发送成功,我想我一定是错过了一些配置。以下是日志:

    Sent mail to zzzzz@hotmail.com (2007.7ms)
    Date: Tue, 21 Nov 2017 12:10:46 +0100
    From: xxxxx@gmail.com
    To: zzzzz@hotmail.com
    Message-ID: <5a1409b627bb8_3ca86e9450429578@DESKTOP-85KSOM4.mail>
    Subject: Password Reset
    Mime-Version: 1.0
    Content-Type: text/plain;
     charset=UTF-8
    Content-Transfer-Encoding: quoted-printable
    
    Sigue el siguiente enlace para restablecer la contrase=C3=B1a
    http://localhost:3000/password_resets/w0F77qrpHbM9HvXaFElWGA/edit
    Ignora este email si no pediste el cambio.
    
    Redirected to http://localhost:3000/
    

    此外,发件人gmail的发件箱是空的,但我允许不太安全的应用程序访问我的gmail帐户,所以问题一定是另一回事。我不知道如何调试出了什么问题。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Josemafuen    7 年前

    似乎连接被拒绝了。重新启动服务器解决了问题。

        2
  •  0
  •   hezanathos    7 年前

    为了更好地调试邮件,您可以尝试bang方法 deliver_now! 并查看是否会引发任何例外(例如密码问题)。

    方法:ActionMailer::MessageDelivery#deliver_now!

    定义于: actionmailer/lib/action\u-mailer/message\u-delivery。rb型

    立即交付!对象

    在不检查perform_deliveries和 raise_delivery_错误,请谨慎使用。

    通知程序。欢迎(用户优先)。立即交付!