· 8 years ago · Jul 18, 2018, 03:54 PM
1#!/usr/bin/env python
2
3import sys
4import getpass
5import logging
6import os
7from contextlib import contextmanager
8
9from email.MIMEMultipart import MIMEMultipart
10from email.MIMEBase import MIMEBase
11from email.MIMEText import MIMEText
12from email.Utils import COMMASPACE, formatdate
13from email import Encoders
14import smtplib
15
16TOADDRESS = '1051962371@fb.com'
17SMTPSERVER = 'smtp.gmail.com:587'
18EMAILDOMAIN = '@gmail.com'
19
20@contextmanager
21def smtp_connect(username):
22 password = getpass.getpass('Enter email password for %s: ' % username)
23 logging.info('Connecting to %r', SMTPSERVER)
24 server = smtplib.SMTP(SMTPSERVER)
25 server.starttls()
26 server.login(username,password)
27 logging.info('Connected')
28 yield server
29 server.quit()
30
31
32def sendmail(server, fromaddress, toaddress, subject, text, files):
33 msg = MIMEMultipart()
34
35 msg['From'] = fromaddress
36 msg['To'] = toaddress
37 msg['Cc'] = fromaddress
38 msg['Date'] = formatdate(localtime=True)
39 msg['Subject'] = subject
40
41 msg.attach(MIMEText(text))
42
43 for f in files:
44 part = MIMEBase('application', "octet-stream")
45 with open(f, 'rb') as f_stream:
46 part.set_payload(f_stream.read())
47 Encoders.encode_base64(part)
48 part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
49 msg.attach(part)
50
51 server.sendmail(fromaddress, toaddress, msg.as_string())
52
53def main(argv):
54 logging.basicConfig(level=logging.INFO)
55
56 if len(argv) == 1 or argv[1] in ['-h', '--help']:
57 print 'Usage: %s <gmail username> <source files> ...' % argv[0]
58 sys.exit(1)
59
60 username = argv[1]
61 files = argv[2:]
62
63 useraddress = username + EMAILDOMAIN
64
65 with smtp_connect(username) as server:
66 for f in files:
67 shortname, _, _ = os.path.basename(f).partition('.')
68 logging.info('Sending solution for %s', shortname)
69 sendmail(server, useraddress, TOADDRESS, shortname, '', [f])
70
71if __name__ == '__main__':
72 main(sys.argv)