如何检查邮件服务器是否使用SSL进行IMAP通信(Ruby)

时间:2014-11-13 00:56:44

标签: ruby email imap mail-server

我有一项服务,我需要用户通过IMAP访问他的电子邮件。

我需要用户提供user_namepasswordaddressport

我还需要知道IMAP连接是否使用SSL(enable_ssl可以是truefalse),我宁愿不要问我的用户。因为他可能不知道。

是否可以向邮件服务器查询是否使用SSL?

到目前为止我的解决方案已经尝试了两个选项。首先我尝试连接SSL,然后 - 如果失败 - 我尝试连接没有SSL。但是当我这样做时,一些邮件服务器会被淘汰,可能是因为第一次失败的连接因某种原因仍然打开。

这是我的工作(但笨拙)实施。

require 'net/imap'
class ImapMailss
  def self.test_connection(address, port, enable_ssl, user_name, password)
    imap = Net::IMAP.new(address, port, enable_ssl)
    imap.login(user_name, password)
    flags = imap.list("", "*")
  end
end

enable_ssl == nil
# First I try to connect with SSL
begin
  true_test = ImapMailss.test_connection(address, port, true, user_name, password)
  if true_test.class.to_s == "Array" # If the mailserver allows me access I get an array of folders like e.g.: [#<struct Net::IMAP::MailboxList attr=[:Hasnochildren], delim="/", name="Feedback requests">, #<struct Net::IMAP::MailboxList attr=[:Hasnochildren], delim="/", name="INBOX">, #<struct Net::IMAP::MailboxList attr=[:Haschildren, :Noselect], delim="/", name="[Gmail]">, #<struct Net::IMAP::MailboxList attr=[:Hasnochildren, :Sent], delim="/", name="[Gmail]/Sent Mail">]
    enable_ssl   = true
  end
rescue => e
  true_error = e
end

# Then I try to connect without SSL
if enable_ssl == nil
  begin
    false_test = ImapMails.test_connection(address, port, false, user_name, password)
  if false_test.class.to_s == "Array"
    enable_ssl   = false
  end
  rescue => e
    false_error = e
  end
end

0 个答案:

没有答案