2012-11-16 47 views
6

Tôi đang sử dụng thư Pony để gửi thư email (vì tôi không bao giờ có thể làm ActionMailer hoạt động trên hộp Windows cục bộ của mình).tên máy chủ không khớp với chứng chỉ máy chủ - không thể gửi email

Các mã trong tập tin user_mailer.rb tôi bao gồm cuộc gọi này với phương pháp Pony.mail:

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 
    } 
}) 

này đang làm việc (tôi đã nhận được email sử dụng phương pháp này) nhưng bây giờ là không có lỗi "hostname không khớp với chứng chỉ máy chủ ".

Đây là đỉnh của stack trace:

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

Bất kỳ hướng dẫn sẽ được đánh giá rất nhiều!

+0

Tôi có tài năng để đặt câu hỏi mà không ai quan tâm. :) – vbsql7

Trả lời

17

Một chút trễ nhưng tôi cũng gặp phải lỗi này nhưng với đá quý Ruby Mail. Nếu máy chủ SMTP của bạn hỗ trợ TLS, máy chủ sẽ cố gắng sử dụng TLS và xác thực chứng chỉ SSL. Nếu chứng chỉ được cấp cho tên máy chủ khác với tên được sử dụng hoặc nếu chứng chỉ không thể được xác thực (ví dụ nếu nó được tự ký và bạn không tin cậy CA), thì nó sẽ không thành công với lỗi "tên máy chủ không khớp chứng chỉ máy chủ ".

Để khắc phục sự cố, hãy sử dụng tùy chọn: openssl_verify_mode. Điều này có thể được đặt thành OpenSSL :: SSL :: VERIFY_NONE để không xác minh chứng chỉ - nó vẫn sẽ mã hóa phiên SMTP mặc dù. Hoặc có các tùy chọn khác có sẵn trong thư viện OpenSSL.

Sử dụng ví dụ của bạn, nó sẽ là:

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 
    } 
}) 

này cũng làm việc cho viên ngọc Thư là tốt.

+1

hoạt động như một sự quyến rũ, bất kỳ vấn đề bảo mật nào? –

+1

CÓ! Có vấn đề bảo mật! Điều này cho phép bất kỳ ai trên internet giữa bạn và máy chủ của bạn lấy cắp kết nối của bạn và đọc dữ liệu của bạn. Bạn KHÔNG BAO GIỜ làm điều này trong một ứng dụng an toàn - bạn chỉ nên làm việc với các máy chủ phát hành chứng chỉ hợp lệ. – Brad

+1

Vâng, điều này đúng. Nếu bạn cần xác minh danh tính của máy chủ bạn đang liên lạc để ngăn chặn người đàn ông trong các cuộc tấn công ở giữa thì bạn không nên tắt xác minh máy chủ. Có thể có trường hợp điều này là không cần thiết hoặc có thể nếu bạn đang giao dịch với bên thứ ba phát hành chứng chỉ "hợp lệ" nhưng chúng không khớp với tên máy chủ vì một số lý do. Rõ ràng không phải là thực hành tốt nhất. –

Các vấn đề liên quan