【问题标题】:How to get the recipient address of an email via IMAP in Ruby如何在 Ruby 中通过 IMAP 获取电子邮件的收件人地址
【发布时间】:2011-01-16 20:12:58
【问题描述】:

我们有一个用户的邮件帐户被垃圾邮件淹没。我怀疑他使用了大量的电子邮件帐户,因此可能会受到比他只有一个或两个地址更多的影响。

我想敲出一些代码来扫描他的邮箱并报告邮寄到的地址数量(理想情况下是那些发送到他邮箱的地址,例如,如果他是密件抄送的,而收件人:是 billg@microsoft .com,我想知道他收到的地址是哪个)。

我可以得到 To: 如果它存在于信封中,但如果没有,那么我需要使用 Cc: 之类的替代方法,并且可能实际上在消息标头中获取 regex-y 以标识为谁传递了此消息。我可以处理。我只是不确定如何拆分 Ruby msg 对象。

所以也许对我来说一个更好的问题是,“知道我有一个从 imap.fetch 返回的对象 msg,我如何检查各种可用的方法,例如 msg.to 和 msg.from?”

也许还有“我应该使用像 Ruby's Mail 这样的精美邮件库吗?”

到目前为止的代码 - 我真的是 Ruby 新手,好吗?

imap = Net::IMAP.new(server)
imap.login(user, pass)
imap.select(folder)

imap.search(['ALL']).each do |message_id|
  msg = imap.fetch(message_id,'ENVELOPE')[0].attr['ENVELOPE']
  if msg.to
    puts "#{msg.to[0].mailbox}@#{msg.to[0].host}: \t#{msg.from[0].name}: \t#{msg.subject}"
  else 
#    puts msg.inspect
    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
    puts msg.inspect
    quit
  end
#   p msg.methods
end

【问题讨论】:

  • 这似乎是一个很好的问题,也是查找电子邮件的一个很好的方向/方法——但是为什么需要扫描用户的电子邮件呢?找出所有用户的电子邮件地址将为您做什么?
  • (1) 这将帮助我确定他收到的垃圾邮件数量是否是由于他的组织在过去十年中将每个废弃的电子邮件地址都转发给了这个可怜的家伙。 (2) 它将为我提供一个有用的工具来分析一段时间内的工作量。我喜欢一个工具,它可以告诉我“在上个月(计费),谁给我发了电子邮件,我给谁发了电子邮件?”。为什么没有插件呢?最后,(3) 它将帮助我学习更多 Ruby。

标签: ruby imap rfc822


【解决方案1】:

我为我拥有的脚本做了类似的事情。它可能会帮助你。要记住的关键是所有返回的元素都是数组,即使它们只有 1 个元素。

imap.search(["ALL"]).each do |msg|
  envelope = imap.fetch(msg, "ENVELOPE")[0].attr["ENVELOPE"]
  sender = envelope.from[0].mailbox # This will give you the mailbox name without @domain.com
  recipient = envelope.to[0].mailbox # You can also do envelope.to.each { operations } to get the full list of recipients
end

信封包含您要查看的所有数据。

envelope.from[0].mailbox 是没有@domain.com 的发件人

envelope.to[0] 是第一个没有@domain.com 的收件人

envelope.subject 是主题

等等等等

【讨论】:

  • 谢谢。我仍在尝试查看如何可靠地查看此邮件发送到的地址(即,在密件抄送或消息从一个地址自动转发/别名到另一个地址的情况下),为此我需要将标题分开更多;信封似乎没有包含它。我确实发现了 headers = imap.fetch(message_id, 'RFC822.HEADER')[0].attr['RFC822.HEADER'] 这似乎很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 2017-04-25
  • 2011-03-27
  • 2022-06-16
  • 1970-01-01
相关资源
最近更新 更多