ruby-on-rails - 使用 Rails 邮件程序的 Net::OpenTimeout(执行已过期)异常

标签 ruby-on-rails smtp actionmailer

我在生产服务器上发送电子邮件时遇到问题。
当邮件程序处理新消息时,调用异常 Net::OpenTimeout (execution expired)
我的 smtp 设置:

#settings.yml
production:
  smtp:
    address:        smtp.gmail.com
    port:           587
    domain:         mydomain.net
    user_name:      username@gmail.com
    password:       password
    authentication: plain
    enable_starttls_auto: true

我的环境设置:
  #production.rb
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = Settings.smtp.symbolize_keys

从日志:
Sent mail to username@gmail.com (30010.1ms)
I, [2014-10-15T12:59:22.371563 #19779]  INFO -- : Completed 500 Internal Server Error in 30051ms
F, [2014-10-15T12:59:22.373984 #19779] FATAL -- :.
Net::OpenTimeout (execution expired):
app/controllers/subscribers_controller.rb:9:in `create'

最佳答案

默认情况下,我的 VPS 提供商 (DigitalOcean) 在 IPv6 上阻止了 SMTP :(

我必须使用下一个配置在服务器上禁用 IPv6:

# /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1 
net.ipv6.conf.default.disable_ipv6 = 1 
net.ipv6.conf.lo.disable_ipv6 = 1 

应用设置:
$ sysctl -p

取消注释 /etc/gai.conf 中的下一行更喜欢 IPv4:
precedence ::ffff:0:0/96 100

并从 /etc/resolv.conf 中删除 IPv6 DNS :
nameserver 2001:4860:4860::8844 # remove lines like this 
nameserver 8.8.8.8 #don't remove

然后重启应用程序和 Nginx(可选)

关于ruby-on-rails - 使用 Rails 邮件程序的 Net::OpenTimeout(执行已过期)异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388090/

相关文章:

c# - MailKit SMTPUTF8 错误

ruby-on-rails-4 - ActionView::Template::Error: 缺少要链接的主机!请提供 :host 参数,设置 default_url_options[:host],或设置 :only_path 为 true

ruby-on-rails - Rails Controller 中的客户端 SSL 身份验证

ruby-on-rails - 使用 rspec 通过正则表达式检查标签的属性

ruby-on-rails - Ruby 哈希长度或大小不返回任何内容

ruby-on-rails - RSpec Mailer 测试匹配失败

ruby-on-rails - 在 ActionMailer 中暂停发送电子邮件

ruby-on-rails - 将基于 cloud9 的 rails 应用程序部署到本地 linux 服务器

php - 通过 SMTP 使用 Codeigniter 3.0.3 发送电子邮件

JavaMail 一段时间后停止发送邮件