Ruby 邮件程序出现 EOFError

Posted

技术标签:

【中文标题】Ruby 邮件程序出现 EOFError【英文标题】:Ruby mailer is coming up with an EOFError 【发布时间】:2011-03-03 14:29:13 【问题描述】:

我的控制器中的此代码出现 EOFError(文件结束错误)。出现错误的块位于UserMailer.deliver_message( 行的末尾,我不知道如何解决这个问题,我被困了大约 2 个月,建议使用此站点。请帮忙。

  def contact
      @title= "Contact Us"
      if request.post?
       @message= Message.new(params[:contact])
        if @message.valid?
           UserMailer.deliver_message(
            :message => @message
            )
          flash[:notice] = "Thank you for contacting us"
          redirect_to contact_url
         end
        end
      end

这是消息文件:

<%= @message.name %> has sent feedback or a question:

  Message: <%= @message.body %>

  From: <%= @message.email %>

这里是 UserMailer

class UserMailer < ActionMailer::Base

  def message(mail)
    subject    'Feedback/Questions'
    recipients 'Email@email'
    from       'webmaster'
    body        mail
  end
end

好吧,这是我得到的错误


PedalsController#contact 中的 EOFError

到达文件末尾


这是应用程序跟踪


/usr/lib64/ruby/1.8/net/protocol.rb:135:in `sysread'
/usr/lib64/ruby/1.8/net/protocol.rb:135:in `rbuf_fill'
/usr/lib64/ruby/1.8/timeout.rb:62:in `timeout'
/usr/lib64/ruby/1.8/timeout.rb:93:in `timeout'
/usr/lib64/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
/usr/lib64/ruby/1.8/net/protocol.rb:116:in `readuntil'
/usr/lib64/ruby/1.8/net/protocol.rb:126:in `readline'
/usr/lib64/ruby/1.8/net/smtp.rb:911:in `recv_response'
/usr/lib64/ruby/1.8/net/smtp.rb:897:in `getok'
/usr/lib64/ruby/1.8/net/smtp.rb:921:in `critical'
/usr/lib64/ruby/1.8/net/smtp.rb:895:in `getok'
/usr/lib64/ruby/1.8/net/smtp.rb:828:in `mailfrom'
/usr/lib64/ruby/1.8/net/smtp.rb:653:in `sendmail'
$HOME/blueflower/vendor/rails/actionmailer/lib/action_mailer/base.rb:684:in `perform_delivery_smtp'
/usr/lib64/ruby/1.8/net/smtp.rb:526:in `start'
$HOME/blueflower/vendor/rails/actionmailer/lib/action_mailer/base.rb:682:in `perform_delivery_smtp'
$HOME/blueflower/vendor/rails/actionmailer/lib/action_mailer/base.rb:523:in `__send__'
$HOME/blueflower/vendor/rails/actionmailer/lib/action_mailer/base.rb:523:in `deliver!'
$HOME/blueflower/vendor/rails/actionmailer/lib/action_mailer/base.rb:395:in `method_missing'
$HOME/blueflower/app/controllers/pedals_controller.rb:36:in `contact'

也许我错过了一些非常愚蠢的东西,但如果有人能回答这个问题,那就太棒了。另外,我的解决方法是什么?

【问题讨论】:

请编辑您的问题以包含来自您的Message 模型和您的UserMailer 的代码。 邮件发送者的电子邮件发送似乎有问题。您能否发布完整的错误信息,包括堆栈跟踪和您的电子邮件配置? 【参考方案1】:

如果 SMTP 服务器关闭,也会发生这种情况。 (我使用了一个名为 Sendgrid 的第 3 方邮件程序,这在它完全崩溃时发生过一次)

【讨论】:

对我们来说同样的情况。本来会扯掉我的头发 指定错误的端口也会导致这种情况发生【参考方案2】:

如果您使用“ZOHO”发送电子邮件,

我遇到这个问题的原因之一是。

    您应该使用有效的from 值。就我而言,我使用了一个不存在的电子邮件帐户 default from: "info@luxelectrical.net.au" 因此 zoho 服务器不允许发送导致 EOF 错误的电子邮件。 您应该在 ZOHO 上允许 IMAP 设置

【讨论】:

更具体到“来自值的有效值” - 它需要是来自连接到您用于通过 Zoho 发送的用户/通行证的帐户的发件人地址。不同的 Zoho 地址,即使使用具有不同登录凭据的同一个域,您仍然会收到疯狂的 EOF 错误(这毫无意义)。【参考方案3】:

好的,谢谢你们,我实际上在 UserMailer 中有格式错误的代码。我在 from 行中的实际代码有一个 包含电子邮件地址,并且在外面有发件人姓名。虽然这在我使用/工作的一些私人电子邮件服务器上有效,但它不适用于 Hostmonster。所以,对于将来最终使用 Hostmonster 的任何人,请保持邮件配置的一切简单(消息可能很复杂,但 SMTP 配置需要简单)。谢谢。

【讨论】:

嗨,你能解释一下“简单”是什么意思吗? 嘿@jaycode “简单”我的意思是,保持 SMTP 配置为纯文本,不要添加任何额外的代码或参数。【参考方案4】:

您必须对邮件服务器进行身份验证吗?

:authentication => :plain (如果是的话), :enable_starttls_auto => 真

【讨论】:

【参考方案5】:

你的 SMTP 有问题。

邮件程序通过 SMTP 连接到他,但无法正确关闭套接字。

【讨论】:

这取决于您的配置。您为此使用 sendmail 或 SMTP 连接? 使用了smtp,我试过其他的发送方式还是不行。 您能否通过此 SMTP 成功发送电子邮件。你的问题是配置。

以上是关于Ruby 邮件程序出现 EOFError的主要内容,如果未能解决你的问题,请参考以下文章

mailchimp 邮件程序不能在 ruby​​ on rails 中工作

Ruby on Rails:如何配置设计邮件程序?

Ruby on Rails:延迟的作业无法使用邮件程序并给出路由错误

Heroku 环境中的 Ruby on Rails 应用程序:“使用 Mailgun 发送电子邮件”错误

分析一个达到 100% CPU 且永不结束的 ruby​​ 应用程序

image_url 在动作邮件程序中不起作用(Ruby on rails)