Ideally, I could have python email me when it was done. Even more ideal, I could have it use gmail to send the email notification.
Well, I've done just that, along with using netrc to hold the password configuration so I know its secure.
The Gist is up at https://gist.github.com/2150894, or copied below.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python | |
""" Email Me. | |
Usage: | |
emailme <message> | |
emailme [-s] <message> | |
emailme [-s] <subject> <message> | |
emailme <toaddr> <subject> <message> | |
emailme <toaddr> <fromaddr> <subject> <message> | |
emailme -h | --help | |
emailme --version | |
Options: | |
-h --help Show help | |
-s --sms Send SMS | |
--version Show version | |
""" | |
#Python script to send simple emails | |
import smtplib | |
from email.mime.text import MIMEText | |
import netrc | |
from docopt import docopt | |
SMTPPORT = 587 # TLS for gmail. | |
DEFAULTFROM = "youraddress@gmail.com" | |
DEFAULTTO = "youraddress@gmail.com" | |
SMSADDRESS = "YOURNUMBER@messaging.sprintpcs.com" | |
DEFAULTSUBJECT = "PYTHON NOTIFICATION" | |
""" | |
Note that by default, this looks to check your netrc credentials | |
to use this feature, create a .netrc file, so that only you can read and write it | |
touch ~/.netrc | |
chmod 600 ~/.netrc | |
and then add the information for the gmail smtp server, i.e. | |
machine smtp.gmail.com | |
login yourusername@gmail.com | |
password yourpassword | |
This way only you will have access to this file. Do not use your actual account | |
password, instead create an application specific password for your Google | |
account at: https://security.google.com/settings/security/apppasswords | |
For SMS support, use your service providers gateway. | |
See: http://en.wikipedia.org/wiki/List_of_SMS_gateways | |
Notice that this can be used either as a command line script, as documented | |
in the main doc string, or as a python module. To use as a module: | |
import emailme | |
emailme.send_email("message") | |
or | |
emailme.send_sms("message") | |
""" | |
from functools import partial | |
def send_email(message="",subject=DEFAULTSUBJECT, | |
me=DEFAULTFROM,recipients=[DEFAULTTO], | |
smtpserver="smtp.gmail.com",tls=True,login=None, | |
password=None): | |
""" Send an email using the gmail smtp servers, and netrc to hide the username | |
and password information """ | |
if login is None or password is None: | |
secrets = netrc.netrc() | |
netrclogin,netrcaccount,netrcpassword = secrets.authenticators(smtpserver) | |
if login is None: | |
login = netrclogin | |
if password is None: | |
password = netrcpassword | |
msg = MIMEText(message) | |
msg['Subject'] = subject | |
msg['From'] = me | |
msg['To'] = ", ".join(recipients) | |
s = smtplib.SMTP(smtpserver, port=SMTPPORT) | |
if tls: | |
s.starttls() | |
s.login(login,password) | |
s.sendmail(me,recipients, msg.as_string()) | |
s.quit() | |
send_sms = partial(send_email, recipients =[SMSADDRESS] ,subject="") | |
if __name__=="__main__": | |
args = docopt(__doc__, version="Email Me version 0.1") | |
toaddr = args['<toaddr>'] or DEFAULTTO | |
fromaddr = args['<fromaddr>'] or DEFAULTFROM | |
message = args['<message>'] | |
if args['--sms']: | |
subject = args['<subject>'] or '' | |
send_sms(subject=subject, | |
message=message) | |
else: | |
subject = args['<subject>'] or DEFAULTSUBJECT | |
send_email(recipients=[toaddr], | |
me=fromaddr, | |
subject=subject, | |
message=message) |
No comments:
Post a Comment