Python自动化办公篇 - 104 - python实现邮件自动化

家电修理 2023-07-16 19:17www.caominkang.com电器维修

万叶集 隐约雷鸣,阴霾天空。  但盼风雨来,能留你在此。 

前言
✌ 作者简介渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,致力于用白话讲解技术知识的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 _1 、华为云享专家、阿里云专家博主 
 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
 人生格言优于别人,并不高贵,真正的高贵应该是优于过去的自己。
 如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦


系列专栏
                Python全栈系列 - [更新中]     【 本文在该系列】
                        Python零基础入门篇
                        Python语法进阶篇
                        Python自动化办公篇
                网安之路系列
​                        网安之路踩坑篇
​                        网安知识扫盲篇
​                        Vulhub 漏洞复现篇
​                        Shell脚本编程篇
​                        Web攻防篇   2021年9月3日停止更新,转战先知等安全社区
​                        渗透工具使用集锦  2021年9月3日停止更新,转战先知等安全社区
​                ⭐️ 点点点工程师系列
​                        测试神器 - Charles 篇
​                        测试神器 - Fiddler 篇
​                        测试神器 - Jmeter 篇
​                        自动化 - RobotFrameWork 系列
​                        自动化 - 基于 JAVA 实现的WEB端UI自动化
                        自动化 - 基于 MonkeyRunner 实现的APP端UI自动化



文章目录
    •  利用 python 发送普通邮件
      •  认识发送邮件流程
      •  认识邮件协议
    •  smtplib 模块
    •  email 包
    • 发送邮件小案例
    •  发送邮件的避坑

接下来就将进入 Python自动化办公篇 的一个章节,邮件自动化。通过邮件自动化的学习,我们将学会各种类型的邮件发送方式。比如普通文本邮件、带附件的邮件等等,如何通过程序发送邮件现在我们还不太了解,接下来就会为大家进行详细的介绍。

邮件自动化篇章所需的新模块

smtplib 邮件协议与发送模块

email 内容定义模块

schedule 定时模块


smtplib 与 email 模块 可以帮助我们正常的发送邮件; schedule 模块可以帮助我们定时发送邮件,比如工资邮件等需要固定时间发送的邮件

 利用 python 发送普通邮件  认识发送邮件流程

这里简单描述下发邮件的过程(说实话,这一步我有点不想写)

第一步登录邮箱


第二步书写邮件接受者的邮箱


第三步书写邮件标题与内容(有的时候还需要添加附件)


第四步发送邮件


 认识邮件协议
  • smtp邮件发送的协议
  • pop3邮件接收的协议

什么是协议?

协议就是一种规则,其已经被底层网络封装好。无需关心它的具体规则是什么,直接使用上层工具即可。

比如发送邮件这个场景,当我们使用 smtp 协议发送邮件时。网络发现是 smtp 协议,它就知道这是一封要发送出去的邮件;同样 pop3 也是一样的,当网络发现这是 pop3 协议 就知道这是一封要接收的邮件。

 smtplib 模块

smtplib 模块是 python 中 发送邮件的很重要的模块之一。

创建协议对象

smptObj = smptlib.SMTP() 通过 smptlib.SMTP() 生成 smpt 协议对象


创建链接

smptObj.connect(smpt服务器地址, 25) 通过 connect(服务器IP地址, 端口号),smpt服务默认端口号为 25


登录验证

smptObj.login(mail_user, mail_passord) 通过 login(mail_user, mail_passord) 传入邮箱名称、登录密码,完成验证。(注意部分邮箱服务器这里传入的是口令而不是登录密码[也叫做授权码],在邮箱的设置里面查看)


发送邮件

smptObj.sendmail(sender, receivers, message) 通过 sendmail(sender, receivers, message) 传入发送者的邮箱、接收者的邮箱、邮件内容即可完成发送邮件的动作。
PS这里可以看到 "接收者的邮箱是 'receivers' 复数" ,所以 "接收者邮箱" 是一个数组、列表,可以发送给多个人; 消息内容的 "message" 是消息对象的加密字符串

 email 包

email包 有两个比较常用的函数

函数名参数说明MIMEText邮件内容、邮件类型、编码格式定义邮件发送内容的对象Header各类信息、编码格式将各类信息定义成对象,比如标题等。

PS上文提到的 ""message" 是消息对象的加密字符串" 就是通过 "MIMEText" 加密生成的

发送邮件小案例

代码示例如下

# coding:utf-8


import smtplib

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

'''
第三方的 smpt [脚本中涉及的邮箱地址都是假的,请使用自己的真实邮箱地址进行测试]
'''

mail_host = "smtp.sina."  # 设置邮箱服务器
mail_user = "conan868242"    # 设置自己的邮箱
mail_pass = "cb997b01a87232b2"  # 这里就是邮箱的口令,也就是授权码;不是密码。

sender = "conan868242@sina."  # 定义发送者邮箱(其实就是自己)
receivers = ["3241716373@qq."]   # 定义接受者邮箱(可以是多个接收者)

message = MIMEText("这是一封测试邮件 O(∩_∩)O哈哈~", "plain", "utf-8")  # 定义邮件内容;"plain"是格式,表示是普通的文件内容

message["From"] = Header(sender)       # 在message内定义发送信息 --> 发送者
message["Subject"] = Header("Python 测试邮件发送", "utf-8")   # 在message内定义发送信息的标题
print("加密后的发送内容n", message.as_string())   # 打印输出加密后的发送内容

try: # 捕获发送邮件的异常
 smtpObj = smtplib.SMTP()    # 实例化 SMTP 协议对象
 smtpObj.connect(mail_host, 25)    # 链接 SMTP 服务器
 smtpObj.login(mail_user, mail_pass)  # 登录邮箱验证
 smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件; "message" 通过 "as_string()" 进行发送内容字符串的加密
except smtplib.SMTPException as error:
 print("error:{}".format(error))

PS不要尝试用这个源码运行了,我已经将授权码改了。

运行结果如下



 发送邮件的避坑
  • 发送者邮箱开通 smtp 与 pop3 的访问许可
  • 不同的邮箱需要的验证方式不同(有的是登录密码,有的是授权码)
  • 有些邮箱开通授权的访问许可和授权码可能会收费,这里需要注意一下(比如 QQ 邮箱 [给个差评])

OK,今天的内容就到这里了。拜了个拜…



Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by