【问题标题】:Mailer returning EOFError from server but not from console邮件程序从服务器返回 EOFError 但不是从控制台返回
【发布时间】:2018-06-24 11:23:29
【问题描述】:

我为我的 rails 应用程序设置了一个邮件程序。我发誓几天前它还在工作,但现在当我尝试发送电子邮件时突然收到 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
  }

ma​​ilers/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

【问题讨论】:

  • 在开发中将身份验证类型从“普通”更改为“登录”是否会影响?
  • 它是否在寻找(但未能找到)邮件视图或布局或其他文件?
  • @rantingsonrails 我将“plain”更改为“login”,现在它可以用于开发,但不能用于生产。
  • @JoeMorano dev 和 prod 现在都在使用 587 端口吗?
  • @JoeMorano 另一个生产尝试的猜测config.action_mailer.default_url_options = { host: 'website.com', protocol:'http' }

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


【解决方案1】:

我认为我什至没有接近解决这个错误。相反,我转而使用“gmail”gem,我会向所有尝试构建电子邮件功能的人推荐它。 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)

【讨论】:

    【解决方案2】:

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

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

    注意:不确定这是否能解决问题,但值得一试吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      相关资源
      最近更新 更多