Advertisement
stuppid_bot

Выгрузка всех писем из почтового ящика на mail.ru

Oct 23rd, 2013
937
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.93 KB | None | 0 0
  1. #-*- coding: utf-8 -*-
  2. # Скрипт для вырузки всех писем с почтового аккаунта на mail.ru.
  3. # Создает в указанной папке директорию с именем почтового адреса.
  4. # В ней сохраняются все сообщения в виде файлов формата EML и создается файл index.json.
  5. # Структура index.json [['Имя папки', ['id1', 'id2', 'id3', ...]], ...]
  6. # Любые вопросы на tz4678@gmail.com
  7. # socks.py можно скачать по ссылке http://sourceforge.net/projects/socksipy/files/latest/download
  8. # Tor Browser Bundle можно скачать по ссылке https://www.torproject.org/projects/torbrowser.html.en
  9. import httplib
  10. import urllib
  11. import sys
  12. import re
  13. import os
  14. import urllib2
  15. import json
  16.  
  17. def get_page(url):
  18.     req = urllib2.Request(url, None, request_headers)
  19.     return urllib2.urlopen(req).read()
  20.  
  21. def find_messages(content):
  22.     return re.findall('<a class="messageline__link" href="/message/(\d+)">', content)
  23.  
  24. def save_messages(L):
  25.     for _ in L:
  26.         data = get_page('https://e.mail.ru/cgi-bin/getmsg?id=' + _)
  27.         open(save_path + _ + '.eml', 'w').write(data)
  28.  
  29. user = raw_input(u'Введите электронный адрес: ')
  30. pswd = raw_input(u'Введите пароль: ')
  31. # 1 - если хотите использовать TOR
  32. using_tor = 0
  33. if using_tor:
  34.     # в более ранних версиях Tor Browser Bundle использовался 9050 порт
  35.     socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9150)
  36.     socket.socket = socks.socksocket
  37. request_headers = {
  38.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'
  39. }
  40. connection = httplib.HTTPConnection('m.mail.ru')
  41. connection.request('GET', '/cgi-bin/auth?Login=' + urllib.quote(user)+ '&Password=' + urllib.quote(pswd), headers=request_headers)
  42. response = connection.getresponse()
  43. response_headers = response.getheaders()
  44. response_headers = dict(response_headers)
  45. if response_headers['location'] != 'https://e.mail.ru/messages/inbox/?back=1':
  46.     print u'Неправильный логин либо пароль'
  47.     sys.exit(0)
  48. # сохраняем куки
  49. pairs = re.findall(r'(?:^|(?<=, ))\w+=[^;]+', response_headers['set-cookie'])
  50. request_headers['Cookie']  = '; '.join(pairs)
  51. save_dir = raw_input(u'Папка для сохранения: ')
  52. save_path = save_dir + '/' + user + '/'
  53. try:
  54.     os.makedirs(save_path);
  55. except OSError:
  56.     pass
  57. if not os.path.isdir(save_path):
  58.     print u'Невозможно создать папку'
  59.     sys.exit(0)
  60. # смотрим папки
  61. content = get_page('https://m.mail.ru/folders/')
  62. content = unicode(content, 'utf-8')
  63. # черновики не нужны
  64. folders = re.findall(r'<a href="/messages/((?!drafts)[^?]+)[^"]+" class="folder-list__item__link">(?:[\s\S]+?)<span class="folder">([\s\S]+?)</span>', content)
  65. data2save = []
  66. for path, name in folders:
  67.     some_shit = [name]
  68.     url = 'https://m.mail.ru/messages/' + path
  69.     print url
  70.     content = get_page(url)
  71.     messages = find_messages(content)
  72.     save_messages(messages)
  73.     # узнаем количество страниц
  74.     match = re.search(r'<td class="pager__list__item"><a href="[^"]+">(\d+)</a></td>\s+</tr>', content)
  75.     if match:
  76.         pages = int(match.group(1))
  77.         # парсим остальные страницы
  78.         i = 2
  79.         while i <= pages:        
  80.             content = get_page(url + '?page=' + str(i))
  81.             _ = find_messages(content)
  82.             save_messages(_)
  83.             messages += _
  84.             i += 1
  85.     some_shit.append(messages)
  86.     data2save.append(some_shit)
  87. open(save_path + '/index.json', 'w').write(json.dumps(data2save, ensure_ascii=False).encode('utf-8'));
  88. print u'Закончили'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement