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

Python 自动发送邮件

时间:2017-12-12 17:49:22      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:head   依次   open   正文   机器   tp服务器   退出   osi   自动   

简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。

SMTP通讯的基本流程可以概括为以下几点:

1.连接SMTP服务器

2.登陆用户名和密码

3.发送指定邮件内容

4.退出SMTP连接

 

一、发送纯文本格式邮件

 1 #coding:utf-8
 2 import sys
 3 reload(sys)
 4 sys.setdefaultencoding(utf8)
 5 import smtplib
 6 from smtplib import SMTP
 7 from email.mime.text import MIMEText
 8 from email.header import  Header
 9 
10 #构造纯文本邮件内容
11 msg = MIMEText(hello,send by Python.....,plain,utf-8)
12 
13 #发送者邮箱
14 sender = ‘xxxxx@XXXXX.com.cn
15 
16 #发送者的登陆用户名和密码
17 user = xxxxx@XXXX.com.cn
18 password = xxxxxx
19 
20 #发送者邮箱的SMTP服务器地址
21 smtpserver = xxxx
22 
23 #接收者的邮箱地址
24 receiver = [xxxxxx@qq.com,xxxxxx@outlook.com] #receiver 可以是一个list
25 
26 smtp = smtplib.SMTP() #实例化SMTP对象
27 smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定
28 smtp.login(user,password) #登陆smtp服务器
29 smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数
30 ‘‘‘
31 login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文
32 是一个str,as_string()把MIMEText对象变成str。
33 ‘‘‘
34 smtp.quit()

 

运行之后就会收到邮件:

技术分享图片

 

但是仔细观察会发现:

1.邮件没有主题

2.看不到收件人的信息

这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把FromToSubject添加到MIMEText,才是一封完整的邮件:

1 msg = MIMEText(hello,send by Python.....,plain,utf-8)
2 msg[From] = Header(Python测试,utf-8)
3 msg[To] = Header(管理员,utf-8)
4 subject = python SMTP 测试邮件
5 msg[Subject] = Header(subject,utf-8)

 

二、发送HTML格式的邮件

如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了:

1 msg = MIMEText(<html><h1>你好!<h1><html>,html,utf-8) #发送HTML格式邮件就只需要把对应的第二个参数改为html即可

 

三、发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

 1 #coding:utf-8
 2 import sys
 3 reload(sys)
 4 sys.setdefaultencoding(utf8)
 5 import smtplib
 6 from email.mime.text import MIMEText
 7 from email.mime.multipart import MIMEMultipart
 8 from email.header import Header
 9 
10 #发送邮件服务器
11 smtpserver = xxxxx
12 #发送邮箱用户名和密码
13 user = xxxxxx
14 password = xxxxxx
15 #发送邮箱
16 sender = xxxxx
17 #接受邮箱
18 receiver = xxxxxxx
19 
20 #创建一个带附件的实例
21 message = MIMEMultipart()
22 message[From] = Header(Python 测试,utf-8)
23 message[To] = Header(测试,utf-8)
24 subject = Python SMTP邮件测试
25 message[Subject] = Header(subject,utf-8)
26 
27 #邮件正文内容
28 message.attach(MIMEText(这是测试Python发送附件功能....,plain,utf-8))
29 
30 #构造附件1,传送当前目录下的test.txt文件
31 att1 = MIMEText(open(123.txt,rb).read(),base64,utf-8)
32 att1[Content-Type] = application/octet-stream
33 #这里的filename可以任意写,写什么名字 邮件中就显示什么名字
34 att1[Content-Disposition] = attachment;filename:"123.txt"
35 message.attach(att1)
36 
37 smtp = smtplib.SMTP()
38 smtp.connect(smtpserver,25)
39 smtp.login(user,password)
40 smtp.sendmail(sender,receiver,message.as_string())
41 smtp.quit()

小结

使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。

构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。

 

Python 自动发送邮件

标签:head   依次   open   正文   机器   tp服务器   退出   osi   自动   

原文地址:http://www.cnblogs.com/stephenmc/p/8028411.html

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