python smtplib邮件模块

Posted on Posted in python

几个邮件例子,包括文本、html、图片和附件

环境为python3,期间用python2实验过,花费了很久时间,解决蛋疼的编码问题,后来想想没必要。

简单的方法,不用中文

最后一个例子,是python2解决中文的一个方法

> 文本

  1. #!/usr/bin/env python    
  2. import smtplib    
  3. import string    
  4.     
  5. HOST = 'smtp.qq.com'    #定义smtp主机    
  6. SUBJECT = 'Test email from python'  #定义邮件主题    
  7. TO = 'honghe.liu@mhealth365.com'    #定义邮件收件人,如果是多人 TO = 'mail1,mail2,mail3,...'    
  8. FROM = '352517144@qq.com'   #定义邮件发件人    
  9. text = 'python rules them all'  #邮件内容    
  10. BODY = "\r\n".join(("From: %s" % FROM,"To: %s" % TO,"Subject: %s" % SUBJECT,"",text))   #主体内容    
  11. server = smtplib.SMTP_SSL()     #创建SMTP()对象,这里用的ssl如果不用,就是smtplib.SMTP()    
  12. server.connect(HOST,"465")      #连接    
  13. #server.starttls()  #这句不用ssl时可以加上    
  14. server.login(FROM,"passwd") #邮箱账号登录校验    
  15. server.sendmail(FROM,[TO],BODY)     #邮件发送    
  16. server.quit()   #断开    

> html

  1. #!/usr/bin/env python  
  2. #-*- coding: UTF-8 -*-  
  3. import smtplib  
  4. from email.mime.text import MIMEText  
  5.   
  6. HOST = 'smtp.qq.com'  
  7. SUBJECT = '官网流量数据报表'  
  8. TO = 'honghe.liu@mhealth365.com'  
  9. FROM = '352517144@qq.com'  
  10. msg = MIMEText(""" 
  11. <ul> 
  12. <li>a</li> 
  13. <li>b</li> 
  14. <li>c</li> 
  15. </ul> 
  16. ""","html","utf-8")  
  17. msg['Subject'] = SUBJECT  
  18. msg['From'] = "你从哪里来<"+FROM+">"  
  19. msg['To'] = "你到哪里去<"+TO+">"  
  20. try:  
  21.     server = smtplib.SMTP_SSL()  
  22.     server.connect(HOST,"465")  
  23.     server.login(FROM,"passwd")  
  24.     server.sendmail(FROM, TO,msg.as_string())  
  25.     server.quit()  
  26.     print("邮件发送成功")  
  27. except Exception as e:  
  28.     print("失败:{}".format(str(e)))  

> 带图片

  1. #!/usr/bin/env python  
  2. #-*- coding: UTF-8 -*-  
  3. import smtplib  
  4. from email.mime.multipart import MIMEMultipart  
  5. from email.mime.text import MIMEText  
  6. from email.mime.image import MIMEImage  
  7.   
  8. HOST = 'smtp.qq.com'  
  9. SUBJECT = "主题"  
  10. TO = 'honghe.liu@mhealth365.com'  
  11. FROM = '352517144@qq.com'  
  12.   
  13. def addimg(src,imgid):  
  14.     """添加图片函数 
  15.      
  16.     src 图片路径 imgid 图片id"""  
  17.     fp = open(src, 'rb')    #打开文件  
  18.     msgImage = MIMEImage(fp.read())     #创建MIMEImage对象,读取图片内容作为参数  
  19.     fp.close()  #关闭文件  
  20.     msgImage.add_header("Content-ID", imgid)    #指定图片文件的Content-ID,<img>  
  21.     return msgImage     #返回msgImage对象  
  22.   
  23. msg = MIMEMultipart('related')  #创建MIMEMultipart对象,采用related定义内嵌资源的邮件体  
  24.   
  25. msgtext = MIMEText(""" 
  26. <img src="cid:io" /> 
  27. <img src="cid:key_hit" /> 
  28. <img src="cid:men" /> 
  29. <img src="cid:swap" /> 
  30. ""","html","utf-8")  
  31.   
  32. msg.attach(msgtext)     #MIMEMultipart 对象附加MIMEText的内容  
  33. msg.attach(addimg("img/io.png","io"))     
  34. msg.attach(addimg("img/key_hit.png","key_hit"))  
  35. msg.attach(addimg("img/mem.png","men"))  
  36. msg.attach(addimg("img/swap.png","swap"))  
  37.   
  38. msg['Subject'] = SUBJECT  
  39. msg['From'] = FROM  
  40. msg['To'] = TO  
  41.   
  42. server = smtplib.SMTP_SSL()  
  43. server.connect(HOST,"465")  
  44. server.login(FROM,"passwd")  
  45. server.sendmail(FROM, TO, msg.as_string())  
  46. server.quit()  
  47. print("发送邮件成功")  

