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:延迟的作业无法使用邮件程序并给出路由错误
Heroku 环境中的 Ruby on Rails 应用程序:“使用 Mailgun 发送电子邮件”错误