Rails开发环境用Mandrill发邮件失败:SocketError域名解析异常
解决本地Mandrill发送邮件时的SocketError问题
嘿,我一眼就揪出了你配置里的一个低级但致命的小问题——这几乎肯定是开发环境报错的根源!
你看你的development.rb里的SMTP配置:
config.action_mailer.smtp_settings = { user_name: 'my_user_name', password: 'my_password', domain: 'localhost:3000', address: 'smtp.mandrillapp.com"', # 这里多了一个多余的闭合双引号! port: 587, authentication: :plain, enable_starttls_auto: true }
address字段末尾多了一个不必要的双引号,导致Ruby尝试解析的主机名是smtp.mandrillapp.com"(带引号的),DNS自然找不到这个无效的域名,于是抛出了getaddrinfo: nodename nor servname provided, or not known错误。
修复步骤
- 把
address改成正确的格式:address: 'smtp.mandrillapp.com' - 重启你的Rails开发服务器,再测试邮件发送功能。
如果修复后还是有问题,试试这些调试方向
- 验证网络连通性:在终端执行
ping smtp.mandrillapp.com,看本地DNS能不能正常解析这个域名,网络能不能连通Mandrill的服务器。 - 测试TCP连接:用
telnet smtp.mandrillapp.com 587命令,检查本地能不能和Mandrill的SMTP端口建立连接(如果telnet不通,可能是防火墙、代理或者网络环境的问题)。 - 核对配置一致性:把开发环境的SMTP配置和生产环境(通过Figaro加载的)逐行对比,确保除了环境相关的域名,其他参数(比如端口、认证方式)完全一致。
至于为什么生产环境正常?因为你用Figaro加载application.yml里的变量,那些变量里应该没有这个多余的引号,所以配置是正确的。
内容的提问来源于stack exchange,提问作者mohnstrudel
相关产品推荐
相关产品推荐

