解读Python发送邮件

解读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  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  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服务器交互的所有信息
时间: 2024-10-19 22:10:29

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

【转载】python发送邮件实例

本文转自:http://www.cnblogs.com/lonelycatcher/archive/2012/02/09/2343463.html 这几天要用python发送邮件,上网找到这篇文章感觉蛮全面的,故转载收藏之. 1. 文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header send

全面解读python web 程序的9种部署方式

python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构 web server ---->application -----> DB server 主流的web server 一个巴掌就能数出来,apache,lighttpd,nginx,iis application,中文名叫做应用服务,就是你基于某个web framework写的应用代码 DB server 泛指存储服务,web开发中用mysql比较多,最近几年因为网站规模扩大,memcache

python发送邮件(一)

最近设计了一个小的应用程序,主要是根据文件中邮件地址发送一份excel中内容,并且在接受方收到邮件都是以网页的格式呈现的. 下面主要是对python发送邮件涉及到的部分知识点做个总结 一.先介绍一下Smtp协议和POP3协议 SMTP (Simple Mail Transfer Protocol) http://www.rfc-editor.org/info/rfc821    RFC821文档详细描述了这个协议信息: 邮件传送代理 (Mail Transfer Agent,MTA) 程序使用S

全面解读Python Web开发框架Django

全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yoursef). 花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又 重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTM

python发送邮件的脚本

python发送邮件的脚本,带有邮件内容与附件,邮件内容为串格式,附件为文件.如果想把某个目录下的所有文件当作附件发送,那请去掉注释. 代码如下: #!/usr/bin/python #coding utf-8 from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email import Utils, E

使用python发送邮件

最近需要做一个功能,统计bug的数量,然后发邮件给指定人,所有就先要了解一下使用python发送邮件 代码如下: #coding: utf-8 import smtplib from email.MIMEText import MIMETextfrom email.Header import Header sender = '[email protected]'       #发件人 receiver = ['[email protected]','[email protected]']   #

python 发送邮件例子

想到用python发送邮件 主要是服务器 有时候会产生coredump文件  ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生coredump文件就可以发送邮件给开发者让其立马知道 下面只介绍简单的发送脚本 如果需要在生产环境用起来  还需要按要求修改脚本 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连

PHP调用Python发送邮件

1 简介 在PHP中发送邮件,通常都是封装一个php的smtp邮件类来发送邮件.但是PHP底层的socket编程相对于python来说效率是非常低的.CleverCode同时写过用python写的爬虫抓取网页,和用php写的爬虫抓取网页.发现虽然用了php的curl抓取网页,但是涉及到超时,多线程同时抓取等等.不得不说python在网络编程的效率要比PHP好的多. PHP在发送邮件时候,自己写的smtp类,发送的效率和速度都比较低.特别是并发发送大量带有附件报表的邮件的时候.php的效率很低.建

Python发送邮件(常见四种邮件内容)

Python发送邮件(常见四种邮件内容) 转载 2017年03月03日 17:17:04 转自:http://lizhenliang.blog.51cto.com/7876557/1875330 在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调用运营商邮箱服务器. 对于Python来说,需要编写脚本调用邮件服务器来发送邮件,使用的协议是SMTP.