Created
January 10, 2014 21:50
-
-
Save zikrach/8363378 to your computer and use it in GitHub Desktop.
Sending Email From Python Using Command Line
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
#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