六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 39|回复: 0

python发送邮件

[复制链接]

升级  54.33%

111

主题

111

主题

111

主题

举人

Rank: 3Rank: 3

积分
363
 楼主| 发表于 2013-1-15 02:29:24 | 显示全部楼层 |阅读模式
# -*- 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>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表