新手问题 mail SSL smtp 发送不成功 (QQ/163)

CloneIDEA · 2013年04月23日 · 最后由 chriszou 回复于 2016年11月03日 · 9014 次阅读

首先gmail 没有问题, smtp 25 端口 也没问题 用的就是那个标准的 mail gem, 最后总是 read time out....

我看 qq 的说明 SSL 的 端口 是: 465/587, 我猜一个是 sslv2/v3 的 一个是给 tls 用的,

但是, 无论我怎么组合 port 和 enable_starttls_auto , 错误都是一样的,

还请用过 mail 这个 gem 的大侠指点 😄

require 'mail'
delivery_method  :smtp, {
                          :address => 'smtp.exmail.qq.com', 
                          :port => '465',
                          :domain => 'abc.com',
                          :user_name  => username,
                          :password   => passwd,
                          :authentication => :plain,
                          :enable_starttls_auto  => true
                        }
/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill': Net::ReadTimeout (Net::ReadTimeout)
y200/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill'
y200/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
y200/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
y200/lib/ruby/2.0.0/net/smtp.rb:931:in `recv_response'
y200/lib/ruby/2.0.0/net/smtp.rb:554:in `block in do_start'
y200/lib/ruby/2.0.0/net/smtp.rb:941:in `critical'
y200/lib/ruby/2.0.0/net/smtp.rb:554:in `do_start'
y200/lib/ruby/2.0.0/net/smtp.rb:519:in `start'
y200/lib/ruby/gems/2.0.0/gems/mail-2.5.3/lib/mail/network/delivery_methods/smtp.rb:136:in `deliver!'
y200/lib/ruby/gems/2.0.0/gems/mail-2.5.3/lib/mail/message.rb:245:in `deliver!'
共收到 6 条回复

这种 SMTP 网关配置的问题,只有不停的试,或者能直接 Google 到具体配置。 这里有一篇用 Telnet 调试 SMTP 网关的帖子,不失为一个好办法,你可以借鉴 http://ruby-china.org/topics/8918

#1楼 @lgn21st

谢谢,问题最终解决了, mail的doc 不完整,实际上还有更多的控制参数,写在源码里...

在配置里加了这么一行,就行了

:openssl_verify_mode => 'none',

对于这个参数是这么解释的: :openssl_verify_mode setting. Its value may be either an OpenSSL verify mode constant (OpenSSL::SSL::VERIFY_NONE), or a string containing the name of an OpenSSL verify mode (none, peer, client_once, fail_if_no_peer_cert).

#2楼 @CloneIDEA 我依照你的建议还是得到readtimeout的错误。配置如下

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => "smtp.qq.com",
  :port => "465",
  :domain => "qq.com",
  :authentication => "login",
  :user_name => "mail",
  :password => "password",
  #:enable_starttls_auto => true,
  :openssl_verify_mode => 'none'

}

#3楼 @hiveer

我是直接用的 mail 这个 gem , 我看你用的是 rails action mailer 的配置, 我猜可能是 action mailer 并没有把所有的配置都pass给 mail这个gem, 你可以看一下源码.... 或者直接用 mail 这个 gem 来实验一下

#5楼 @u1430840971 正解!这个才是关键!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册