gpt4 book ai didi

ruby - 使用 ruby​​-gmail 读取 Gmail 邮件

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:46 25 4
gpt4 key购买 nike

我正在从 ruby-gmail gem 中寻找一个实例方法,它可以让我阅读:

  • 正文或者

  • 主题

Gmail 邮件。

查看文档后,发现here ,我找不到任何东西!?

Gmail::Message 类部分中有一个.message 实例方法;但它只返回,因为没有更好的术语,正文的电子邮件“mumbo-jumbo”。

我的尝试:

#!/usr/local/bin/ruby
require 'gmail'

gmail = Gmail.connect('username', 'password')

emails = gmail.inbox.emails(:from => 'someone@mail.com')

emails.each do |email|
email.read
email.message
end

现在:

  1. email.read 工作
  2. email.message 返回上面提到的“mumbo-jumbo”

有人在 SO 上问过这个问题,但没有得到答案。

最佳答案

这可能不是您问题的确切答案,但我会告诉您我过去所做的事情。我尝试使用 ruby​​-gmail gem,但它在阅读邮件方面没有做我想做的事情。或者,至少,我无法让它工作。相反,我使用内置的 Net::IMAP 类登录并获取消息。

require 'net/imap'
imap = Net::IMAP.new('imap.gmail.com',993,true)
imap.login('<username>','<password>')
imap.select('INBOX')
subject_id = search_mail(imap, 'SUBJECT', '<mail_subject>')
subject_message = imap.fetch(subject_id,'RFC822')[0].attr['RFC822']
mail = Mail.read_from_string subject_message
body_message = mail.html_part.body

从这里您的消息存储在 body_message 中并且是 HTML。如果您想要整个电子邮件正文,您可能需要学习如何使用 Nokogiri 来解析它。如果您只想要一小部分您知道周围一些字符的消息,您可以使用正则表达式来找到您感兴趣的部分。

我确实找到了 one page与讨论使用 ruby​​-gmail 阅读 Gmail 邮件的 ruby​​-gmail gem 相关联。我今晚粗略地尝试测试它,但显然谷歌提高了我帐户的安全性,如果不修改我的 Gmail 配置(根据我收到的警告电子邮件),我无法使用 irb。所以我无法验证该页面上的内容,但正如我提到的,我过去的尝试没有结果,而 Net::IMAP 对我有用。

编辑:我找到了 this , 这很酷。您将需要添加

require 'cgi'

到你的类(class)。

我能够以这种方式实现它。在我得到我的 body_message 之后,从该链接页面调用 html2text 方法(我稍微修改并包含在下面,因为您必须将 body_message 转换为字符串):

plain_text = html2text(body_message)
puts plain_text #Prints nicely formatted plain text to the terminal

这里是稍微修改过的方法:

def html2text(html)
text = html.to_s.
gsub(/(&nbsp;|\n|\s)+/im, ' ').squeeze(' ').strip.
gsub(/<([^\s]+)[^>]*(src|href)=\s*(.?)([^>\s]*)\3[^>]*>\4<\/\1>/i,
'\4')

links = []
linkregex = /<[^>]*(src|href)=\s*(.?)([^>\s]*)\2[^>]*>\s*/i
while linkregex.match(text)
links << $~[3]
text.sub!(linkregex, "[#{links.size}]")
end

text = CGI.unescapeHTML(
text.
gsub(/<(script|style)[^>]*>.*<\/\1>/im, '').
gsub(/<!--.*-->/m, '').
gsub(/<hr(| [^>]*)>/i, "___\n").
gsub(/<li(| [^>]*)>/i, "\n* ").
gsub(/<blockquote(| [^>]*)>/i, '> ').
gsub(/<(br)(| [^>]*)>/i, "\n").
gsub(/<(\/h[\d]+|p)(| [^>]*)>/i, "\n\n").
gsub(/<[^>]*>/, '')
).lstrip.gsub(/\n[ ]+/, "\n") + "\n"

for i in (0...links.size).to_a
text = text + "\n [#{i+1}] <#{CGI.unescapeHTML(links[i])}>" unless
links[i].nil?
end
links = nil
text
end

您还在您的原始问题中提到,您在这一步中遇到了麻烦:

email.message *returns mumbo-jumbo*

如果 mumbo-jumbo 是 HTML,您可能只需将现有代码与此 html2text 方法一起使用,而不是像我在发布原始答案时所讨论的那样切换到 Net::IMAP

关于ruby - 使用 ruby​​-gmail 读取 Gmail 邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com