乐趣区

关于python:python自动化办公邮件篇

筹备工作

以 QQ 邮件为例阐明

1 设置 QQ 邮箱:点击“设置”->“账户”

2. 往下滑 找到上面页面 点击“开启”按钮,开启 POP3/SMTP 服务,依据提醒实现开启操作,开启胜利后,生成受权码 (受权码用于第三方登录,简略说就是用在你写的 python 程序里进行登录)

1 发送一般的文字邮件

应用的库

email:用于写邮件

smtplib 用于操作协定,发送文件的

smtp 协定的根本命令包含:

HELO 向服务器标识用户身份

MAIL 初始化邮件传输 mail from:

RCPT 标识单个的邮件接管人; 常在 MAIL 命令前面, 可有多个 rcpt to:

DATA 在单个或多个 RCPT 命令后, 示意所有的邮件接管人已标识, 并初始化数据传输, 以. 完结

VRFY 用于验证指定的用户 / 邮箱是否存在; 因为平安方面的起因, 服务器常禁止此命令

EXPN 验证给定的邮箱列表是否存在, 裁减邮箱列表, 也常被禁用

HELP 查问服务器反对什么命令

NOOP 无操作, 服务器应响应 OK

QUIT 完结会话

RSET 重置会话, 以后传输被勾销

MAIL FROM 指定发送者地址

RCPT TO 指明的接收者地址

!/usr/bin/env python3

# -*- coding: utf-8 -*-

# @Author: yudengwu

# @Date : 2020/8/2

import smtplib

from smtplib import SMTP_SSL #SMTP_SSL 用于加密邮件内容,避免被截获

from email.mime.text import MIMEText #MIMEText 用于结构邮件注释

from email.mime.multipart import MIMEMultipart# 用于把邮件的各个局部装在一起,容器作用

from email.header import Header# 邮件头,包含邮件名 收件人等

邮件结构

host_server=”smtp.qq.com”#QQ 邮箱 smtp 服务器,应用什么邮箱就对应输出其服务器。新浪邮箱:”smtp.sina.com”

sender_email = ” #发件人邮箱

pwd=’xxxxxxxxx’# 之前失去的受权码。有的邮箱可能没有受权码就间接输出邮箱明码, 为了窃密,我用 x 号代替实在的

receivers=’1344732766@qq.com’# 收件人邮箱

mail_title=’ 余登武的程序测试文件 ’# 邮件名

mail_content=’ 这是一封测试邮件 ’# 邮件注释内容

主体装载

msg=MIMEMultipart()# 初始化邮件主体,起容器作用,把各局部装进去

msg[‘Subject’]=Header(mail_title,’utf-8′)#msg[‘Subject’] 邮件主题,应用 header 将题目解决成能辨认的格局

msg[‘From’]=sender_email# 寄件人

msg[‘From’]=Header(‘ 发送邮箱 ’,’utf-8′)# 这一行和下面一行是等价的,都能够运行

msg[‘To’]=Header(‘ 测试邮箱 ’,’utf-8′)# 收件人,和上面一行等效的

msg[‘To’]=receivers# 收件人

msg.attach(MIMEText(mail_content,’plain’,’utf-8′))# 邮件注释内容,plain 无格局,以无格局增加内容。第一个参数为邮件内容,第二个参数为设置文本格式,第三个参数为编码设置

登录产生邮件

smtp=SMTP_SSL(host_server)# 登录服务器

smtp.login(sender_email,pwd)# 输出用户名,明码 登录寄件人邮箱

smtp.sendmail(sender_email,receivers,msg.as_string())# 产生邮件。参数:产生人,收件人,邮件主体

smtp.quit()# 退出

2 发送具备 HTML 格局的邮件

import smtplib

from smtplib import SMTP_SSL #SMTP_SSL 用于加密邮件内容,避免被截获

from email.mime.text import MIMEText #MIMEText 用于结构邮件注释

from email.mime.multipart import MIMEMultipart# 用于把邮件的各个局部装在一起,容器作用

from email.header import Header# 邮件头,包含邮件名 收件人等

邮件结构

host_server=”smtp.qq.com”#QQ 邮箱 smtp 服务器,应用什么邮箱就对应输出其服务器。新浪邮箱:”smtp.sina.com”

