Может кому-то нравится проверять почту через браузер, Evolution или Outlook, но я люблю консоль (=
И так, начнем-с…
подключаем модули — тут все просто…
смотрим что там у нас за параметры: 1ый — сервер, например gmail.com; 2ой — логин к почте; 3ий — пароль к ней же
если проверяется почта на гугле.
можно добавить и другие сервисы, просто добавив
порт для соединения по имап
адрес сервера, логин и пасс
устанавливаем соединение с сервером и логинимся
просматриваем папку входящие
кстати, чтобы просмотреть папку спам, напрмер, нужно написать вот так (крэйзи русский язык):
цикл по всем сообщениям
выбираем заголовок и тело письма
создаем файлик и записываем в него тело письма…
ставим флаги для писем как удаленные, обновляем инфо на сервере о флагах и отключаемся…
иначе, т.е. у нас нет возможности подконнектиться к серверу по имап, то подключаемся по ПОПу
если есть письма, то для каждого письма:
в хедере ищем дату…
и опять же как и по имап создаем файлик и записываем в него тело письма
удаляем письмо с сервера и закрываем соединение…
вот так вот немного коряво конечно получилось, но главное основные принципы работы, а там уже можно чуть дальше копнуть и сделать свой почтовый клиент… дерзаем (=
И так, начнем-с…
подключаем модули — тут все просто…
require 'rubygems'
require 'activesupport'
require 'net/imap'
require 'tmail'
require 'net/pop'
смотрим что там у нас за параметры: 1ый — сервер, например gmail.com; 2ой — логин к почте; 3ий — пароль к ней же
puts "ARGV[0]="+ARGV[0].to_s+" ARGV[1]="+ARGV[1].to_s+" ARGV[2]="+ARGV[2].to_s
если проверяется почта на гугле.
if ARGV[0]=='gmail.com'
можно добавить и другие сервисы, просто добавив
|| ARGV[0]=='yahoo.com'
например, но мне хватает гугла, да и на яху доступ по имап платный(порт для соединения по имап
port=993
адрес сервера, логин и пасс
server = 'imap.'+ARGV[0].to_s
login = ARGV[1].to_s
password = ARGV[2].to_s
устанавливаем соединение с сервером и логинимся
imap = Net::IMAP::new(server, port, true)
imap.login(login,password)
просматриваем папку входящие
imap.examine('INBOX')
кстати, чтобы просмотреть папку спам, напрмер, нужно написать вот так (крэйзи русский язык):
imap.examine('[Gmail]/&BCEEPwQwBDw-')
цикл по всем сообщениям
imap.search(["NOT", "DELETED"]).each do |message_id|
выбираем заголовок и тело письма
envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
mail = TMail::Mail.parse(imap.fetch(message_id, "BODY[]")[0].attr["BODY[]"])
создаем файлик и записываем в него тело письма…
idata=envelope.date.to_date
File.open(ARGV[1].to_s+"_"+ARGV[0].to_s+"_"+idata.to_s+"_"+message_id.to_s+".html","w").write(mail.body)
ставим флаги для писем как удаленные, обновляем инфо на сервере о флагах и отключаемся…
imap.store(message_id, "+FLAGS", [:Deleted])
end
imap.expunge()
imap.disconnect
иначе, т.е. у нас нет возможности подконнектиться к серверу по имап, то подключаемся по ПОПу
else
pop = Net::POP3.new("pop."+ARGV[0], nil)
pop.start(ARGV[1], ARGV[2])
если есть письма, то для каждого письма:
в хедере ищем дату…
и опять же как и по имап создаем файлик и записываем в него тело письма
if !pop.mails.empty?
i=0
pop.each_mail do |m|
m.header=~/Date:(.*)/
mdata=$1
File.open(ARGV[1].to_s+"_"+ARGV[0].to_s+"_"+mdata.to_s+"_"+i.to_s+".html","w").write(m.mail)
удаляем письмо с сервера и закрываем соединение…
i+=1
m.delete
end
end
pop.finish
end
вот так вот немного коряво конечно получилось, но главное основные принципы работы, а там уже можно чуть дальше копнуть и сделать свой почтовый клиент… дерзаем (=