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


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

    前言
    ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,致力于用白话讲解技术知识的博主 ✌
    🏆 CSDN博客专家认证、新星计划第三季全栈赛道 top_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 内容定义模块

    schedule 定时模块


    smtplibemail 模块 可以帮助我们正常的发送邮件; 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_password) 通过 login(mail_user, mail_password) 传入邮箱名称、登录密码,完成验证。(注意:部分邮箱服务器这里传入的是口令而不是登录密码[也叫做授权码],在邮箱的设置里面查看)


    发送邮件:

    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.com"     # 设置邮箱服务器
    mail_user = "conan868242"       # 设置自己的邮箱
    mail_pass = "cb997b01a87232b2"  # 这里就是邮箱的口令,也就是授权码;不是密码。
    
    sender = "conan868242@sina.com"     # 定义发送者邮箱(其实就是自己)
    receivers = ["3241716373@qq.com"]   # 定义接受者邮箱(可以是多个接收者)
    
    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))
    
    • 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

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

    运行结果如下:



    🐳 发送邮件的避坑总结

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

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



  • 相关阅读:
    Linux有关权限的经验分享
    【WEEK15】学习目标及总结【Spring Boot】【中文版】
    PyQt5_pyqtgraph鼠标在折线图上画线段
    【最佳实践】瀚高数据库企业版v6.0.2在Centos7.8安装过程
    Zabbix (二) --------- Zabbix 部署
    Python GUI教程之使用 Python 构建 Excel 数据输入应用程序(教程含源码)
    【C++】class的设计与使用(三)mutable(可变)和const(不变)
    elasticsearch的搜索补全提示
    springboot项目整合kafka实现消息队列
    一种单键开关机电路图
  • 原文地址:https://blog.csdn.net/weixin_42250835/article/details/124918394