我为我的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
答案 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)