2010-02-15 3 views
2

У нас есть пользователь, чья почтовая учетная запись заполняется спамом. Я подозреваю, что он поместил большое количество учетных записей электронной почты и, следовательно, подвержен большему, чем может быть, с одним или двумя адресами.Как получить адрес получателя электронной почты через IMAP в Ruby

Я хочу сбить код, который будет сканировать его почтовый ящик и сообщать о количестве адресов, которые были отправлены по почте (в идеале, те, которые доставлены в его почтовый ящик, например, если он BCC'd и To: is billg @ microsoft.com, я хотел бы знать, какой адрес был тем, который достиг его).

Я могу получить To: если он присутствует в конверте, но если нет, то мне нужно вернуться к альтернативам, как Cc: и, возможно, получить в regex-y заголовки сообщений ID, кому это сообщение доставлено , Я могу справиться с этим. Я просто не уверен, как разделить объект Ruby msg.

Так что, может быть, лучший вопрос для меня будет: «зная, что у меня есть объект msg, возвращаемый из imap.fetch, как я могу проверить различные доступные методы, такие как 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 
+0

Это похоже аккуратной проблемы и хорошее направление/подход к поиску писем - но зачем вам нужно сканировать электронную почту пользователя? Что узнает все адреса электронной почты пользователя для вас? –

+0

(1) Это поможет мне определить, является ли количество спама, которое он получает, является результатом того, что его организация перенаправила каждый неиспользованный адрес электронной почты за последнее десятилетие этому бедному парню. (2) Он предоставит мне полезный инструмент для анализа рабочей нагрузки с течением времени. Я бы ЛЮБЛЮ инструмент, который говорит мне, «кто по электронной почте мне и кто я по электронной почте, в последний (биллинг) месяц?». Почему для этого нет плагина? Наконец, (3) это поможет мне узнать немного больше Ruby. –

ответ

4

Я делаю что-то похожее на это для сценария, который у меня есть. Это может помочь вам. Ключом к запоминанию является то, что все возвращаемые элементы являются массивами, даже если они имеют только один элемент.

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'] , который кажется полезным. –

 Смежные вопросы

  • Нет связанных вопросов^_^