邮件程序从服务器返回EOFError,但不从控制台返回

时间:2018-01-15 19:37:33

标签: ruby-on-rails ruby email smtp ruby-on-rails-5

我为我的rails app设置了一个邮件程序。我发誓它几天前正在工作,但现在我在尝试发送电子邮件时突然收到EOFError。我可以从我的rails控制台发送电子邮件,但每当我从rails服务器上尝试时,我都会收到以下极简主义错误:

  

EOFError:到达文件结尾

如果我的配置或连接问题出现问题,我认为它也无法在控制台上运行,所以我很困惑。可能是什么问题?

值得注意的是,我曾经在我正在使用的电子邮件地址中收到“可疑的登录尝试被阻止”消息,但我甚至不再收到该消息,只有EOFError。这对开发和生产都是如此。

我也尝试将我的端口更改为465,但没有任何改变。

Development.rb:

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

Production.rb:

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.default_url_options = { :host => 'http://website.com' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default :charset => "utf-8"
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    domain: 'gmail.com',
    user_name: 'address@gmail.com',
    password: 'Password',
    authentication: 'plain',
    enable_starttls_auto: true
  }

寄件人/ order_mailer.rb

class OrderMailer < ApplicationMailer
  default from: 'address@gmail.com'

  def contact(body)
    @body = body
    mail(to: "otheraddress@gmail.com", subject: "New")
  end
end

要测试,我分别在我的rails控制台和binding.pry服务器控制台中输入以下内容。前者成功发送电子邮件,后者发出EOFError。

OrderMailer.contact("body").deliver

2 个答案:

答案 0 :(得分:0)

根据Rails Guide,您应该通过param传递邮件正文,而不是操纵@body,例如:

  def contact(body)
    mail(to: "otheraddress@gmail.com", subject: "New", body: body)
  end

注意:不确定这是否会解决,但值得一试?

答案 1 :(得分:0)

我不认为我甚至接近解决这个错误。相反,我转而使用&#39; gmail&#39;宝石,我建议大家尝试建立一个电子邮件功能。根据我的口味,ActionMailer过于脆弱和不稳定。

这是我需要的所有代码:

require 'gmail'
gmail = Gmail.connect('youremail@ex.com', 'password')
email = gmail.compose do
  to "theiremail@ex.com"
  subject "New Message"
  body "Body"
end
gmail.deliver(email)