Tag: imap

跨类的ruby变量范围

RuNubie在这里。 我有一个使用net/IMAP库登录gmail的类Login 。 发生的事情是我创建了该类的新实例,例如: a = Login.new(“username”, “gmail.com”, “passw”) 然后,我正在研究其他类,这些类会对邮箱做一些“东西”。 问题是我在Login中定义的@imap变量似乎已经消失了(由于我假设的范围)。 这就是在Login类中声明@imap方式: @imap = Net::IMAP.new(‘imap.gmail.com’,993,true,nil,false) 所以这: @today = Date.today @received_today = imap.search([“SINCE”, @today.strftime(“%d-%b-%Y”)]).count.to_s …返回错误。 这是我在玩这个时遇到的两个错误。 第一个是当我使用imap ,第二个是当我尝试使用@imap : NameError: undefined local variable or method `imap’ for # NoMethodError: undefined method `search’ for nil:NilClass 处理这种情况的最佳做法是什么? 是唯一的解决方案来定义我的方法,在我创建Net :: IMAP的新实例的同一个类中做“填充”? 将@imap声明为全局变量$imap是一种不好的做法吗? 如此困惑,我打赌答案很简单也很明显,但我只是没有看到它。 谢谢!

是否可以只下载没有附件的IMAP邮件?

我想用Net :: IMAP处理一堆我的电子邮件,但是我想跳过带附件的电子邮件,因为它们花了太长时间。 任何提示? 最终,我希望尽快下载电子邮件的所有文本和HTML内容。 现在,我一次获取一个UID,并将其与15个进程并行化(最大GMAIL允许),但是我对带有附件的消息进行了追踪。 imap = Net::IMAP.new(‘imap.gmail.com’, 993, usessl = true, certs = nil, verify = false) imap.authenticate(‘XOAUTH2′, user.email, user.token) mailbox = “[Gmail]/All Mail” imap.select(mailbox) message_id = 177 imap.fetch(message_id,’RFC822’)[0].attr[‘RFC822’] # this fetches the whole message, including attachment, which makes it slow…

使用Ruby为Gmail IMAP访问生成SASL XOAUTH2客户端响应

