2

我们有一个用户的邮件帐户被垃圾邮件淹没。我怀疑他拥有大量的电子邮件帐户,因此他可能只使用一两个地址。

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

我可以得到 To: 如果它存在于信封中,但如果没有,那么我需要使用 Cc: 之类的替代方法,并且可能实际上在消息标头中获取 regex-y 到传递此消息的 ID。我可以处理。我只是不确定如何拆分 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
4

1 回答 1

4

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

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

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

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

信封.subject 是主题

等等等等

于 2010-02-15T13:07:32.403 回答