Rails应用使用Zoho Mail发送邮件时遭遇EOFError - end of file reached错误求助
解决Rails + Zoho Mail发送邮件的EOFError问题
碰到这个EOFError - end of file reached通常是SMTP连接在握手或通信过程中异常中断了,结合你的配置来看,大概率是SSL/TLS参数冲突导致的,咱们一步步来解决:
1. 修复SMTP配置的参数冲突
你的配置里同时设置了:ssl => true、:tls => true和:enable_starttls_auto => true,但Zoho的SMTP端口对应的加密规则是不一样的,这几个参数混着用会直接导致连接异常:
- 465端口:属于直接SSL加密的SMTPS端口,不需要STARTTLS握手流程,所以只保留
:ssl => true即可,删掉另外两个TLS相关参数。 - 587端口:属于需要通过STARTTLS升级加密的端口,这时候要保留
:enable_starttls_auto => true和:tls => true,去掉:ssl => true。
修改后的配置示例(二选一即可)
465端口配置方案:
config.action_mailer.smtp_settings = { :address => "smtp.zoho.com", :port => 465, :user_name => 'info@mydomainname.com', :password => 'zoho_mail_password', :authentication => :login, :ssl => true }
587端口配置方案:
config.action_mailer.smtp_settings = { :address => "smtp.zoho.com", :port => 587, :user_name => 'info@mydomainname.com', :password => 'zoho_mail_password', :authentication => :login, :enable_starttls_auto => true, :tls => true }
2. 排查其他潜在问题
如果调整配置后还是报错,检查下面几个关键点:
- 确认Zoho SMTP服务已开启:登录Zoho邮箱后台,进入「设置」→「邮件账户」→「POP/IMAP/SMTP」,确保SMTP服务处于启用状态。
- 验证密码有效性:如果你的Zoho账户开启了两步验证(2FA),必须使用应用专用密码,不能用日常登录密码;未开启2FA则直接使用登录密码即可。
- 测试网络连通性:在终端执行
telnet smtp.zoho.com 465或telnet smtp.zoho.com 587,测试端口是否能正常连通,如果连不上,可能是本地防火墙或服务器安全组拦截了这些端口。
调整完配置后重启Rails服务器,再测试邮件发送,应该就能解决这个EOFError了。
内容的提问来源于stack exchange,提问作者r3b00t
相关产品推荐
相关产品推荐

