2012-11-16 9 views
6

私はポニーメールを使用して電子メールメッセージを送信しています(私のローカルWindowsボックスでは動作しないためです)。これは、働いていた(私はこの方法を使用して電子メールを受け取っている)が、現在のエラー「ホスト名で失敗しているホスト名がサーバー証明書と一致しません - 電子メールを送信できません

Pony.mail({ 
    :to => email_address, 
    :from => 'MyChairSales <[email protected]>', 
    :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 
    } 
}) 

:私のuser_mailer.rbファイル内

コードがPony.mailメソッドへの呼び出しを含めますサーバー証明書と一致しません "。ここで

は、スタックトレースの先頭です:

["/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'",... 

任意の指導をいただければ幸いです!

+0

私は誰も気にすることがない質問をする才能を持っています。 :) – vbsql7

答えて

17

少し遅れましたが、このエラーはRuby Mail gemでも発生しました。 SMTPサーバーがTLSをサポートしている場合は、TLSを使用してSSL証明書を認証しようとします。証明書が使用されたホスト名以外のホスト名に対して発行された場合、または証明書が認証されない場合(たとえば、自己署名されていてCAを信頼しない場合など)、 "hostname does not matchサーバー証明書 "を作成します。

回避するには、:openssl_verify_modeオプションを使用します。 OpenSSL :: SSL :: VERIFY_NONEに設定すると、証明書の検証を行わなくても、SMTPセッションを暗号化します。あるいは、OpenSSLライブラリ内で利用可能な他のオプションがあります。あなたの例を使用して

、それは次のようになります。

Pony.mail({ 
    :to => email_address, 
    :from => 'MyChairSales <[email protected]>', 
    :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 
    } 
}) 

これはまた、同様のメール宝石のために動作します。

+1

は魅力のように機能し、セキュリティ上の問題はありますか? –

+1

はい!セキュリティ上の問題があります。これにより、あなたとあなたのサーバーとの間にいるインターネット上の誰もがあなたの接続を盗み、あなたのデータを読むことができます。安全なアプリケーションでこれを行うべきではありません。有効な証明書を発行するサーバーでのみ作業する必要があります。 – Brad

+1

はい、これは当てはまります。途中の攻撃で人を防ぐために通信しているサーバーのIDを確認する必要がある場合は、ホストの検証をオフにしないでください。 「有効な」証明書を発行するが、何らかの理由でホスト名と一致しない第三者と対処している場合、これが必要でない可能性があります。明らかにベストプラクティスではありません。 –

関連する問題