> 附件

  1. #!/usr/bin/env python  
  2. #-*- coding: UTF-8 -*-  
  3. import smtplib  
  4. from email.mime.multipart import MIMEMultipart  
  5. from email.mime.text import MIMEText  
  6. from email.mime.image import MIMEImage  
  7.   
  8. HOST = 'smtp.qq.com'  
  9. SUBJECT = "主题"  
  10. TO = 'honghe.liu@mhealth365.com'  
  11. FROM = '352517144@qq.com'  
  12.   
  13. def addimg(src,imgid):  
  14.     """添加图片函数 
  15.      
  16.     src 图片路径 imgid 图片id"""  
  17.     fp = open(src, 'rb')  
  18.     msgImage = MIMEImage(fp.read())  
  19.     fp.close()  
  20.     msgImage.add_header("Content-ID", imgid)  
  21.     return msgImage  
  22.   
  23. msg = MIMEMultipart('related')  
  24.   
  25. msgtext = MIMEText("<font color=red>图片</font><br /><img src=\"cid:io\" border=\"1\" /><br>详情附件","html","utf-8")  
  26.   
  27. msg.attach(msgtext)  
  28. msg.attach(addimg("img/io.png","io"))  
  29.   
  30. attach = MIMEText(open("doc/123.xls","rb").read(), "base64","utf-8")  
  31. attach["Content-Type"] = "application/octet-stream"  
  32. attach["Content-Disposition"] = 'attachment; filename="123.xls"'  
  33. msg.attach(attach)  #附件1  
  34.   
  35. attach1 = MIMEText(open("doc/1234.xls","rb").read(), "base64","utf-8")  
  36. attach1["Content-Type"] = "application/octet-stream"  
  37. attach1["Content-Disposition"] = 'attachment; filename="1234.xls"'  
  38. msg.attach(attach1) #附件2  
  39.   
  40. msg['Subject'] = SUBJECT  
  41. msg['From'] = FROM  
  42. msg['To'] = TO  
  43.   
  44. server = smtplib.SMTP_SSL()  
  45. server.connect(HOST,"465")  
  46. server.login(FROM,"passwd")  
  47. server.sendmail(FROM, TO, msg.as_string())  
  48. server.quit()  
  49. print("发送邮件成功")  

> python2 中文

  1. #!/usr/bin/env python  
  2. #-*- coding: UTF-8 -*-  
  3. import smtplib  
  4. from email import encoders  
  5. from email.mime.text import MIMEText  
  6. from email.header import Header  
  7. from email.utils import parseaddr, formataddr  
  8. import sys  
  9.   
  10. if len(sys.argv) != 2:  
  11.     print '1'  
  12.     sys.exit(1)  
  13. try:  
  14.     message = sys.argv[1]  
  15.     if 2 == len(message.split('/')):  
  16.     email_name = message.split('/')[0]  
  17.     code = message.split('/')[1]  
  18.     else:  
  19.         print 'args ERR'  
  20.         sys.exit(1)  
  21. except Exception:  
  22.     e = None  
  23.     sys.exit(2)  
  24.   
  25. def _format_addr(s):  
  26.     name, addr = parseaddr(s)  
  27.     return formataddr(( \  
  28.         Header(name, 'utf-8').encode(), \  
  29.         addr.encode('utf-8') if isinstance(addr, unicodeelse addr))  
  30.   
  31. msg = MIMEText("您在掌上心电邮箱注册的验证码是: <span style='border-bottom-width: 1px; font-weight: bold; color: #ff9900; border-bottom-style: dashed; border-bottom-color: rgb(204, 204, 204); z-index: 1; position: static;' >%s</span> , 请在5分钟内完成注册认证。" % code ,'html', 'utf-8')  
  32. FROM = 'noreply@example.com'  
  33. msg['From'] = _format_addr(u'掌上心电 <%s>' % FROM)  
  34. TO = email_name  
  35. msg['To'] = _format_addr(u'<%s>' % TO)  
  36. msg['Subject']= Header(u'掌上心电邮箱注册的验证','utf-8').encode()  
  37.   
  38. HOST = 'smtp.sina.com'  
  39. server = smtplib.SMTP()  
  40. server.connect(HOST,"25")  
  41. server.login(FROM,"passwd")  
  42. server.sendmail(FROM,[TO],msg.as_string())  
  43. server.quit()  
» 转载请注明来源:若我若鱼 » python smtplib邮件模块

Leave a Reply

Your email address will not be published. Required fields are marked *

three − one =