解读Python发送邮件

Python发送邮件需要smtplib和email两个模块。也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单。今天,就来好好学习一下使用Python发送邮件吧。

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

1.邮件正文是文本的格式

  1. # -*- coding: UTF-8 -*-
  2.  
  3. from email.mime.multipart import MIMEMultipart
  4. from email.mime.text import MIMEText
  5. import smtplib
  6. import sys
  7. import csv
  8. import xlrd
  9. from pyExcelerator import *
  10. import os
  11. import xlwt
  12. from xlutils.copy import copy
  13. import pyExcelerator
  14. import datetime
  15. import time
  16.  
  17. reload(sys)
  18. sys.setdefaultencoding("utf-8")
  19.  
  20. mailto_list = [""] # 邮件接收方的邮件地址
  21. mail_host = "smtp.exmail.qq.com" # 邮件传送协议服务器
  22. mail_user = "" # 邮件发送方的邮箱账号
  23. mail_pass = "" # 邮件发送方的邮箱密码
  24.  
  25. def send_mail(to_list, sub, content):
  26. me = "天才白痴梦"+"<"+mail_user+">"
  27. msg = MIMEText(content, _subtype='plain', _charset='utf-8')
  28. msg['Subject'] = sub # 邮件主题
  29. msg['From'] = me
  30. msg['To'] = ";".join(to_list)
  31. try:
  32. server = smtplib.SMTP()
  33. server.connect(mail_host)
  34. server.login(mail_user, mail_pass)
  35. server.sendmail(me, to_list, msg.as_string())
  36. server.close()
  37. return True
  38. except Exception, e:
  39. print str(e)
  40. return False
  41.  
  42. if __name__ == '__main__':
  43. sub = "天才白痴梦"
  44. content = '...'
  45. if send_mail(mailto_list, sub, content):
  46. print "发送成功"
  47. else:
  48. print "发送失败"

2.邮件正文是表格的格式:由于是表格,所以我们选择HTML来实现表格的功能,邮件上面显示的就是HTML实现的内容了。

  1. # -*- coding: UTF-8 -*-
  2.  
  3. from email.mime.multipart import MIMEMultipart
  4. from email.mime.text import MIMEText
  5. import smtplib
  6. import sys
  7. import csv
  8. import xlrd
  9. from pyExcelerator import *
  10. import os
  11. import xlwt
  12. from xlutils.copy import copy
  13. import pyExcelerator
  14. import datetime
  15. import time
  16.  
  17. reload(sys)
  18. sys.setdefaultencoding("utf-8")
  19.  
  20. mailto_list = [""] # 邮件接收方的邮件地址
  21. mail_host = "smtp.exmail.qq.com" # 邮件传送协议服务器
  22. mail_user = "" # 邮件发送方的邮箱账号
  23. mail_pass = "" # 邮件发送方的邮箱密码
  24.  
  25. def send_mail(to_list, sub, content):
  26. me = "天才白痴梦"+"<"+mail_user+">"
  27. # 和上面的代码不同的就是,这里我们选择的是html 的格式
  28. msg = MIMEText(content, _subtype='html', _charset='utf-8')
  29. msg['Subject'] = sub # 邮件主题
  30. msg['From'] = me
  31. msg['To'] = ";".join(to_list)
  32. try:
  33. server = smtplib.SMTP()
  34. server.connect(mail_host)
  35. server.login(mail_user, mail_pass)
  36. server.sendmail(me, to_list, msg.as_string())
  37. server.close()
  38. return True
  39. except Exception, e:
  40. print str(e)
  41. return False
  42.  
  43. if __name__ == '__main__':
  44. sub = "天才白痴梦"
  45. html = '<html></html>'
  46. if send_mail(mailto_list, sub, html):
  47. print "发送成功"
  48. else:
  49. print "发送失败"

3.邮件正文是图片的格式:要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。

  1. def send_mail(to_list, sub, content):
  2. me = "天才白痴梦"+"<"+mail_user+">"
  3.  
  4. msg = MIMEMultipart()
  5. msg['Subject'] = sub # 邮件主题
  6. msg['From'] = me
  7. msg['To'] = ";".join(to_list)
  8.  
  9. txt = MIMEText("天才白痴梦", _subtype='plain', _charset='utf8')
  10. msg.attach(txt)
  11.  
  12. # <b>:黑体 <i>:斜体
  13. msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
  14. msg.attach(msgText)
  15.  
  16. file1 = "F:\\1.jpg"
  17. image = MIMEImage(open(file1, 'rb').read())
  18. image.add_header('Content-ID', '<image1>')
  19. msg.attach(image)
  20.  
  21. try:
  22. server = smtplib.SMTP()
  23. server.connect(mail_host)
  24. server.login(mail_user, mail_pass)
  25. server.sendmail(me, to_list, msg.as_string())
  26. server.close()
  27. return True
  28. except Exception, e:
  29. print str(e)
  30. return False
  31.  
  32. if __name__ == '__main__':
  33. sub = "天才白痴梦"
  34. html = '<html></html>'
  35. if send_mail(mailto_list, sub, html):
  36. print "发送成功"
  37. else:
  38. print "发送失败"

