我正在Ubuntu 12.04 TLS VPS上使用Ruby MRI 2.0.0和Rails 3.2.12,并试图在我的应用程序中设置邮箱通知.我的网络主机是OVH.

我的SMTP设置:

config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :user_name            => 'sender@gmail.com',
  :password             => 'secret',
  :authentication       => 'plain',
  :enable_starttls_auto => true
}

使用RAILS_ENV=production rails console:

class MyMailer < ActionMailer::Base
  def test_email
    sender     = "sender@gmail.com"
    receiver   = "receiver@example.com"
    mail from: sender, to: receiver, subject: "Hello!", body: "World!!"
  end
end
 => nil

MyMailer.test_email.deliver

输出:

Net::OpenTimeout: execution expired
    from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `initialize'
    from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `open'
    from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:540:in `tcp_socket'
    from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:550:in `block in do_start'
    from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:549:in `do_start'
    from ~/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:519:in `start'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/network/delivery_methods/smtp.rb:144:in `deliver!'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:2034:in `do_delivery'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `block in deliver'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:415:in `block in deliver_mail'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `block in instrument'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `instrument'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:413:in `deliver_mail'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `deliver'
    from (irb):28
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands/console.rb:47:in `start'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands/console.rb:8:in `start'
    from ~/.rvm/gems/ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'2.0.0p0 :029 >

我try 了以下方法:

  • 几天前,exception_notification颗Ruby 被添加到安装中.我试着在Gemfile中 comments 它的行以及它的匹配配置,然后运行bundle install.重新启动服务器后,问题仍然存在,即使我删除并重新创建了gemset.
  • 在虚拟机上进行测试(与VPS的设置完全相同,包括iptables规则):works
  • 禁用iptables规则:does not work
  • 使用openssl:works从VPS手动连接到Gmail(因此这不是防火墙问题——请参见此处:Connecting to smtp.gmail.com via command line);
  • 在Gmail帐户选项中启用IMAP(已禁用):does not work
  • 使用不同的Gmail账号:does not works
  • 用Ruby 1.9.3取代Ruby 2.0.0
  • 升级至Rails 3.2.13

有人知道如何解决这个问题吗?

谢谢

推荐答案

该问题是由于生产服务器上的IPv6配置错误造成的,现已修复.

Ruby-on-rails相关问答推荐

如何在 JR gem 中指定每个资源的最大页面大小配置

为什么在使用 Ruby on Rails 时我的徽标没有出现在 Bootstrap 导航栏中?

Ruby - 如何删除目录中早于 X 天的所有文件?

如何在测试期间为 Rails 应用程序启用 Rails.cache 会话对象

为什么有时会出现类型错误没有将 StringIO 隐式转换为 String?Ruby /导轨

Rails 7 共享刺激控制器功能

Ruby on Rails 中的多种布局

为 has_attached_file 等活动记录属性创建类方法

Ruby on Rails 取消首字母大写

从 Authlogic 迁移到 Devise

Rails ActiveRecord:验证单个属性

搭建脚手架时建立关系

Rails 3:验证组合值

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

设计记住我和会话

快速添加链接[:notice]

如何在 Ruby 中搜索数组?

如何为 Rails 迁移定义布尔字段

从模型中获取验证

我什么时候需要在 Rails 中重新启动服务器?