· 4 years ago · Apr 21, 2021, 05:02 PM
1import ssl
2
3from socks import create_connection
4from socks import PROXY_TYPE_SOCKS4
5from socks import PROXY_TYPE_SOCKS5
6from socks import PROXY_TYPE_HTTP
7
8from imaplib import IMAP4
9from imaplib import IMAP4_PORT
10from imaplib import IMAP4_SSL_PORT
11from imaplib import IMAP4_SSL
12
13import email
14import re
15import json
16from time import time, sleep
17import coloredlogs, logging
18
19
20class SocksIMAP4(IMAP4):
21 '''
22 IMAP service trough SOCKS proxy. PySocks module required.
23 '''
24
25 PROXY_TYPES = {
26 'socks4': PROXY_TYPE_SOCKS4,
27 'socks5': PROXY_TYPE_SOCKS5,
28 'http': PROXY_TYPE_HTTP
29 }
30
31 def __init__(self, host, port=IMAP4_PORT, proxy_addr=None, proxy_port=None,
32 rdns=True, username=None, password=None, proxy_type='socks5'):
33
34 self.proxy_addr = proxy_addr
35 self.proxy_port = proxy_port
36 self.rdns = rdns
37 self.username = username
38 self.password = password
39 self.proxy_type = SocksIMAP4.PROXY_TYPES[proxy_type.lower()]
40
41 IMAP4.__init__(self, host, port)
42
43 def _create_socket(self):
44 return create_connection((self.host, self.port), proxy_type=self.proxy_type,
45 proxy_addr=self.proxy_addr, proxy_port=self.proxy_port,
46 proxy_rdns=self.rdns, proxy_username=self.username,
47 proxy_password=self.password)
48
49
50class SocksIMAP4SSL(SocksIMAP4):
51 def __init__(self, host='', port=IMAP4_SSL_PORT, keyfile=None, certfile=None, ssl_context=None,
52 proxy_addr=None, proxy_port=None, rdns=True, username=None, password=None, proxy_type='socks5'):
53
54 if ssl_context is not None and keyfile is not None:
55 raise ValueError('ssl_context and keyfile arguments are mutually '
56 'exclusive')
57 if ssl_context is not None and certfile is not None:
58 raise ValueError('ssl_context and certfile arguments are mutually '
59 'exclusive')
60
61 self.keyfile = keyfile
62 self.certfile = certfile
63 if ssl_context is None:
64 ssl_context = ssl._create_stdlib_context(certfile=certfile, keyfile=keyfile)
65 self.ssl_context = ssl_context
66
67 SocksIMAP4.__init__(self, host, port, proxy_addr=proxy_addr, proxy_port=proxy_port,
68 rdns=rdns, username=username, password=password, proxy_type=proxy_type)
69
70 def _create_socket(self):
71 sock = SocksIMAP4._create_socket(self)
72 server_hostname = self.host if ssl.HAS_SNI else None
73 return self.ssl_context.wrap_socket(sock, server_hostname=server_hostname)
74
75 def open(self, host='', port=IMAP4_PORT):
76 print(self.host)
77 print(self.port)
78 SocksIMAP4.open(self, host, port)
79
80
81def get_emails_count(proxy_proto, proxy_ip, proxy_port, proxy_username, proxy_password, username, password, imap_server):
82 mail = SocksIMAP4SSL(host=imap_server, port=993, proxy_type=proxy_proto,
83 proxy_addr=proxy_ip, proxy_port=proxy_port,
84 username=proxy_username, password=proxy_password)
85
86 try:
87 mail = IMAP4_SSL(imap_server)
88 mail.login(username, password)
89 mail.select('inbox')
90 result, data = mail.uid('search', None, 'ALL')
91 if data[0].decode('utf-8'):
92 return len(data[0].decode('utf-8').split(' '))
93 else:
94 return 0
95 except:
96 return False
97
98
99if __name__ == '__main__':
100 status = get_emails_count('socks5', 'XXX.XXX.XXX.XXX', 'XXXXX', 'XXX', '*****', '***@gmail.com', '****', 'imap.gmail.com')
101 print(status)