Fork me on GitHub

python☞自动发送邮件

SMTP协议

SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式

smtplib模块

Python的smptlib模块提供了一种很方便的途径来发送电子邮件。它对SMTP协议进行了简单的封装。们可以使用SMTP对象的sendmail发放发送邮件,首先我们看下此模块重要的方法如何使用

1.connect(self,host='localhost',port=0)

host:邮件服务器地址

port:邮件服务器端口(不输入参数默认为25)

2.login(self,user,password)

user:登录邮箱用户名

password:登录邮箱密码

3.sendmail(self,from_addr,to_addrs,msg)

from_addr:发送邮件人地址

to_addrs:接受邮件人地址

msg:发送的内容

一般我们发送邮件时有两种方式。

方式一:自己邮箱的web页面,输入用户名和密码登录,打开发邮件页面,填写对方的邮箱地址及邮件标题与正文,完成后点击发送。

方式二:下载安装邮箱客户端,填写邮箱账号密码及邮箱服务器,一般的邮箱客户端会默认记下这些信息,所以,这个过程只需要填写依次,后面发邮件的过程与方法一相同。而我们通过python发送邮件更像方式二,因为需要填写邮箱服务器。

实例

我使用的测试邮箱系统为QQ邮箱,在进行测试之前我们需要设置一下QQ邮箱,获取QQ邮箱的授权码(授权码是用于登录第三方邮件客户端的专用密码)用来以后登录邮箱时的密码,对于其他邮箱如何获取授权码请自行百度

1.打开QQ邮箱,依次点击【设置】-【账户】如图1:

图1:

2.找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”操作列表,图2:

3.开启前2个服务,并点击【生成授权码】,我这边得到的授权码为:gifhhsbgqyovbhhc

实现代码

这边我是读取文件中的内容充当发送邮件内容的,若想测试可以把传递的参数去掉,并注释掉14-20行,加一行file_msg='<html><h1> python test send imail</h1></html>'

 1 #! user/bin/python
 2 '''
 3 代码说明:自动发送邮件
 4 编写日期:2018.07.16
 5 设计者:linux超
 6 '''
 7 
 8 import smtplib
 9 from email.mime.text import MIMEText
10 from email.header import Header
11 import time
12 
13 def send_email(filename):
14     #   打开报告文件读取文件内容
15     #filename = './report/'+ time.strftime('%Y-%m-%d %H_%M_%S')
16     f = open(filename,'r')
17     file_msg = f.read()
18     #print(filename)
19     #print(file_msg)
20     f.close()
21     #   邮件服务器
22     smtpserver = 'smtp.qq.com'
23     #   发件人用户名和密码
24     user = 'username@qq.com'
25     password = 'gifhhsbgqyovbhhc'
26     #   发件人
27     sender = 'sender@qq.com'
28     #   收件人
29     receiver = 'receiver@qq.com'
30     #   邮件主题
31     subject = 'Python test send email' 
32     #   邮件设置
33     msg = MIMEText(file_msg,'html','utf-8')
34     msg['subject'] = Header(subject,'utf-8')
35     msg['from'] = sender
36     #   连接服务器,登录服务器,发送邮件
37     smtp = smtplib.SMTP()
38     smtp.connect(smtpserver,465)
39     smtp.login(user,password)
40     try41         smtp.sendmail(sender,receiver,msg.as_string())
42     except Exception as e:
43          print('send failed',e)
44     else:
45          print('send success!')
46     smtp.quit()#   结束SMTP会话 
47     print('send email success!')
48 if __name__ == '__main__':
49     send_email('./report/2018-07-16 13_09_21.txt')

5.结果:

总结: 后续会填加发送带附件的案例

posted @ 2018-07-16 16:18  linux超  阅读(817)  评论(0编辑  收藏  举报