sender_email = ‘1344732766@qq.com’ #发件人邮箱

pwd=’xxxxxxxxx’# 之前失去的受权码。有的邮箱可能没有受权码就间接输出邮箱明码

receivers=’1344732766@qq.com’# 收件人邮箱

mail_title=’ 余登武的程序测试文件 2 ’# 邮件名

mail_content=’ 这是一封测试邮件

这是一封带有 html 格局的邮件

‘# 邮件注释内容

主体装载

msg=MIMEMultipart()# 初始化邮件主体,起容器作用,把各局部装进去

msg[‘Subject’]=Header(mail_title,’utf-8′)#msg[‘Subject’] 邮件主题,应用 header 将题目解决成能辨认的格局

msg[‘From’]=sender_email# 寄件人

msg[‘From’]=Header(‘ 发送邮箱 ’,’utf-8′)# 这一行和下面一行是等价的,都能够运行

msg[‘To’]=Header(‘ 测试邮箱 ’,’utf-8′)# 收件人,和上面一行等效的

msg[‘To’]=receivers# 收件人

msg.attach(MIMEText(mail_content,’html’,’utf-8′))# 邮件注释内容,plain 无格局,html 为 html 格局。以无格局增加内容。第一个参数为邮件内容,第二个参数为设置文本格式,第三个参数为编码设置

登录产生邮件

try:

smtp = SMTP_SSL(host_server) # 登录服务器

smtp.set_debuglevel(1)#1 是开启 smtp debug,0 敞开

smtp.ehlo(host_server)# 向服务器答招呼,表明身份

smtp.login(sender_email,pwd)# 输出用户名,明码 登录寄件人邮箱

smtp.sendmail(sender_email,receivers,msg.as_string())# 产生邮件。参数:产生人,收件人,邮件主体

smtp.quit()# 退出

print(‘ 发送胜利 ’)

except smtplib.SMTPException:# 捕获异样

print(‘ 发送失败 ’)

3 发送带附件的邮件

比前文多一个导入

from email.mime.application import MIMEApplication# 用于增加附件

!/usr/bin/env python3

# -*- coding: utf-8 -*-

# @Author: yudengwu

# @Date : 2020/8/2

import smtplib

from smtplib import SMTP_SSL #SMTP_SSL 用于加密邮件内容,避免被截获

from email.mime.text import MIMEText #MIMEText 用于结构邮件注释

from email.mime.multipart import MIMEMultipart# 用于把邮件的各个局部装在一起,容器作用

from email.header import Header# 邮件头,包含邮件名 收件人等

from email.mime.application import MIMEApplication# 用于增加附件

邮件结构

host_server=”smtp.qq.com”#QQ 邮箱 smtp 服务器,应用什么邮箱就对应输出其服务器。新浪邮箱:”smtp.sina.com”

sender_email = ‘1344732766@qq.com’ #发件人邮箱

pwd=’********8’# 之前失去的受权码。有的邮箱可能没有受权码就间接输出邮箱明码

receivers=’1344732766@qq.com’# 收件人邮箱

mail_title=’ 余登武的程序测试文件 2 ’# 邮件名

mail_content=’ 这是一封测试邮件

这是一封带有 html 格局的邮件

外汇出入金流程 https://www.fx61.com/support

‘# 邮件注释内容

主体装载

msg=MIMEMultipart()# 初始化邮件主体,起容器作用,把各局部装进去

msg[‘Subject’]=Header(mail_title,’utf-8′)#msg[‘Subject’] 邮件主题,应用 header 将题目解决成能辨认的格局

msg[‘From’]=sender_email# 寄件人

msg[‘From’]=Header(‘ 发送邮箱 ’,’utf-8′)# 这一行和下面一行是等价的,都能够运行

msg[‘To’]=Header(‘ 测试邮箱 ’,’utf-8′)# 收件人,和上面一行等效的

msg[‘To’]=receivers# 收件人

msg.attach(MIMEText(mail_content,’html’,’utf-8′))# 邮件注释内容,plain 无格局,html 为 html 格局。以无格局增加内容。第一个参数为邮件内容,第二个参数为设置文本格式,第三个参数为编码设置

attachment=MIMEApplication(open(r’zhenjiang_power.csv’,’rb’).read())# 关上附件.

