python自动发邮件脚本及使用smtplib库和yagmail库

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

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

1.连接SMTP服务器

2.登陆用户名和密码

3.发送指定邮件内容

4.退出SMTP连接

          使用smtplib库

一、发送纯文本格式邮件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

#coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import smtplib

from smtplib import SMTP

from email.mime.text import MIMEText

from email.header import Header

 

#构造纯文本邮件内容

msg = MIMEText('hello,send by Python.....','plain','utf-8')

 

#发送者邮箱

sender = 'xxxxx@XXXXX.com.cn'

 

#发送者的登陆用户名和密码

user = 'xxxxx@XXXX.com.cn'

password = 'xxxxxx'

 

#发送者邮箱的SMTP服务器地址

smtpserver = 'xxxx'

 

#接收者的邮箱地址

receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个list

 

smtp = smtplib.SMTP() #实例化SMTP对象

smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定

smtp.login(user,password) #登陆smtp服务器

smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数

'''

login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文

是一个str,as_string()把MIMEText对象变成str。

'''

smtp.quit()

运行之后就会收到邮件:

 

但是仔细观察会发现:

1.邮件没有主题

2.看不到收件人的信息

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

1

2

3

4

5

msg = MIMEText('hello,send by Python.....','plain','utf-8')

msg['From'] = Header('Python测试','utf-8')

msg['To'] = Header('管理员','utf-8')

subject = 'python SMTP 测试邮件'

msg['Subject'] = Header(subject,'utf-8')

二、发送HTML格式的邮件

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

1

2

msg = MIMEText('<html><h1>你好!<h1><html>','html','utf-8')

#发送HTML格式邮件就只需要把对应的第二个参数改为html即可

三、发送带附件的邮件

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

#coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.header import Header

 

#发送邮件服务器

smtpserver = 'xxxxx'

#发送邮箱用户名和密码

user = 'xxxxxx'

password = 'xxxxxx'

#发送邮箱

sender = 'xxxxx'

#接受邮箱

receiver = 'xxxxxxx'

 

#创建一个带附件的实例

message = MIMEMultipart()

message['From'] = Header('Python 测试','utf-8')

message['To'] = Header('测试','utf-8')

subject = 'Python SMTP邮件测试'

message['Subject'] = Header(subject,'utf-8')

 

#邮件正文内容

message.attach(MIMEText('这是测试Python发送附件功能....','plain','utf-8'))

 

#构造附件1,传送当前目录下的test.txt文件

att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8')

att1['Content-Type'] = 'application/octet-stream'

#这里的filename可以任意写,写什么名字 邮件中就显示什么名字

att1['Content-Disposition'] = 'attachment;filename:"123.txt"'

message.attach(att1)

 

smtp = smtplib.SMTP()

smtp.connect(smtpserver,25)

smtp.login(user,password)

smtp.sendmail(sender,receiver,message.as_string())

smtp.quit()

小结

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

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

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

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

 

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 发送邮箱服务器
smtpserver = 'smtp.sina.com'
# 发送邮箱用户/密码
user = 'username@sina.com'
password = '123456'
# 发送邮箱
sender = 'username@sina.com'
# 接收邮箱
receiver = 'receive@126.com'
# 发送邮件主题
subject = 'Python email test'

# 编写HTML类型的邮件正文
msg = MIMEText('<html><h1>你好!</h1></html>','html','utf-8')
msg['Subject'] = Header(subject, 'utf-8')


# 连接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

其实,这段代码也并不复杂,只要你理解使用过邮箱发送邮件,那么以下问题是你必须要考虑的:

  • 你登录的邮箱帐号/密码
  • 对方的邮箱帐号
  • 邮件内容(标题,正文,附件)
  • 邮箱服务器(SMTP.xxx.com/pop3.xxx.com)

 

使用yagmail 实现发邮件

yagmail 可以更简单的来实现自动发邮件功能。

github项目地址: https://github.com/kootenpv/yagmail

安装

pip install yagmail

简单例子

import yagmail

#链接邮箱服务器
yag = yagmail.SMTP( user="user@126.com", password="1234", host='smtp.126.com')

# 邮箱正文
contents = ['This is the body, and here is just text http://somedomain/image.png',
            'You can find an audio file attached.', '/local/path/song.mp3']

# 发送邮件
yag.send('taaa@126.com', 'subject', contents)

总共四行代码搞定,是不是比上面的例子简单太多了。

给多个用户发送邮件

# 发送邮件
yag.send(['aa@126.com','bb@qq.com','cc@gmail.com'], 'subject', contents)

只需要将接收邮箱 变成一个list即可。

发送带附件的邮件

# 发送邮件
yag.send('aaaa@126.com', '发送附件', contents, ["d://log.txt","d://baidu_img.jpg"])

只需要添加要发送的附件列表即可。

我都快感动哭了,到哪儿去找这么良心库去?简单的有点不像编程语言!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值