首页 编程 软件学院 查看内容

python发送邮件的代码封装

2015-6-2 11:51 |来自: blog.saymagic.cn 1798 0

摘要: python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。但由于这个smtplib用起来也不是特别方便,于是我对smtplib的各个参数作了进一步加工。写了一个比较实用的发送邮件的函数。整个 ...
关键词: mail 参数 发件人 content smtplib mime import user email attachment

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(["[email protected]"],"sub","content","/Users/lanyy/Desktop/screenshot_at_2014-11-5_0_34_25.webp","/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.webp')
  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 "发送成功"

完成

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部