尝试在RoR应用程序中发送电子邮件时遇到SMTP错误



我一直在拼命尝试使用RoR中的Action Mailer类发送电子邮件,即使终端显示正在发送消息,它仍然返回此错误:

 et::SMTPAuthenticationError: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbtOS
from /Users/abhasarya/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:968:in `check_auth_response'
from /Users/abhasarya/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:739:in `auth_plain'
from /Users/abhasarya/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:731:in `authenticate'...

下面是我的mailer类在app/mailers/my_mail .rb中的样子:

class MyMailer < ActionMailer::Base
  default from: "from@example.com"
  def welcome_email(user) 
    @user = user
        mail(to: user.email,
             from: 'example_email@gmail.com',
             subject: 'Welcome!')
  end
end

这是我的配置/应用程序。Rb文件如下:

config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
        address:              'smtp.gmail.com',
        port:                 587,
        #domain:               'gmail.com',
        user_name:            'example_email@gmail.com',
        password:             'my_password',
        authentication:       'plain',
        enable_starttls_auto: true  
        }
        config.action_mailer.default_url_options = {
            :host => "localhost",
            :port => 3000
        }

在我的配置/环境/发展。我也有这两行:

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.perform_deliveries = true

我的问题是,每当我启动rails控制台(在开发中工作,不知道如何在生产中运行),将用户的电子邮件分配给用户变量,然后输入命令:MyMailer.welcome_email(user).deliver

终端显示:

Rendered my_mailer/welcome_email.html.erb (11.7ms)
  Rendered my_mailer/welcome_email.text.erb (0.5ms)
Sent mail to abhas.arya@yahoo.com (923.1ms)
Date: Fri, 08 Aug 2014 13:54:38 -0400
From: abhas.aryaa@gmail.com
To: abhas.arya@yahoo.com
Message-ID: <53e50ededebb2_2b0b8082dbf8507c5@Abhass-MacBook-Pro.local.mail>
Subject: Welcome!
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_53e50eded7355_2b0b8082dbf85068f";
 charset=UTF-8
Content-Transfer-Encoding: 7bit

,但随后呈现错误。我的观点很简单,我认为我没有必要在这里包括它们。我拼命地尝试了所有方法,包括解锁谷歌验证码,但还是没有用。我很感激任何帮助,所有我想要的是一个电子邮件被发送到适当的收件箱。如果你能解决这个问题,我会永远爱你!!

你看到这个错误的原因是谷歌已经封锁了你的IP。您需要为这个IP启用授权。

进入http://www.google.com/accounts/DisplayUnlockCaptcha,点击继续

然后再次尝试从应用程序发送电子邮件,它应该工作。您需要在访问上述链接的10分钟内从您的应用程序发送电子邮件。通过访问上述链接,谷歌将授予注册新应用程序10分钟的访问权限。

我通过以下方法解决了这个问题:

1)登录到谷歌应用管理门户,并通过检查"允许用户管理他们对不太安全的应用程序的访问"在安全首选项下启用不太安全的应用程序。

2)登录到作为邮件发送者的帐户,并将"允许不太安全的应用程序"打开。

大多数在线答案参考步骤2,但是如果管理员不打开该功能,则无法在用户级别进行配置。

经过一番调查,这个为我解决了这个问题:

点击https://www.google.com/settings/u/0/security/lesssecureapps

通过您在smtp配置中提供的电子邮件地址登录,启用对不太安全的应用程序的访问。

我这样做就解决了我的问题。

config.action_mailer.default :charset => "utf-8"
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    domain: 'mysite.com',
    user_name: myemail@gmail.com,
    password: mypassword,
    authentication: 'plain',
    enable_starttls_auto: true
}

因为如果你在账户设置中关闭了对不太安全的应用程序的访问,谷歌将试图阻止你的登录。因此,请按照此链接和"为不太安全的应用打开"访问。

相关内容

最新更新