attachment.add_header(‘Content-Disposition’,’attacment’,filename=’zhenjiang_power.csv’)# 给附件重命名,第一个参数 ’Content-Disposition’:内容设置,第二个参数:附件,第三个参数:文件名

msg.attach(attachment)# 把附件增加进主体

登录产生邮件

try:

smtp = SMTP_SSL(host_server) # 登录服务器

smtp.set_debuglevel(1)#1 是开启 smtp debug,0 敞开

smtp.ehlo(host_server)# 向服务器答招呼,表明身份

smtp.login(sender_email,pwd)# 输出用户名,明码 登录寄件人邮箱

smtp.sendmail(sender_email,receivers,msg.as_string())# 产生邮件。参数:产生人,收件人,邮件主体

smtp.quit()# 退出

print(‘ 发送胜利 ’)

except smtplib.SMTPException:# 捕获异样

print(‘ 发送失败 ’)

解释:

增加附件 rb 为读取二进制文件

attachment=MIMEApplication(open(r’zhenjiang_power.csv’,‘rb’).read())# 关上附件.

文件重命名,因为上一行读取后果是二进制文件,如果间接发送,发送的是二进制文件。须要批改回人能看懂的格局

attachment.add_header(‘Content-Disposition’,‘attacment’,filename=‘zhenjiang_power.csv’)# 给附件重命名,第一个参数’Content-Disposition’:内容设置,第二个参数:附件,第三个参数:文件名

msg.attach(attachment)# 把附件增加进主体

增加绝对路径文件

attachment=MIMEApplication(open(r’C:\Users\Shineion\Desktop\ 样例测试.xls’,‘rb’).read())# 关上附件.

绝对路径还是手打,我间接复制过去时显示报错,手打却胜利发送。

4 利用 zmail 接管邮件

库:zmail

须要装置

pip install zmail

import zmail

server=zmail.server(‘1344732766@qq.com’,’dteqfmouzznhbaba’)# 输出账户和明码,QQ 邮箱明码明码为之前失去的受权码

mail=server.get_latest()# 获取最新的一份邮件

zmail.show(mail)# 查看邮件

如果只想查看一部分内容

import zmail

server=zmail.server(‘1344732766@qq.com’,’******’)# 输出账户和明码,QQ 邮箱明码明码为之前失去的受权码

mail=server.get_latest()# 获取最新的一份邮件

print(mail[‘Subject’])

将邮件中的附件保留到本地

参数 mail:失去的邮件

target_path:保留门路,None 为保留到工作目录文件夹

overwrite: 是否复写,如果有重名文件是否笼罩

zmail.save_attachment(mail,target_path=None,overwrite=True)

1

后果

邮件中的样例测试.xls 保留到工作目录下。

5 利用 zmail 发邮件

smtplib 发邮件代码简单,直到明天仍有人在这里遇到问题。而且代码简单,解释起来很麻烦,明天给大家介绍一个新的发邮件办法——zmail

zmail 的劣势

主动填充头信息

将一个字典映射为 email,结构邮件相当于结构字典

主动寻找邮件服务商端口号地址、主动抉择协定

只依赖 Python3

import zmail

MAIL = {

‘subject’: ‘ 测试邮件 ’,# 题目

‘content_text’: ‘ 不晓得说些什么,’,# 注释内容

‘attachments’: [‘zhenjiang_power.csv’, ‘renwu.jpg’],# 附件

}

server = zmail.server(“1344732766@qq.com”, “********”)# 发送者的邮箱 和受权码

server.send_mail(“1344732766@qq.com”, MAIL)

6 每天定时发送邮件

她来了。

# coding=utf-8

import datetime

import time

import os

def chengxu():

# 把要启动的程序放在这个办法里

os.system(“python D:\\ 机器学习 \\ 学习草稿 \\hm_003.py”) # 执行 hm_003.py 文件

os.system(“pause”)

print(“ 程序曾经执行了!”)

def main(h=10, m=40):

while True:

now = datetime.datetime.now()

print(now) # 2020-08-03 15:02:19.683783

print(now.hour, now.minute)#15 2

if now.hour == 15 and now.minute == 3:

chengxu()

# 每隔 60 秒检测一次

time.sleep(60)

main()

退出移动版