码迷,mamicode.com
首页 > 编程语言 > 详细

python发送邮件

时间:2015-02-22 21:55:03      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:电子邮件   python   邮件   测试   

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。但由于这个smtplib用起来也不是特别方便,于是对smtplib的各个参数作了进一步加工。写了一个比较实用的发送邮件的函数。

整个函数需要传递七个参数,包括收件人地址(列表类型,可以一次发送到多个人),主题内容,附件(列表类型,列表里的每个值是附件所在位置),发件人(可选参数),发件人密码(可选参数)。邮箱后缀(可选参数)。

写了一个测试文件,所有代码张贴如下:


  1. # !/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # 导入smtplib和MIMEText
  4. from email import encoders
  5. from email.header import Header
  6. from email.mime.text import MIMEText
  7. from email.mime.base import MIMEBase
  8. from email.mime.multipart import MIMEMultipart
  9. from email.utils import parseaddr, formataddr
  10. import smtplib
  11. ## ## ## ## ## ## ## ## ## ## #
  12. # 设置服务器,用户名、口令以及邮箱的后缀
  13. mail_host="smtp.163.com"
  14. mail_user="***@163.com"
  15. mail_pass="*******"
  16. mail_postfix="163.com"
  17. ## ## ## ## ## ## ## ## ## ## ##
  18. def send_mail(to_list,sub,content,attachment,user=mail_user,pwd=mail_pass,host=mail_host):
  19. ‘‘‘
  20. to_list:发给谁(接受的参数是列表)
  21. sub:主题
  22. content:内容
  23. attachment:附件的地址(接受的参数是列表)
  24. user:发件人的邮箱(可选参数)
  25. pwd:发件人邮箱的密码(可选参数)
  26. return :
  27. True:发送成功
  28. False:发送失败
  29. ex: send_mail(["a@cym.so"],"sub","content","/Users/lanyy/Desktop/screenshot_at_2014-11-5_0_34_25.png","/Users/lanyy/Desktop/hannuo.py")
  30. ‘‘‘
  31. me = _format_addr(u‘<%s> <%s>‘ % (mail_user,mail_user))
  32. msg = MIMEMultipart()
  33. msg[‘Subject‘] = sub
  34. msg[‘From‘] = me
  35. msg[‘To‘] = ";".join(to_list)
  36. msg.attach(MIMEText(content, ‘plain‘, ‘utf-8‘))
  37. for file in attachment:
  38. # add file:
  39. with open(file, ‘rb‘) as f:
  40. mime = MIMEText(f.read(), ‘base64‘, ‘gb2312‘)
  41. mime["Content-Type"] = ‘application/octet-stream‘
  42. mime["Content-Disposition"] = ‘attachment; filename=‘+file.split("/")[-1]
  43. # mime = MIMEBase(‘image‘, ‘png‘, filename=‘screenshot_at_2014-11-5_0_34_25.png‘)
  44. msg.attach(mime)
  45. try:
  46. s = smtplib.SMTP()
  47. s.connect(host)
  48. s.login(user,mail_pass)
  49. s.sendmail(me, to_list, msg.as_string())
  50. s.close()
  51. return True
  52. except Exception, e:
  53. print str(e)
  54. return False
  55. def _format_addr(s):
  56. name, addr = parseaddr(s)
  57. return formataddr(( \
  58. Header(name, ‘utf-8‘).encode(), \
  59. addr.encode(‘utf-8‘) if isinstance(addr, unicode) else addr))
  60. if __name__ == ‘__main__‘:
  61. if send_mail(["****@163.com","*****@qq.com"],"测试邮件","这是一封测试邮件",[]):
  62. print "发送成功"
  63. else:
  64. print "发送失败"

我们可以把它作为一个util,需要的时候直接import进来就可以了。

转自:http://blog.saymagic.cn/2014/11/19/python-send-email.html

python发送邮件

标签:电子邮件   python   邮件   测试   

原文地址:http://blog.csdn.net/saymagic/article/details/43909627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!