Rails 4:EOFError:仅在开发中的任何电子邮件后到达文件结尾

时间:2016-04-11 14:13:10

标签: ruby-on-rails email heroku devise

我有rails app,它使用devise ofr身份验证和sidekiq用于后台电子邮件作业。突然之间,仅在开发中,我收到以下与尝试从应用程序发送电子邮件相关的错误(例如,设计忘记密码)

  ActionMailer::Base.default :from => 'slfwalsh@gmail.com'

    config.action_mailer.delivery_method = :smtp
    config.action_mailer.perform_deliveries = true
    config.action_mailer.raise_delivery_errors = true
    config.action_mailer.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => 587,
      :domain => '@gmail.com',
      :user_name => "xxxxx@gmail.com",
      :password => "xxxxxxxx",
      :authentication => 'plain',
      :enable_starttls_auto => true
   }

    config.action_mailer.default_url_options = { :host => 'localhost:3000' }

奇怪的是,生产中的应用程序正在运行(heroku使用sendgrid设置)。我没有更改任何开发电子邮件设置....

{{1}}

我找不到任何可以在网上解决的问题。另外我注意到我在开发中使用类似设置的所有应用程序都会抛出相同的错误。我尝试了不同的电子邮件地址和密码(再次使用gmail),没有运气......

5 个答案:

答案 0 :(得分:3)

对于像Aleksey那样想知道问题是如何解决的人,他添加了一个有效的域名。从domain: '@gmail.com'domain: "myprojectdomain.com"

答案 1 :(得分:1)

对于那些被卡住的人....这有用,但我不明白为什么。

 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: "myprojectdomain.com",
  user_name: "xxxx@gmail.com",
  password: "xxxx",
  authentication: 'plain',
  enable_starttls_auto: true
 }

 config.action_mailer.default_url_options = { :host => 'localhost:3000' }

答案 2 :(得分:1)

对我来说,在我的Devise配置文件中设置发件人电子邮件解决了这个问题。

答案 3 :(得分:0)

我有同样的问题。问题是我将Imap主机设置(imap.gmail.com)用于Smtp主机设置(smtp.gmail.com)。

这是我的解决方法

我只是更换了主机

imap.gmail.com

使用

smtp.gmail.com

仅此而已。

我希望这会有所帮助。

答案 4 :(得分:0)

从EC2迁移到ECS部署后,我遇到EOFError: end of file reached问题。

以下是诊断问题的捷径。

$ telnet smtp.sendgrid.net 587
Trying 167.89.118.51...
Connected to smtp.sendgrid.net.
Escape character is '^]'.
220 SG ESMTP service ready at ismtpd0009p1las1.sendgrid.net
...

如果在连接后看不到来自服务器的220问候语,则可能表示客户端和SMTP服务器之间有东西阻塞了连接。在我们的例子中,是AppMesh代理阻止了smtp。

下一个测试是

openssl s_client -crlf -starttls smtp -connect smtp.sendgrid.net:587

其中应显示很多有关SSL的信息。

如果您无法通过此测试看到预期的信息,请先检查您的基础架构,这两种smtp设置都将无效。

请注意,58725的标准替代品。期望客户端发送STARTTLS以获得SSL连接。而另一种选择-465默认情况下将与SSL连接。

更多详细信息:https://aws.amazon.com/premiumsupport/knowledge-center/smtp-connectivity-timeout-issues-ses/