我正在尝试使用Ruby中的XOAUTH2通过IMAP访问我的Gmail电子邮件。 通过使用OAuth 2.0和oauth2 gem进行身份validation,我已经成功生成了访问令牌(和刷新令牌)。 我将使用gmail_xoauth通过IMAP访问Gmail。 因此,我现在需要根据Gmail XOAuth2文档生成SASL初始客户端响应: The SASL XOAUTH2 initial client response has the following format: base64(“user=” {User} “^Aauth=Bearer ” {Access Token} “^A^A”) using the base64 encoding mechanism defined in RFC 4648. ^A represents a Control+A (\001). 我不清楚我是如何在字符串中表示“Control + A”的。 我只是使用^A ? key = Base64.encode64(“user=#{email}^Aauth=Bearer #{access_token_obj.token}^A^A”) 这个python脚本使用\1代替^A 我也试过\001 。 无论我尝试什么,在使用结果validation(在irb中)时,我得到: >> imap = Net::IMAP.new(‘imap.gmail.com’, […]

Ruby IMAP登录错误exception

使用我的Ruby脚本: imap = Net::IMAP.new(‘imap.gmail.com’) imap.login(“some_email@host.com”, password) 我得到以下exception: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected hos has failed to respond. – connect(2) 怎么了?

Ruby on Rails,具有多个帐户的IMAP IDLE

我目前正在构建一个Ruby on Rails应用程序,允许用户通过Gmail登录,并且它与收件箱有一个持续的IDLE连接。 电子邮件进入Gmail收件箱后,需要立即进入应用程序。 目前我在实施方面有以下几点,我真正需要的一些问题有助于搞清楚。 目前,当Rails应用程序启动时,它会为每个用户创建一个线程,该线程在循环中进行身份validation和运行,以保持IDLE连接的活动状态。 每隔10-15分钟,线程将“弹跳IDLE”,以便传输一些数据以确保IDLE连接保持活动状态。 我认为的主要问题是可扩展性以及应用程序与Postgres的连接数量。 似乎每个线程需要连接到Postgres,这将在Heroku上受到最大连接数的限制(基本为20,之后为任何计划为500)。 我真的需要以下方面的帮助: 保持所有这些IDLE连接存活的最佳方法是什么,但减少数据库所需的线程和连接数量? 注意:如果Gmail的刷新令牌用完,可能会发生用户令牌刷新,因此需要访问数据库 对于如何实施这个有什么其他建议吗? 编辑: 我在这个问题中实现了类似于OP的东西: Ruby IMAP IDLE并发 – 如何解决?

Ruby IMAP IDLE并发 – 如何解决?

我正在尝试构建一个(私有的,现在的)Web应用程序,该应用程序将利用IMAP IDLE连接来显示人们到达时的电子邮件。 我很难弄清楚如何将它们组合在一起 – 以及它如何与我的Heroku RoR服务器配合使用。 我已经编写了一个用于连接到IMAP服务器和空闲的基本脚本,看起来像这样(简化): imap = Net::IMAP.new server, port, usessl imap.login username, password imap.select “INBOX” imap.add_response_handler do |response| if resp.kind_of(Net::IMAP::UntaggedResponse) && resp.name == “EXISTS” # New mail recieved. Ping back and process. end end imap.idle loop do sleep 10*60 imap.renew_idle end 这将与IMAP服务器建立一个连接并开始空闲。 如你所见,这是循环阻塞。 我希望我的用户可以同时空闲多个IMAP连接。 最初,我只想将它们中的每一个放在一个线程中,如下所示: Thread.new do start_imap_idling(server, port, usessl, username, password) […]

GMail线程,IMAP和Ruby

我正在使用Ruby IMAP库来获得GMail对话。 GMail线程对话的方式是通过“Message-ID”和“In-Reply-To”消息头。 例如: In-Reply-To: Message-ID: 我无法弄清楚如何有效地获取回复消息。 目前的方式: target = imap.search([“NOT”, “DELETED”]).each do |msg_id| uid = imap.fetch(message_id, “ENVELOPE”)[0].attr[“ENVELOPE”].message_id if uid == target m = imap.fetch(msg_id, “RFC822”)[0].attr[“RFC822”] end end 像这样顺序执行它需要很长时间,但我无法找出通过Message-ID标头搜索的正确咒语,而且我无法找到任何关于这是否可能的证据。

在rails中不兼容的字符编码 – 如何理智地失败/跳过?

我通过IMAP导入电子邮件主题时遇到问题。 我遇到了问题,我认为与电子邮件主题中的£符号有关。 花了几个小时游览各种答案我似乎无法找到任何有用的东西…如果我尝试以下… 使用ruby 2.1.2 views / emails / index =email.subject incompatible character encodings: ASCII-8BIT and UTF-8 =email.subject.scrub incompatible character encodings: ASCII-8BIT and UTF-8 = email.subject.encode!(‘UTF-8’, ‘UTF-8’, :invalid => :replace) invalid byte sequence in UTF-8 = email.subject.force_encoding(‘UTF-8′) invalid byte sequence in UTF-8 = email.subject.encode(“UTF-8”, invalid: :replace) “\xA3” from ASCII-8BIT to UTF-8 / xA3是’£’符号,不应该是那么不寻常。 我目前正在使用以下内容…… -if […]

IMAP闲置如何工作?

有人可以向我解释IMAP IDLE的工作原理吗? 它为每个打开的连接分配一个新进程吗? 我可以以某种方式使用eventmachine吗? 我正在尝试使用后台工作者在heroku上的ruby中实现它。 有什么想法吗?

SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv2 / v3读取服务器hello A.

我有一个ruby客户端,使用IMAP和SSL连接到Exchange服务器。 我使用Ruby Net :: IMAP库(它使用openssl)来连接。 它已经好几个月了。 交换服务器管理员从godaddy安装了新的证书,现在我收到此错误: SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A 有谁知道这个错误意味着什么? (我试过谷歌搜索) 我怀疑新证书存在问题导致此问题,但我不知道如何排除故障。 另外我知道你可以在使用NET:HTTP时禁用证书validation: http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl? 但我无法弄清楚如何使用NET:IMAP。 我想禁用它以查看这是否是问题。 至于代码我使用:我使用这个(或非常接近这个) http://github.com/look/fetcher/blob/master/lib/fetcher/imap.rb 我尝试更改为:@connection = Net :: IMAP.new(@ server,@ port,@ sss,nil,false) 这是堆栈跟踪 checking emails on: Tue Aug 17 20:48:01 +0000 2010 rake aborted! SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read […]