Skip to content

Instantly share code, notes, and snippets.

@zikrach
Created January 10, 2014 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zikrach/8363378 to your computer and use it in GitHub Desktop.
Save zikrach/8363378 to your computer and use it in GitHub Desktop.
Sending Email From Python Using Command Line
#account setup
username = '***';
password = '***';
server = 'smtp.gmail.com:587';
#imports
from time import sleep;
import smtplib;
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText;
from email.mime.multipart import MIMEMultipart;
# create msg - MIME* object
# takes addresses to, from cc and a subject
# returns the MIME* object
def create_msg(to_address,
from_address='',
cc_address='',
bcc_address='',
subject=''):
msg = MIMEMultipart();
msg['Subject'] = subject;
msg['To'] = to_address;
msg['Cc'] = cc_address;
msg['From'] = from_address;
return msg;
# send an email
# takes an smtp address, user name, password and MIME* object
# if mode = 0 sends to and cc
# if mode = 1 sends to bcc
def send_email(smtp_address, usr, password, msg, mode):
server = smtplib.SMTP(smtp_address);
server.ehlo();
server.starttls();
server.ehlo();
server.login(username,password);
if (mode == 0 and msg['To'] != ''):
server.sendmail(msg['From'],(msg['To']+msg['Cc']).split(","), msg.as_string());
elif (mode == 1 and msg['Bcc'] != ''):
server.sendmail(msg['From'],msg['Bcc'].split(","),msg.as_string());
elif (mode != 0 and mode != 1):
print 'error in send mail bcc'; print 'email cancled'; exit();
server.quit();
# compose email
# takes all the details for an email and sends it
# address format: list, [0] - to
# [1] - cc
# [2] - bcc
# subject format: string
# body format: list of pairs [0] - text
# [1] - type:
# 0 - plain
# 1 - html
# files is list of strings
def compose_email(addresses, subject, body, files):
# addresses
to_address = addresses[0];
cc_address = addresses[1];
bcc_address = addresses[2];
# create a message
msg = create_msg(to_address, cc_address=cc_address , subject=subject);
# add text
for text in body:
attach_text(msg, text[0], text[1]);
# add files
if (files != ''):
file_list = files.split(',');
for afile in file_list:
attach_file(msg, afile);
# send message
send_email(server, username, password, msg, 0);
# check for bcc
if (bcc_address != ''):
msg['Bcc'] = bcc_address;
send_email(server, username, password, msg, 1);
print 'email sent'
# attach text
# attaches a plain text or html text to a message
def attach_text(msg, atext, mode):
part = MIMEText(atext, get_mode(mode));
msg.attach(part);
# util function to get mode type
def get_mode(mode):
if (mode == 0):
mode = 'plain';
elif (mode == 1):
mode = 'html';
else:
print 'error in text kind'; print 'email cancled'; exit();
return mode;
# attach file
# takes the message and a file name and attaches the file to the message
def attach_file(msg, afile):
part = MIMEApplication(open(afile, "rb").read());
part.add_header('Content-Disposition', 'attachment', filename=afile);
msg.attach(part);
#to be tested...
compose_email(['cpt@thelivingpearl.com','',''],
'test v.5.0',
[['some text goes here...\n',0]],
'');
#compose_email can take the following arguments:
# 1. to recipients (separated by a comma)
# 2. cc recipients (separated by a comma)
# 3. bcc recipients (separated by a comma)
# 4. subject
# 5. a list with message and mode (plain txt or html)
# 6. files to be attached
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment