为什么设计不通过gmail smtp发送电子邮件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么设计不通过gmail smtp发送电子邮件?相关的知识,希望对你有一定的参考价值。

我正在使用设计进行身份验证。它提供了忘记密码链接。当我发送电子邮件时,电子邮件不会发送。以下是我使用过的设置。你能告诉我为什么gmail没有发送电子邮件吗?我也打开了“允许不太安全的应用程序发送电子邮件”,我也在gmail设置中启用了imap。

application.rb具有以下设置。

ActionMailer::Base.smtp_settings = {


  :address => 'smtp.gmail.com',
  :domain => 'mail.google.com',
  :port => 587,
  :user_name => 'validemail@gmail.com',
  :password => 'validpassword',
  :authentication => 'login',
  :enable_starttls_auto => true


}

development.rb有

  config.action_mailer.default_url_options = { host: '127.0.0.1'}


  config.action_mailer.delivery_method = :smtp

发送电子邮件后,我在控制台中收到以下文本。

Devise::Mailer#reset_password_instructions: processed outbound mail in 215.2ms
Sent mail to validemail@gmail.com (1097.6ms)
Date: Thu, 29 Dec 2016 09:50:41 +0000
From: please-change-me-at-config-initializers-devise@example.com
Reply-To: please-change-me-at-config-initializers-devise@example.com
To: validemail@gmail.com
Message-ID: <5864dc7161acb_173921a07788707d@kofhearts-rubyonrails-3267120.mail>
Subject: Reset password instructions
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<p>Hello validemail@gmail.com!</p>

<p>Someone has requested a link to change your password. You can do this through the link below.</p>

<p><a href="http://127.0.0.1/users/password/edit?reset_password_token=WQxYad91mPghMxaurYA5">Change my password</a></p>

<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>

Redirected to https://rubyonrails-kofhearts.c9users.io/users/sign_in
Completed 302 Found in 1965ms (ActiveRecord: 14.7ms)

更新:

我只是按照本教程。

https://www.youtube.com/watch?v=ZEk0Jp2dThc

发送电子邮件不适用于此视频中指定的设置。

答案

在我的帐户设置中启用不太安全的应用程序对我有用。

Google帐户设置>登录Google>向下滚动到底部

启用允许不太安全的应用程序。尝试再次发送电子邮件。

另一答案

这应该工作。也许你也可以在config.action_mailer.raise_delivery_errors = true打开config/environments/development.rb。它更容易调试。

也许你忘了在config.action_mailer.perform_deliveries = true设置config/environments/development.rb

另一答案

你试过这个吗?

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
ActionMailer::Base.smtp_settings = {  
  :address              => "smtp.gmail.com",  
  :port                 => 587,  
  :domain               => "gmail.com",  
  :user_name            => "myinfo@gmail.com",  
  :password             => "secret",  
  :authentication       => "plain"
  # :enable_starttls_auto => true # I don't have this, but it should work anyway 
} 

它发送可能你没有收到它因为垃圾邮件过滤器,首先要检查:

class UserMailer < ActionMailer::Base
  default :from => "myinfo@gmail.com"
  # ...
end

你也可以在你的Gmail中检查你的Forwarding and POP/IMAP ..

development.rb上包含这些代码行

config.action_mailer.default_url_options = {host: 'your server' } # ex. localhost:3000
config.action_mailer.raise_delivery_errors = true # to raise error if smtp has error on setup
config.action_mailer.default :charset => "utf-8"
另一答案
  1. 如果您使用Gmail,则应激活外部应用程序通过SMTP发送电子邮件的权限。
  2. 在开发模式下,Rails不发送电子邮件,你应该在生产rails s -e production中运行Rails或打开config.action_mailer.raise_delivery_errors = true
  3. 不要忘记使用mail().deliver或Rails 5+ mail().delivery_now

看看你这是我的SMTP配置

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address              => ENV['mailer_address'],
    :port                 => ENV['mailer_port'],
    :user_name            => ENV['mailer_username'],
    :password             => ENV['mailer_password'],
    :authentication       => "plain",
    :enable_starttls_auto => true
  }

这是我的班级邮件员

def send_email
 mail(to: "example@email.com", subject: 'not reply this message').deliver
end

我从我的控制器调用该函数。如果您有任何错误,您应该打印它以检查问题是什么。

begin
  myMailer.send_email
rescue  Exception => e
  flash[:error] = "Imposible sent email, #{e.inspect}"
end

以上是关于为什么设计不通过gmail smtp发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

通过 GoDaddy 上的 gmail SMTP 发送电子邮件 [关闭]

通过 Gmail SMTP 发送电子邮件时出错

使用 gmail smtp 通过代理发送电子邮件

为啥对我的 SMTP 发送的 gmail 邮件的回复没有线程化?

无法使用 gmail 通过 python 发送电子邮件 - smtplib.SMTPException:服务器不支持 SMTP AUTH 扩展

使用设计和 Gmail smtp 服务器发送邮件