python程序发送email的源码

把开发过程经常用的代码段收藏起来,下边代码段是关于python程序发送email的的代码,应该是对码农们有一些好处。

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;

takes addresses to, from cc and a subject

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;

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

上一篇:vue学习---理解MVVM


下一篇:解决[origin 'http://xxx.xxx.com:xxxx' has been blocked by CORS policy: The request client is