Имя хоста не совпадает с сертификатом сервера - не может отправить электронное письмо
Я использую почту 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'",...
Любое руководство будет с благодарностью!
1 ответ
Немного поздно, но я также столкнулся с этой ошибкой, но с гемом Ruby Mail. Если ваш SMTP-сервер поддерживает TLS, он попытается использовать TLS и аутентифицировать сертификат SSL. Если сертификат выдан для имени хоста, отличного от используемого, или если сертификат не может быть аутентифицирован (например, если он самоподписан и вы не доверяете ЦС), то произойдет сбой с ошибкой "имя хоста не совпадает сертификат сервера ".
Чтобы обойти это, используйте параметр: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
}
})
Это также работает для самоцвета Почты.