4.发送邮件附件:邮件附件是图片

  1. def send_mail(to_list, sub, content):
  2. me = "天才白痴梦"+"<"+mail_user+">"
  3.  
  4. msg = MIMEMultipart()
  5. msg['Subject'] = sub # 邮件主题
  6. msg['From'] = me
  7. msg['To'] = ";".join(to_list)
  8.  
  9. txt = MIMEText("天才白痴梦", _subtype='plain', _charset='utf8')
  10. msg.attach(txt)
  11.  
  12. # # <b>:黑体 <i>:斜体
  13. # msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
  14. # msg.attach(msgText)
  15. #
  16. # file1 = "F:\\1.jpg"
  17. # image = MIMEImage(open(file1, 'rb').read())
  18. # image.add_header('Content-ID', '<image1>')
  19. # msg.attach(image)
  20.  
  21. att = MIMEText(open('F:\\1.jpg', 'rb').read(), 'base64', 'utf-8')
  22. att["Content-Type"] = 'application/octet-stream'
  23. att["Content-Disposition"] = 'attachment; filename="1.jpg"'
  24. msg.attach(att)
  25.  
  26. try:
  27. server = smtplib.SMTP()
  28. server.connect(mail_host)
  29. server.login(mail_user, mail_pass)
  30. server.sendmail(me, to_list, msg.as_string())
  31. server.close()
  32. return True
  33. except Exception, e:
  34. print str(e)
  35. return False

5.发送群邮件:同时发送给多人

  1. mailto_list = [""] # 邮件接收方的邮件地址

上面这一行代码是邮件接收方的邮件地址,如果我们需要给多人发送邮件的话,就只需要把对方的邮件帐号绑在这一个列表里就ok了。

加密SMTP

使用标准的25端口连接SMTP服务器时,使用的是明文传输,发送邮件的整个过程可能会被窃听。要更安全地发送邮件,可以加密SMTP会话,实际上就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。

方法:只需要在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接。

  1. smtp_server = 'smtp.qq.com'
  2. smtp_port = 25 # 默认端口号为25
  3. server = smtplib.SMTP(smtp_server, smtp_port)
  4. server.starttls()
  5. # 剩下的代码和前面的一模一样:
  6. server.set_debuglevel(1) # 打印出和SMTP服务器交互的所有信息

解读Python发送邮件的更多相关文章

  1. python发送邮件

    python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...

  2. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  3. python 发送邮件实例

    留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例

  4. python 发送邮件例子

    想到用python发送邮件 主要是服务器 有时候会产生coredump文件  ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生cored ...

  5. 全面解读Python Web开发框架Django

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  6. 利用python发送邮件

    找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...

  7. 用Python发送邮件

    文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...

  8. ETL过程跑完后,使用python发送邮件

    目标库中,如果有行数为0的表,使用python发送邮件 # -*- coding:utf-8 -*- # Author: zjc # Description:send monitor info to ...

  9. 【转】【Python】Python发送邮件(常见四种邮件内容)

    在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...

随机推荐

  1. IOS开发UI基础之UIButton

    什么是按钮?

  2. IOS学习笔记之 Socket 编程

    最近开始静心学习IOS编程,虽然起步有点晚,但有句话说的好:“如果想去做,任何时候都不晚”.所以在今天,开始好好学习IOS.(本人之前4年都是搞.Net的,java也培训过一年) 打算学IOS,从哪入 ...

  3. jdbc中的细节

    JDBC 架构:JDBC 的 API 支持两层和三层处理模式进行数据库的访问,但是一般的JDBC架构由两层处理模式组成.(1)JDBC API:提供了应用程序对 JDBC 管理器的连接(2)JDBC ...

  4. 2015年百度之星初赛(1) --- F 矩形面积

    矩形面积 Problem Description 小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些矩形包围起来的面积最小的矩形的面积是多少.   Input 第一行一个正整数 T, ...

  5. Manacher算法 - 求最长回文串的利器

    求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...

  6. Winform开发框架之权限管理系统改进的经验总结(4)--用户分级管理

    在实际的系统应用环境中,用户的分级管理一般也是比较常见的功能,小的业务系统可以不需要,但是一般涉及到集团.分子公司.或者是事业单位里面的各个处室或者某某局的人员管理,这些分级管理就显得比较必要,否则单 ...

  7. AEAI ESB V3.5.4开源发布,应用集成平台

    AEAI ESB 应用集成平台为数通畅联的核心产品,本着分享传递的理念,数通畅联将ESB管理控制台项目开源,目的在于满足客户与伙伴的OEM需求,以及为广大IT爱好者的集成工具提供多一种选择,多一种便利 ...

  8. wget进行整站下载

    wget加上参数之后,即可成为相当强大的下载工具. wget -r -p -np -k http://xxx.com/abc/ -r,  --recursive(递归)          specif ...

  9. javascript indexOf startWith

    判断字符串是否以XX开头 1.切割转换   var str = "ababaa",tags = jquery.trim(str); 2. indexOf方法运行   !tags.i ...

  10. [Windows Phone] APP上架,遇到错误2001的解决方案。(Error:2001)

    [Windows Phone] APP上架,遇到错误2001的解决方案.(Error:2001) 问题情景 最近在开始玩Windows Phone的开发,开发的过程中虽然有点小挫折,但是参考网络许多前 ...