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

Python的smtplib模块提供了一种很方便的途径用来发送电子邮件。它对SMTP协议进行了简单的封装。我们可以使用SMTP对象的sendmail方法发送邮件,通过help()查看SMTP所提供的方法如下。

导入SMTP对象,通过help()查看对象的注释,从中找到相关方法的使用说明。connect(host,port)方法参数说明如下。

●host:   指定连接的邮箱服务器。

●port:     指定连接服务器的端口号。

login(user, password)方法参数说明如下。

●user:     登录邮箱用户用。

●password: 登录邮箱密码。

sendmaiI(from_addr, to_addrs, msg,..)方法参数说明如下。

●from_addr: 邮件发送者地址。

●to_addrs: 字符串列表,邮件发送地址。

●msg:     发送消息。

quit()方法:用于结束SMTP会话。

一般我们发邮件时有两种方式。方式一:自己邮箱的Web页面(如mail.126.com), 输入自己邮箱的用户名和密码登录,打开发邮件页面,填写对方的邮箱地址及邮件标题与正文,完成后单击发送。方式

二:下载安装邮箱客户端(如Outlook、Foxmail等),填写邮箱账号、密码及邮箱服务器(如smtp.126.com), —般的邮箱客户端会默认记下这些信息,所以,这个过程只需填写一次,后面发邮件的过程与方法一相同.

而我们通过Python的SMTP对象发邮件则更像方式二,因为需要填写邮箱服务器。

当然,在具体发邮件时会涉及诸多需求,例如,邮件的正文的格式、是否带图片、邮件,是否需要添加附件(及多附件)、邮件是否需要同时向多人发送等。

SMTP (Simple Mail Transfer Protocol)   

邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件。大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。   

SMTP协议的一个重要特点是它能够接力传送邮件。它工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。

POP3 (Post Office Protocol) & IMAP (Internet Message Access Protocol)   

POP协议和IMAP协议是用于邮件接收的最常见的两种协议。几乎所有的邮件客户端和服务器都支持这两种协议。   

POP3协议为用户提供了一种简单、标准的方式来访问邮箱和获取电邮。使用POP3协议的电邮客户端通常的工作过程是:连接服务器、获取所有信息并保存在用户主机、从服务器删除这些消息然后断开连接。POP3协议的默认TCP端口号是110。   

IMAP协议也提供了方便的邮件下载服务,让用户能进行离线阅读。使用IMAP协议的电邮客户端通常把信息保留在服务器上直到用户删除。这种特性使得多个客户端可以同时管理一个邮箱。IMAP协议提供了摘要浏览功能,可以让用户在阅读完所有的邮件到达时间、主题、发件人、大小等信息后再决定是否下载。IMAP协议的默认TCP端口号是143。

MIME (Multipurpose Internet Mail Extensions) (RFC 1341)   

MIME扩展邮件的格式,用以支持非ASCII编码的文本、非文本附件以及包含多个部分 (multi-part) 的邮件体等。

在基于互联网的应用中,程序经常需要自动地发送电子邮件。如:一个网站的注册系统会在用户注册时发送一封邮件来确认注册;当用户忘记登陆密码的时候,通过邮件来取回密码。smtplib模块是Python中smtp(简单邮件传输协议)的客户端实现。我们可以使用smtplib模块,轻松的发送电子邮件。

smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   

SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接我们可以向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件)。 该类提供了许多方法,将在下面介绍。它的所有参数都是可选的,其中host参数表示smtp服务器主机名,上面例子中的smtp主机 为"smtp.sina.com";port表示smtp服务的端口,默认是25;如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。   

   smtplib.SMTP提供的方法:

SMTP.set_debuglevel(level)   设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息。

SMTP.connect([host[, port]])   连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号(如:smpt.sina.com:25),这样就没必要给出port参数。

SMTP.docmd(cmd[, argstring])  向smtp服务器发送指令。可选参数argstring表示指令的参数。下面的例子完全通过调用docmd方法向服务器发送指令来实现邮件的发送。

SMTP.helo([hostname])                  使用"helo"指令向服务器确认身份。相当于告诉smtp服务器“我是谁”。

SMTP.login(user, password)   登陆到smtp服务器。现在几乎所有的smtp服务器,都必须在验证用户信息合法之后才允许发送邮件。

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])   

发送邮件。这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

msg的意思表示邮件发件人、收件人、邮件标题、邮件内容。细心的你可能会疑问:如果要发送的邮件内容很复杂,包含图片、视频、附件等内容,按照msg的格式来拼接字符串,将是一件非常麻烦的事。不用担心,python已经考虑到了这点,它为我们提供了email模块,使用该模块可以轻松的发送带图片、视频、附件等复杂内容的邮件。

SMTP.quit()   断开与smtp服务器的连接,相当于发送"quit"指令。

email及其相关子模块   

emial模块用来处理邮件消息,包括MIME。使用这些模块来定义邮件的内容,是非常简单的。

下面是一些常用的类:

class email.mime.multipart. MIMEMultipart: 处理包括多个部分邮件体。

class email.mime.audio. MIMEAudio: 处理音频对象。

class email.mime.image. MIMEImage: 处理图像对象。

class email.mime.text. MIMEText: MIME文本对象。

知识拓展:

普通文本邮件:普通文本邮件的实现,关键是将MIMEText中参数_subtype设置为plain或者text。

HTML格式邮件:关键是将MIMEText中参数_subtype设置为html。

发送带附件的邮件:首先创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可一次构造。MIMEText中参数_subtype设置为base64。

发送附件邮件实例代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart #导入带附件 #发送邮箱服务器
smtpserver = 'smtp.sina.com'
#发送邮箱用户、密码
user = 'lili1505115417@sina.com'
password = 'lili123456'
#发送邮箱
sender = 'lili1505115417@sina.com'
#接收邮箱
receiver = 'lili1505115417@126.com'
#发送邮件主题
subject = 'python email test33' #发送附件
sendFile = open(r'C:\Users\Administrator\Desktop\log.txt','rb').read()
#构造附件
att = MIMEText(sendFile,'base64','utf-8')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment;filename="log.txt"'
#采用related定义内嵌资源邮件体,可以去掉
msg = MIMEMultipart('related')
msg['subject'] = subject
msg.attach(att) #编写邮件正文
#msg = MIMEText('<html><h1>您好!</h1></html>','html','utf-8')
#要加上msg['From']这句话,否则报错554
msg['From'] = 'lili1505115417@sina.com'
msg['To'] = 'lili1505115417@126.com'
#msg['Subject'] = Header(subject,'utf-8') #连接发送邮件
smtp = smtplib.SMTP()#SMTP类构造函数,表示与SMTP服务器之间的连接
smtp.connect(smtpserver,25)# 连接到指定的smtp服务器。参数分别表示smpt主机和端口。
#在163邮箱设置授权码否则报错535
smtp.login(user,password)#登陆到smtp服务器
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

查找最新的测试报告实例代码:

import os

#定义测试报告的目录
result_dir = r'E:\selenium+puthon+pycharm学习\test_project\test_case'
lists = os.listdir(result_dir)
#重新按时间对目录下的文件进行排序
#sort按key的关键字进行排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间
#最后对lists元素,按文件修改时间大小从小到大排序。
lists.sort(key=lambda fn:os.path.getmtime(result_dir+'\\'+fn))
print(('最新的文件为:'+lists[-1]))
file = os.path.join(result_dir,lists[-1])
print(file)

什么是lambda函数?

简单来说,上述编程中提到的 lambda函数,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。现在我们就来创建一个lambda函数,实际上,lambda就是一个没有名称的函数,它可能是临时需要用到的一个小函数,所以我们不希望费劲的用def关键字来定义一个函数,而是直接通过lambda定义一个函数:

answer = lambda  x : x*7,这个Lambda函数的参数是x,然后,它会将x与7进行乘法运算,然后将这个lambda函数赋值给answer。这是一个非常小而且简单的lambda函数,冒号的左边是它的参数,冒号的右边是它的具体实现,这个函数没有名称。

python os模块 常用命令介绍?

python编程时,经常和文件、目录打交道,这是就离不了os模块。os模块包含普遍的操作系统功能,与具体的平台无关。以下列举常用的命令:

1. os.getcwd()——得到当前工作的目录。

2. os.listdir()——指定所有目录下所有的文件和目录名。以列表的形式全部列举出来,其中没有区分目录和文件。

3. os.remove()——删除指定文件

4. os.rmdir()——删除指定目录

5. os.mkdir()——创建目录    

注意:这样只能建立一层,要想递归建立可用:os.makedirs()

6. os.path.isfile()——判断指定对象是否为文件。是返回True,否则False

7. os.path.isdir()——判断指定对象是否为目录。是True,否则False。

8. os.path.exists()——检验指定的对象是否存在。是True,否则False.例:

9. os.path.split()——返回路径的目录和文件名。

10. os.system()——执行shell命令。os.system('cmd') #启动dos

11. os.chdir()——改变目录到指定目录

12. os.path.getsize()——获得文件的大小,如果为目录,返回0

13. os.path.abspath()——获得绝对路径。

14. os.path.join(path, name)——连接目录和文件名。

15.os.path.basename(path)——返回文件名

16. os.path.dirname(path)——返回文件路径

10. os.system()——执行shell命令。os.system('cmd') #启动dos

11. os.chdir()——改变目录到指定目录

12. os.path.getsize()——获得文件的大小,如果为目录,返回0

13. os.path.abspath()——获得绝对路径。

 
 

14. os.path.join(path, name)——连接目录和文件名。

15.os.path.basename(path)——返回文件名

16. os.path.dirname(path)——返回文件路径

web端自动化——Python的smtplib发送电子邮件的更多相关文章

  1. web端自动化——python多线程

    Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁.threading基于Java的线程模型设计. 锁(Lock)条件变 ...

  2. web端自动化——Python读取txt文件、csv文件、xml文件

    1.读取txt文件 txt文件是我们经常操作的文件类型,Python提供了以下几种读取txt文件的方式. 1)read(): 读取整个文件. 2)readline(): 读取一行数据. 3)readl ...

  3. 接口自动化、移动端、web端自动化如何做?

    1.<Python+Appium移动端自动化项目实战>-带您进入APP自动化测试的世界https://yuedu.baidu.com/ebook/765b38a5690203d8ce2f0 ...

  4. web端自动化——Selenium3+python自动化(3.7版本)-火狐62版本环境搭建

    前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium3为基础. 一.selenium简介 Sel ...

  5. web端自动化——Selenium3+python自动化(3.7版本)-chrome67环境搭建

    前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium3为基础. 一.selenium简介 Sel ...

  6. web端自动化——selenium3用法详解

    selenium中文学习文档链接:https://selenium-python-zh.readthedocs.io/en/latest/getting-started.html selenium3+ ...

  7. 初识python 之 smtplib 发送(dolphinscheduler任务监测)邮件

    需求 监测dolphinscheduler调度系统,任务执行异常情况.如有异常,则发送邮件通知. 处理思路 因DS本身自带的邮件发送功能,不能正常发送邮件. 故而,通过查询DS源数据表,获取当前任务执 ...

  8. 移动端穿插着PC端自动化-Python基础(干货)

    1.前面已经把所有前期工作完成了 下面进行一些简单的小脚本来更好的了解Python.对Python有一些基础的童鞋理解起来会比较容易,我刚接触的时候也会有点懵的,现在简单的也是没问题了. 大牛请不要喷 ...

  9. web端自动化——selenium测试报告生成、找到测试报告路径、实现发邮件(整合)

    有这样的一个场景: 假设生成的测试报告与多人相关,每个人都去测试服务器査看就会比较麻烦,如果把这种主动的且不及时的査看变成被动且及时的査收,就方便多了. 整个程序的执行过程可以分为三个步骤: ①    ...

随机推荐

  1. LOJ P10176 最大连续和 题解

    每日一题 day29 打卡 Analysis 朴素的DP方程为: dp[i]=max{sum[i]-sum[j-1]}; 对于每个i 需要用单调队列维护最小的sum[j-1] 注意: 1.tail初值 ...

  2. C# winform Panel 添加 滚动条

    Detailed discussion here. Try this instead for 'only' scrolling vertical.(auto scroll needs to be fa ...

  3. Oracle 解决无法生成Snapshot问题

    1. 概述 Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  4. PHP 将某一字符串转化为变量

    1. $test = 'test'; $var = 'test'; echo  $$var 运行结果为test 2. $this->test = 'test'; $var = 'test'; e ...

  5. webuploader+web如何实现分片+断点续传

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...

  6. AtCoder Grand Contest 013题解

    传送门 \(A\) 先把相同的缩一起,然后贪心就可以了 //quming #include<bits/stdc++.h> #define R register #define fp(i,a ...

  7. The puzzle

    The puzzle: 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6489 找大佬讲了一下这道题,但还是不懂为什么要这样做,先记录一下以后再研究研究; ...

  8. windows下powershell的包管理工具

    scoop github 开源地址:https://github.com/lukesampson/scoop 安装命令->powershell管理员模式下输入 Invoke-Expression ...

  9. Python socket 通信功能简介

    常用的地址家族AF_UNIX:基于文件,实现同一主机不同进程之间的通信AF_INET:基于网络,适用于IPv4AF_INET6:基于网络,使用于IPv6 常见的连接类型SOCK_STREAM:即TCP ...

  10. Note_4.7

    2019/4/7 奇奇怪怪的笔记 狄利克雷卷积  \(μ∗1=ϵ\),莫比乌斯反演 \(Id=φ∗1⇒φ=μ∗Id\) \(d=1∗1⇒1=μ∗d\) \(σ=Id∗1⇒Id=μ∗σ\) \(σ=φ∗ ...