|
|
# -*- coding:UTF-8 -*-'''Created on 2010-5-27@author: 忧里修斯'''import smtplibimport emailimport osimport traceback from email.message import Messagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.base import MIMEBasefrom email import encodersimport mimetypesfrom email.mime.audio import MIMEAudio''' 邮件收发管理'''#发送服务器信息smtpserver='smtp.qq.com' smtpuser='***@qq.com' smtppass='***' smtpport='25'def login(): ''' 发件人登录到服务器 ''' server=smtplib.SMTP(smtpserver,smtpport) server.ehlo() server.login(smtpuser,smtppass) return serverdef sendTextEmail(toAdd,subject,content): ''' 功能:发送纯文本邮件 参数说明: toAdd:收件人E-mail地址 类型:list subject:主题,类型:string content:邮件内容 类型:string fromAdd:发件人,默认为服务器用户 返回值:True/False ''' result = False server = login() msg = Message() msg['Mime-Version']='1.0' msg['From'] = smtpuser msg['To'] = toAdd msg['Subject'] = subject msg['Date'] = email.Utils.formatdate() # curr datetime, rfc2822 msg.set_payload(content) try: server.sendmail(smtpuser,toAdd,str(msg)) # may also raise exc result = True except Exception ,ex: print Exception,ex print 'Error - send failed' return resultdef sendEmail(toAdd,subject,html): ''' 发送html邮件 ''' result = False try: msgRoot = MIMEMultipart('ralated') msgRoot['Subject'] = subject msgRoot['From'] = smtpuser msgRoot['To'] = toAdd msgRoot.preamble = 'This is a multi-part message in MIME format.' msgAlternative = MIMEMultipart('alternative') msgRoot.attach(msgAlternative) #设定HTML信息 msgText = MIMEText(html, 'html', 'utf-8') msgAlternative.attach(msgText) #设定内置图片信息 fp = open('test.jpg', 'rb') msgImage = MIMEImage(fp.read()) fp.close() msgImage.add_header('Content-ID', '<image1>') msgRoot.attach(msgImage) #发送邮件 smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(smtpuser, smtppass) smtp.sendmail(smtpuser, toAdd, msgRoot.as_string()) smtp.quit() result = True except: result = False return resultdef sendMultiMail(toAdd,subject,html): ''' 发送带附件的邮件 ''' result = False try: msgRoot = MIMEMultipart('ralated') msgRoot['Subject'] = subject msgRoot['From'] = smtpuser msgRoot['To'] = toAdd msgRoot.preamble = 'This is a multi-part message in MIME format.' msgAlternative = MIMEMultipart('alternative') msgRoot.attach(msgAlternative) #设定HTML信息 msgText = MIMEText(html, 'html', 'utf-8') msgAlternative.attach(msgText) #设定内置图片信息 fp = open(u'c:\\capmm.jpg', 'rb+') msgImage = MIMEImage(fp.read()) fp.close() msgImage.add_header('Content-ID', '<image1>') msgRoot.attach(msgImage) #构造附件 filepath = u'C:\\constant.py' ctype, encoding = mimetypes.guess_type(filepath) if ctype is None or encoding is not None: ctype = 'application/octet-stream' maintype, subtype = ctype.split('/', 1) if maintype == 'text': fp = open(filepath) msg = MIMEText(fp.read(), _subtype=subtype) fp.close() elif maintype == 'image': fp = open(filepath, 'rb') msg = MIMEImage(fp.read(), _subtype=subtype) fp.close() elif maintype == 'audio': fp = open(filepath, 'rb') msg = MIMEAudio(fp.read(), _subtype=subtype) fp.close() else: fp = open(filepath, 'rb') msg = MIMEBase(maintype, subtype) msg.set_payload(fp.read()) fp.close() encoders.encode_base64(msg) msg.replace_header('Content-type','Application/octet-stream;name=%s' % filepath) msg.add_header('Content-Disposition', 'attachment',filename = filepath) msgRoot.attach(msg) #发送邮件 smtp = smtplib.SMTP() smtp.connect(smtpserver) print smtp.login(smtpuser, smtppass) smtp.sendmail(smtpuser, toAdd, msgRoot.as_string()) smtp.quit() result = True except: print traceback.format_exc() result = False return resultif __name__ == '__main__': # print sendTextEmail('...@qq.com', '爱动注册通知', '本邮件有爱动系统自动发出,请勿回复,谢谢')# print sendEmail('...@qq.com', 'html爱动注册通知', '<font color=red><b>本邮件有爱动系统自动发出,请勿回复,谢谢</b><img src="cid:image1"></font>') print sendMultiMail('769435570@qq.com', 'html爱动注册通知', '<font color=red><b>本邮件有爱动系统自动发出,请勿回复,谢谢</b></font><img src="cid:image1">')
说明:如何在邮件中显示图片
1、为上传的图片设置名称
msgImage.add_header('Content-ID', '<image1>')
2、使用名称显示
<font color=red><b>本邮件有爱动系统自动发出,请勿回复,谢谢</b><img src="cid:image1"></font> |
|