Python 自动发送邮件

简单邮件传输协议(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 = ‘[email protected]‘
18 password = ‘xxxxxx‘
19
20 #发送者邮箱的SMTP服务器地址
21 smtpserver = ‘xxxx‘
22
23 #接收者的邮箱地址
24 receiver = [‘[email protected]‘,‘[email protected]‘] #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文档查看它们所在的包以及详细的用法。

时间: 2024-10-29 19:11:08

Python 自动发送邮件的相关文章

使用python自动发送邮件

最近研究邮件透明加密技术,,需要使用脚本自动发送邮件测试,于是使用python写了一个小程序.程序可以自动选择不定数量的附件,随机选择主题,随机选择正文,然后自由组合发送,非常适合邮件方面的测试任务.顺便说一下邮件透明加密技术和市场上的其他邮件加密技术相比再部署上非常简单."透明"二字就是部署不改变用户原有习惯,目前的产品有天御云安的隐密邮,网址是https://mail.tyyunan.com/, 各位感兴趣的可以看一下. # -*- coding: utf-8 -*- __vers

利用Python自动发送邮件

# -*- coding:utf-8 -*-from email.mime.text import MIMETextfrom email.header import Headerimport smtplib def send_mail(file_new): f = open(file_new,'rb') mail_body = f.read() f.close() msg = MIMEText(mail_body,'html','utf-8')  msg['Subject'] = Header(

Appium+python 自动发送邮件(1)

SMTP:简单传输协议,实在Internet上传输Email的事实标准. Python的smtplib模块提供了一种很方便的途径来发送电子邮件,它对SMTP协议进行了简单的封装. python中发送邮件除了SMTP模块外,还需用到email模块.email模块主要用来定义邮件的标题.正文.附件. 一.SMTP的方法 1.SMTP模块的方法 connect(host,port) host:指定连接的邮箱服务器 port:指定连接服务器的端口号 login(user,passwork) user:登

python自动发送邮件

Python 的 smtplib 模块提供了发送电子邮件的功能.测试报告出来后,然后就把报告发送到邮箱. 一.先来看简单的列子 使用QQ邮箱发送邮件,使用的是授权码,需要先到QQ邮箱申请授权码. 邮箱设置-->账户 # coding:utf-8 import smtplib from email.mime.text import MIMEText # 参数配置 smtpserver = "smtp.qq.com" # 发送邮件的服务器 port = 465 # 端口 sender

Appium+python 自动发送邮件(2)

移动端执行完测试case之后,通过邮件自动发送测试报告.大体流程如下: 1.通过unittest框架的discover()发现所有测试用例 2.使用HTMLTestRunner的run()方法运行测试用例,生成HTML测试报告 3.寻找测试报告目录下的最新测试报告,返回最新测试报告的路径 4.将最新测试报告路径传给send_mail()函数,发送带HTML格式的邮件 # coding:utf-8 import unittest import time import smtplib import

python+selenium 发送邮件

import time from selenium import webdriver from selenium.webdriver import ChromeOptions from selenium.webdriver.common.keys import Keys from getpass import getpass def run(): driver.get(url='https://mail.qq.com/') # 遇到iframe,需要切换 iframe_list = driver

在服务器上使用python自动获取zabbix上图形并发送邮件

由于某些需求,需要每天发送邮件给相关人员,其中包含前一天的zabbix监控图形,每天登陆并手动发送的话很麻烦. 本着简单重复的工作交给机器做的原则,写了个python程序自动获取图形并发送. 大致的思路是: 模拟登陆zabbix ---> 找到需要的图像并下载到本地 --->使用python发送邮件 一.在服务器上模拟登陆zabbix,并且将需要的图像下载到本地 #!/usr/bin/env python # -*- coding:utf-8 -*- import HTMLParser imp

Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码

*注意:全文代码可左右滑动观看 在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使用 Python 封装发送邮件代码的. 一般发邮件方法 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. 我们以前在通过Python实现自动化邮件功能的时候是这样的: import smtplibfrom email.mime.text import MIMETextfrom email

python之发送邮件~

在之前的工作中,测试web界面产生的报告是自动使用python中发送邮件模块实现,在全部自动化测试完成之后,把报告自动发送给相关人员 其实在python中很好实现,一个是smtplib和mail俩个模块来实现,主要如下: import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBaseimport