2010-02-15 40 views
2

我們有一位用戶,其郵件帳戶被垃圾郵件淹沒。我懷疑他發佈了大量的電子郵件帳戶,因此受到的限制比他只有一個或兩個地址多。如何通過紅寶石中的IMAP獲取電子郵件的收件人地址

我想敲一些代碼,它將掃描他的郵箱,並報告郵寄地址的數量(理想情況下是發送到他郵箱的郵箱地址,例如,如果他是BCC'd和收件人:是billg @ microsoft.com,我想知道哪個地址是他到達的地址)。

我可以得到To:如果它出現在信封中,但是如果不是,那麼我需要退回到像Cc這樣的替代方法:也許實際上在郵件標題中獲得正則表達式, 。我可以處理。我只是不確定如何拆分Ruby msg對象。

所以,對我來說或許一個更好的問題是,「知道我有一個從imap.fetch返回的對象msg,我該如何檢查可用的各種方法,如msg.to和msg.from?」

或許也是「我應該用花哨的郵件庫像Ruby的郵件?」

到目前爲止的代碼 - 我真的是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 
+0

這似乎是一個整潔的問題,也是一個很好的方向/方法來尋找電子郵件 - 但爲什麼你需要掃描用戶的郵件?什麼將發現所有用戶的電子郵件地址爲您做? –

+0

(1)它將幫助我確定他收到的垃圾郵件數量是否是他的組織在過去十年中將每個廢棄的電子郵件地址轉發給這位可憐的人的結果。 (2)它將爲我提供一個用於分析工作量隨時間變化的有用工具。我喜歡一個工具,告訴我「在最後一個(帳單)月份,誰通過電子郵件發送了我和誰發了電子郵件?」。爲什麼沒有這個插件?最後,(3)它會幫助我學習更多的Ruby。 –

回答

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 

信封是包含您試圖查看的所有數據的信息。

envelope.from [0] .mailbox被無@ domain.com發件人

envelope.to [0]而不@ domain.com第一接收者

envelope.subject是主題

等等等等

+0

謝謝。我仍然想知道如何可靠地查看這封郵件發送到哪個地址(例如,在BCC或郵件自動從一個地址轉發到另一個地址的情況下),爲此我需要更多地分離這些標頭;信封似乎並不包含這一點。我確實發現了 headers = imap.fetch(message_id,'RFC822.HEADER')[0] .attr ['RFC822.HEADER'] 這似乎很有幫助。 –

相關問題