8

我正在使用 Pony 邮件发送电子邮件(因为我永远无法让 ActionMailer 在我的本地 Windows 机器上工作)。

我的 user_mailer.rb 文件中的代码包括对 Pony.mail 方法的调用:

Pony.mail({
  :to => email_address, 
  :from => 'MyChairSales <support@mychairsales.com>', 
  :subject => subject, 
  :body => email_body, 
  :html_body => html_body,
  :via => :smtp,
  :via_options => {
    :address              => 'mail.mychairsales.com',
    :port                 => '25',
    :enable_starttls_auto => true,
    :user_name            => 'mychairs',
    :password             => 'thepassword',
    :domain               => "mychairsales.com" # the HELO domain provided by the client to the server
  } 
 })

这有效(我已使用此方法收到电子邮件),但现在失败并出现错误“主机名与服务器证书不匹配”。

这是堆栈跟踪的顶部:

["/usr/lib64/ruby/1.9.3/openssl/ssl-internal.rb:121:in `post_connection_check'",
"/usr/lib64/ruby/1.9.3/net/smtp.rb:585:in `tlsconnect'", "/usr/lib64/ruby/1.9.3
/net/smtp.rb:560:in `do_start'", "/usr/lib64/ruby/1.9.3/net/smtp.rb:519:in `start'", 
"/home4/mychairs/ruby/gems/gems/mail-2.4.4/lib/mail/network/delivery_methods
/smtp.rb:144:in `deliver!'", "/home4/mychairs/ruby/gems/gems/mail-2.4.4/lib
/mail/message.rb:245:in `deliver!'", "/home4/mychairs/ruby/gems/gems/pony-1.4/lib
/pony.rb:166:in `deliver'", "/home4/mychairs/ruby/gems/gems/pony-1.4/lib
/pony.rb:138:in `mail'", "/home4/mychairs/rails_apps/chairsales/app/mailers
/user_mailer.rb:32:in `send_mail'", "/home4/mychairs/rails_apps/chairsales/app/mailers
/user_mailer.rb:23:in `send_password_reset_email'",...

任何指导将不胜感激!

4

1 回答 1

21

有点晚了,但我也遇到了这个错误,但是使用了 Ruby Mail gem。如果您的 SMTP 服务器支持 TLS,它将尝试使用 TLS 并验证 SSL 证书。如果证书是为使用的主机名以外的主机名颁发的,或者如果证书无法通过身份验证(例如,如果它是自签名的并且您不信任 CA),那么它将失败并出现错误“主机名不匹配服务器证书”。

要绕过它,请使用 :openssl_verify_mode 选项。这可以设置为 OpenSSL::SSL::VERIFY_NONE 以不验证证书 - 但它仍会加密 SMTP 会话。或者 OpenSSL 库中还有其他可用选项。

使用您的示例,它将是:

Pony.mail({
  :to => email_address, 
  :from => 'MyChairSales <support@mychairsales.com>', 
  :subject => subject, 
  :body => email_body, 
  :html_body => html_body,
  :via => :smtp,
  :via_options => {
    :openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE, 
    :address              => 'mail.mychairsales.com',
    :port                 => '25',
    :enable_starttls_auto => true,
    :user_name            => 'mychairs',
    :password             => 'thepassword',
    :domain               => "mychairsales.com" # the HELO domain provided by the client to the server
  } 
 })

这也适用于 Mail gem。

于 2012-12-10T20:18:58.340 回答