邮件
目录结构
|- FTP
|- - smtp
|- - - config.py
|- - - sendEmailHtml.py
|- - - sendEmailText.py
|- - - sendEmailFile.py
|- - - test.py
代码
我的配置文件 config.py
__author__ = 'junpeng.yang'
file_config = {
'from_addr': 'wsywno1@126.com',
'password': 'XXXXXX',
'to_addr': '',
'msg': '',
'smtp_server': 'smtp.126.com'
}
text_config = {
'from_addr': 'wsywno1@126.com',
'password': 'XXXXXX',
'to_addr': '',
'msg': '',
'smtp_server': 'smtp.126.com'
}
html_config = {
'from_addr': 'wsywno1@126.com',
'password': 'XXXXXX',
'to_addr': '',
'msg': '',
'smtp_server': 'smtp.126.com'
}
将上面的from_addr和password换成自己的邮箱账户和密码。smtp_server换成自己服务商的配置。
发送html格式的邮件 sendEmailHtml.py
# coding:utf-8
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from FTP.smtp.config import html_config
config = html_config
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( \
Header(name, 'utf-8').encode(), \
addr.encode('utf-8') if isinstance(addr, unicode) else addr))
def __doSendHtml(from_addr=config['from_addr'], password=config['password'], to_addr='', msg='',
smtp_server=config['smtp_server']):
msg = MIMEText(msg, 'html', 'utf-8')
msg['From'] = _format_addr(u'Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
def sendHtml(from_addr, password, to_addr, msg, smtp_server):
if len(to_addr) == 0:
return
if len(from_addr) == 0 and len(password) == 0 and len(smtp_server) == 0:
from_addr = config['from_addr']
password = config['password']
smtp_server = config['smtp_server']
if len(from_addr) != 0 and len(password) != 0 and len(smtp_server) != 0:
__doSendHtml(from_addr, password, to_addr, msg, smtp_server)
发送文本 sendEmailText.py
# coding:utf-8
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from FTP.smtp.config import text_config
config = text_config
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( \
Header(name, 'utf-8').encode(), \
addr.encode('utf-8') if isinstance(addr, unicode) else addr))
def __doSendText(from_addr=config['from_addr'], password=config['password'], to_addr='', msg='',
smtp_server=config['smtp_server']):
msg = MIMEText(msg, 'plain', 'utf-8')
msg['From'] = _format_addr(u'Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
def sendHtml(from_addr, password, to_addr, msg, smtp_server):
if len(to_addr) == 0:
return
if len(from_addr) == 0 and len(password) == 0 and len(smtp_server) == 0:
from_addr = config['from_addr']
password = config['password']
smtp_server = config['smtp_server']
if len(from_addr) != 0 and len(password) != 0 and len(smtp_server) != 0:
__doSendText(from_addr, password, to_addr, msg, smtp_server)
发送各类型的文件 sendEmailFile.py
# coding=utf-8
import mimetypes
import re
import smtplib
from email import encoders
from email.header import Header
from email.mime.multipart import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from FTP.smtp.config import file_config
from FTP.smtp.Utils import getName
config = file_config
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((
Header(name, 'utf-8').encode(),
addr.encode('utf-8') if isinstance(addr, unicode) else addr))
def __doSendFile(from_addr=config['from_addr'], password=config['password'], to_addr='', message='',
smtp_server=config['smtp_server'], path=''):
# 构造MIMEMultipart对象做为根容器
# 邮件对象:
msg = MIMEMultipart()
msg['From'] = _format_addr(u'Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()
# 邮件正文是MIMEText:
# 构造MIMEText对象做为邮件显示内容并附加到根容器
msg.attach(MIMEText(message, 'plain', 'utf-8'))
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
with open(path, 'rb') as f:
# 设置附件的MIME和文件名,这里是png类型:
names = getName(path)
if names is not None:
# name = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
# name = name + names[len(names) - 2] + '.' + names[len(names) - 1]
guessType = mimetypes.guess_type(names)
myType = guessType[0]
if myType is not None:
# 测试识别文件类型:mimetypes.guess_type(file_name)
# ctype,encoding值:
# rar 文件 None None(ini文件、csv文件、apk文件)
# txt text/plain None
# py text/x-python None
# gif image/gif None
# png image/x-png None
# jpg image/pjpeg None
# pdf application/pdf None
# doc application/msword None
# zip application/x-zip-compressed None
myTypes = re.split('/', myType)
mime = MIMEBase(myTypes[0], myTypes[1], filename=names)
# 加上必要的头信息:
mime.add_header('Content-Disposition', 'attachment', filename=names)
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
def sendFile(from_addr, password, to_addr, msg, smtp_server, path):
if len(to_addr) == 0 or len(path) == 0:
return
if len(from_addr) == 0 and len(password) == 0 and len(smtp_server) == 0:
from_addr = config['from_addr']
password = config['password']
smtp_server = config['smtp_server']
if len(from_addr) != 0 and len(password) != 0 and len(smtp_server) != 0:
__doSendFile(from_addr, password, to_addr, msg, smtp_server, path)
测试用例 test.py
# coding=utf-8
from FTP.smtp.sendEmailFile import sendFile
from FTP.smtp.SendEmailText import sendText
from FTP.smtp.SendEmailHtml import sendHtml
def run():
from_addr = raw_input('From: ')
password = raw_input('Password: ')
to_addr = raw_input('To: ')
smtp_server = raw_input('SMTP server: ')
msg = raw_input('msg: ')
path = raw_input('path: ')
# sendHtml(from_addr, password, to_addr, msg, smtp_server)
sendFile(from_addr, password, to_addr, msg, smtp_server, path)
if __name__ == '__main__':
run()
参考资料:
Python核心编程
备注:
转载请注明出处:http://blog.youkuaiyun.com/wsyw126/article/details/54613256
作者:WSYW126