【问题标题】:Net::IMAP fails: Connection ClosedNet::IMAP 失败:连接已关闭
【发布时间】:2015-09-27 05:11:29
【问题描述】:

当我尝试打开与我的 Office 365 服务的连接时,它失败了:

2.2.0 :001 >     require 'net/imap'
=> true 
2.2.0 :002 >     port = '993'
=> "993" 
2.2.0 :003 >     imap = Net::IMAP.new('outlook.office365.com', port)

Net::IMAP::Error: connection closed
  from /Users/cameronaziz/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/net/imap.rb:1077:in `initialize'
  from (irb):3:in `new'
  from (irb):3

我还需要设置什么?

这是我控制器中的代码:

require 'net/imap'
port = '993'
imap = Net::IMAP.new('outlook.office365.com', port)
imap.authenticate('LOGIN', '***@***.com', '***')
imap.examine('INBOX')

在我实际设置用户名/密码之前,new 命令(与控制台相同)失败。

~~~~~~~

设置:ssl => true 有效。但是现在我仍然无法连接,因为我得到了:

控制器:

imap = Net::IMAP.new('outlook.office365.com', {:port => '993', :ssl => true } )
imap.authenticate('LOGIN', '***@***.com', '***')

查看错误:

Net::IMAP::BadResponseError in EmailsController#connect
 Command Argument Error. 11

视图中突出显示的行现在位于 authenticate 方法行上。

当我运行imap.capability:

 ["IMAP4", "IMAP4REV1", "AUTH=PLAIN", "AUTH=XOAUTH2", "SASL-IR", "UIDPLUS", "ID", "UNSELECT", "CHILDREN", "IDLE", "NAMESPACE", "LITERAL+"] 

【问题讨论】:

标签: ruby-on-rails ruby imap


【解决方案1】:

端口 993 通常是通过 SSL IMAP 连接的方式,因此您需要告诉 ruby​​ 您需要通过 SSL 连接,例如:

imap = Net::IMAP.new('outlook.office365.com', 993, ssl: true)

然后您可以使用登录或身份验证连接到您用户的邮箱。

ruby doc 声明如果您使用身份验证方法,则需要确保 imap 服务器可以支持“LOGIN”或“CRAM-MD5”,但在您提供的列表中我没有看到任何这些。

[“IMAP4”、“IMAP4REV1”、“AUTH=PLAIN”、“AUTH=XOAUTH2”、“SASL-IR”、“UIDPLUS”、“ID”、“UNSELECT”、“儿童”、“IDLE”、 "命名空间", "LITERAL+"]

所以登录outlook imap的唯一方法是使用map.login方法,例如: imap.login(login, password)

【讨论】:

  • 确实,你需要使用登录功能,而不是认证功能。
【解决方案2】:

IMAP 可能正在关闭连接,因为您没有及时(或根本没有)进行身份验证。

您应该使用Net::IMAP#loginNet::IMAP#authenticate 方法进行身份验证。

来自the docs

imap.authenticate('LOGIN', 'username', password)

这也应该有效:

imap.login('username', 'password')

请记住,LOGIN 在您的情况下可能不是身份验证方法。您可能需要先致电imap.capability 并确定是继续使用LOGIN 还是CRAM-MD5

【讨论】:

  • 更新了问题,我不知道在new方法失败时如何设置用户/通过
  • 查看文档,我不认为 Net::IMAP.new 将其 port 参数作为纯整数 - 它将其作为选项哈希的成员。你试过Net::IMAP.new('outlook.office365.com', { port: port })吗?
猜你喜欢
  • 2011-03-20
  • 2012-08-30
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2021-06-14
  • 2016-11-30
  • 1970-01-01
相关资源
最近更新 更多