【问题标题】:ActionMailer emails "sent" in development.log, but not receivedActionMailer 电子邮件在 development.log 中“已发送”,但未收到
【发布时间】:2016-07-13 01:10:25
【问题描述】:

我在开发中通过 ActionMailer 在我的本地主机上使用 Rails 2.3.2Ruby 1.8.6 发送问题实际上 . development.log 显示它已经“发送”了没有错误的电子邮件,但没有收到电子邮件。我尝试了多个用于发送和接收的电子邮件地址,并尝试了多个配置和插件,但无法发送电子邮件。任何帮助将不胜感激 - 我觉得我正在为不同版本的 rails 和 ruby​​ 围绕一堆版本的解决方案跳舞,但无法确定。我将不胜感激任何cmets。谢谢!

插件:

  • action mailer 可选 tls
  • smtp_tls

不同的电子邮件配置:

  ActionMailer::Base.smtp_settings = {
    :enable_starttls_auto => true, #works in ruby 1.8.7 and above
    :address => 'smtp.gmail.com',
    :port => 587,
    :domain => 'example.com',
    :authentication => :plain,
    :user_name => 'testacct',
    :password => 'secret'
  }

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :tls => :true,
    :address => 'smtp.gmail.com',
    :port => 587,
    :authentication => :plain,
    :user_name => 'testacct@gmail.com',
    :password => 'secret'
    #:enable_starttls_auto => true # for rails >= 2.2 && ruby >= 1.8.7
  }
  config.action_mailer.perform_deliveries = :true #try to force sending in development 
  config.action_mailer.raise_delivery_errors = :true 
  config.action_mailer.default_charset = "utf-8"

开发日志:

Sent mail to sa23kdj@trash2009.com

Date: Fri, 18 Dec 2009 00:27:06 -0800
From: Test Email Acct <testacct@gmail.com>
To: sa23kdj@trash2009.com
Subject: Signup
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=mimepart_4b2b3cda9088_634334302a5b7


--mimepart_4b2b3cda9088_634334302a5b7
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: Quoted-printable
Content-Disposition: inline

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww=
w.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang=3D'en' xml:lang=3D'en' xmlns=3D'http://www.w3.org/1999/xhtml'>=

  <head>
    <meta content=3D'text/html;charset=3DUTF-8' http-equiv=3D'content-typ=
e' />
  </head>
  <body>
    Welcome Email
    <p>
      user name:
      lfglkdfgklsdf
      activation link:
      http://localhost:3000/login
    </p>
  </body>
</html>

--mimepart_4b2b3cda9088_634334302a5b7--

【问题讨论】:

  • 检查这些是否被标记为垃圾邮件。
  • 谢谢大家,不知道发生了什么(可能与 smtp 服务器有关),但它现在可以使用相同的确切代码。嗯。
  • 我刚刚重新启动了 Rails 控制台以使其正常工作。本来可以的。

标签: ruby-on-rails ruby actionmailer


【解决方案1】:

将以下内容放入config/environments/development.rb

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

它将覆盖config/environment.rb中的设置

对于 rails 2.X,您还需要设置:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => true,  
  :address        => "smtp.gmail.com",
  :port           => 587,
  :domain         => "domain.com",
  :user_name      => "username@domain.com",
  :password       => "secret_passsword",
  :authentication => :plain
}

【讨论】:

  • 感谢有关raise_delivery_errors = true 的提示。这帮助我更接近于识别错误,即我只将“name”部分放在了user_name 的值中,而不是完整的电子邮件地址“name@example。 com”。输入完整的电子邮件地址后,电子邮件已发送!注意:我确实不需要需要设置perform_deliveries = true。而我此时正在运行 Rails 3.1.0。
  • 所以我遇到了同样的问题。不,它不在垃圾邮件中,是的,消息确认已发送,是的,我还提出了传递错误并将执行传递设置为 true。我们是否认为它最终神奇地起作用了?这里没有明确的答案...
【解决方案2】:

您需要使用true 而不是:true

:tls => true
...
config.action_mailer.perform_deliveries = true #try to force sending in development 
config.action_mailer.raise_delivery_errors = true 

【讨论】:

  • 不确定,但它们可以互换吗?我也尝试使用“true”而不是“:true”。
  • 它们可能是可互换的,因为库可能只是检查它们是否不是nil 而不是false
【解决方案3】:

如果有人遇到此问题,请在您的环境文件夹中的 development.rb 中设置“config.action_mailer.raise_delivery_errors = true”,然后再次尝试发送邮件。这应该会引发遇到的任何错误。

有时在 smtp_tls.rb 的第 8 行中,check_auth_args 方法只接受 2 个参数:用户和密码。如果您看到 'authtype' 参数,请删除它并重试。应该管用。

【讨论】:

  • 很棒的提示!另外值得注意的是,如果您在其他地方指定配置的某些部分,例如。使用我强烈推荐的dotenv,确保将任何可能包含特殊字符的值括在单引号中。
猜你喜欢
  • 2015-02-06
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2019-07-16
相关资源
最近更新 更多