Python 自动发送邮件实战案例,人人都可以学会

2023-11-15

自动发送邮件能应用于许多场景,比如我想要知道股票策略中的股票池是否有实时的更新,这时候如果再拉一遍数据,跑一遍脚本,实在是太浪费时间了。为什么不把这一套流程放到服务器上,然后到点自动运行并发送邮件呢?

类似的应用场景还有很多,不仅仅是在股票策略提醒上,比如定时向某些人发送邮件;网站宕机了,实时发送邮件提醒;网站负载过高,发送邮件提醒…等等。

下面就来讲讲怎么用Python构建一个自动发送邮件的脚本。喜欢记得点赞、收藏、关注。

技术讨论、完整代码,文末获取

1.开启SMTP服务

为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务:

图片

图片

这点很关键,别忘了去开启SMTP,否则邮件是无法发送成功的。然后你还需要点击下面生成授权码,这个授权码才是使用Python发送邮件时的真正密码。

图片

邮箱设定成功后,就可以开始脚本开发了。

2.准备

开始之前,你要确保Python和pip已经成功安装在电脑上
请选择以下任一种方式输入命令安装依赖
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install yagmail

看到 Successfully installed xxx 则说明安装成功。本文全部源代码可在后台回复:自动发送邮件 获得。

3.编写脚本

今天需要用到的模块是yagmail,一个非常方便的Python邮件发送模块,用这个模块,你甚至能一行命令发送邮件:

yag = yagmail.SMTP(
    host='smtp.qq.com', user='你的邮箱',
    password=, smtp_ssl=True
).send(["发送对象"], "主题", "内容")

为了让这个发送邮件的方法更加具备可用性,我们将其封装到一个类中:

import time
import yagmail

class Mail:
    """
    邮件相关类
    """

    def sendmail(self, msg, title, receivers):
        """
        发送邮件
        
        Arguments:
            msg {str} -- 邮件正文
            title {str} -- 邮件标题
            receivers {list} -- 邮件接收者,数组
        """

        yag = yagmail.SMTP(
            host='smtp.qq.com', user='你的邮箱',
            password=, smtp_ssl=True
        )

        try:
            yag.send(receivers, title, msg)
            print("邮件发送成功")

        except BaseException as e:
            print(e)
            print("Error: 无法发送邮件")

这个类里还可以封装很多其他东西,比如log函数,用于显示时间:

import time
import yagmail

class Mail:
    """
    邮件相关类
    """

    def log(self, content):
        now_time = time.strftime(
            "%Y-%m-%d %H:%M:%S", time.localtime()
        )
        print(f'{now_time}: {content}')

这样,需要显示时间的时候只需要调用self.log即可,优化后的完整代码如下:

import time
import yagmail

class Mail:
    """
    邮件相关类
    """

    def log(self, content):
        now_time = time.strftime(
            "%Y-%m-%d %H:%M:%S", time.localtime()
        )
        print(f'{now_time}: {content}')

    def sendmail(self, msg, title, receivers):
        """
        发送邮件
        
        Arguments:
            msg {str} -- 邮件正文
            title {str} -- 邮件标题
            receivers {list} -- 邮件接收者,数组
        """

        yag = yagmail.SMTP(
            host='smtp.qq.com', user='你的邮箱',
            password=, smtp_ssl=True
        )

        try:
            yag.send(receivers, title, msg)
            self.log("邮件发送成功")

        except BaseException as e:
            print (e)
            self.log("Error: 无法发送邮件")

发送成功时显示:

# PS D:\CODE\stock\api> python .\sendmail_yagmail.py
2021-06-21 00:00:00: 邮件发送成功

4.小例子

将刚刚编写完的类保存为sendmail.py,接下来就可以尝试一个小例子。我们用一个自动监控网站是否宕机的小脚本做示例:

import time
import requests
from sendmail import Mail

while True:
    response = requests.get('https://pythondict.com')

    # 根据状态码判断网站是否正常
    if response.status_code != 200:
        Mail().sendmail(
            '哥, pythondict挂了', 'Python实用宝典网站异常监控', ['你的邮箱']
        )

    time.sleep(600)

通过 requests.get 请求网站,使用 response.status_code 得到状态码,200 为正常,其他情况均为异常。这个检测每十分钟运行一次,因此 time.sleep(600) .

就这样,我们构建起了一个非常简单的网站异常监控脚本,如果你真的要在服务器上运行这个脚本,请记得使用 nohup 让其在后台运行:

nohup python test.py &

我们的文章到此就结束啦。

推荐文章

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 自动发送邮件实战案例,人人都可以学会 的相关文章

随机推荐

  • Python py文件打包成 exe文件

    文章目录 安装 pyinstaller 模块 pyinstaller 的使用 pyinstaller 常用参数 多文件打包 安装 pyinstaller 模块 pip install pyinstaller i https pypi tun
  • 个人简历与自我介绍

    尊敬的面试官你好 我叫谢炜豪 我对本次校招的软件研发工程师和C 开发工程师很感兴趣 希望能得到在贵公司发挥作用的机会 以下是我的自我介绍 我所学的专业是计算机科学与技术 在校期间 除了专业的必修课程之外 我还重点学习了C 语言 能够熟练使用
  • linux sftp目录无法切换,linux – SFTP用户无法编辑或创建文件

    要正确chroot sftponly组成员 您需要在 etc ssh sshd config中设置此选项 Subsystem sftp internal sftp Match Group sftponly ChrootDirectory s
  • 多线程入门学习

    多线程 目录 多线程 1 继承Thread类 2 网图下载 3 初识并发问题 4 龟兔赛跑 5 lamda表达式 6 线程休眠Sleep 1 sleep 时间 指定当前线程阻塞的毫秒数 2 sleep存在异常InterruptedExcep
  • canvas圆球碰撞检测

    本文为canvas绘制圆形碰撞检测 圆形与圆形 后期一直更新哦 x 圆横坐标 y 圆纵坐标 r 圆半径 w 浏览器宽度 h 浏览器高度 arc画圆碰撞 move移动后 碰撞浏览器边缘反弹回来 碰撞检测 x r lt 0 浏览器左边缘 x r
  • Android Studio 中的 Gradle 是什么

    Gradle 是什么 学习内容 Gradle 是一个构建系统 在使用 Android Studio 之前 您将Eclipse用于开发目的 而且很可能您不知道如何在没有 Eclipse 的情况下构建您的 Android APK 您可以在命令行
  • 2020年度 个人随笔

    2020年的年度总结其实很好写 for index in 0 2 Log 我太难了 Log 完 2020年这么难 哪里还有心情写总结 回归正题 总结还是要写的 毕竟人老了就爱回忆 就让往事随风 往事随风 随风 风 前言 马上就是2021年了
  • FISCO BCOS JAVA SDK(以HelloWorld合约为例)

    FISCO BCOS JAVA SDK 环境搭建 文章目录 FISCO BCOS JAVA SDK 环境搭建 前言 一 环境准备 1 开发工具 2 开发环境 二 开发步骤 1 创建一个Gradle应用 2 引入Java SDK 3 配置SD
  • 第十届“泰迪杯”B题论文及代码

    正在为您运送作品详情 点击以上链接即可 想看思路可看我另一篇博客
  • c++ 解析.csv文件(全)

    c 解析csv文件 一 项目要求 1 这个程序需要做到将csv文件的内容读取进来解析 并将每一个联系人的数据进行打印 2 用户输入排序的属性key 将排序完成的结果打印出来 3 能够对错误格式的文件进行检测 4 能够对错误的数据进行容错 5
  • leftPush和rightPush区别

    redis对list操作分为左和右两种 redisTemplate opsForList leftPush 实际调用的是lPush return connection lPush rawKey new byte rawValue redis
  • CSDN-如何修改字体的大小和颜色呢

    CSDN 如何修改字体的大小和颜色呢 CSDN markdown编辑器是其衍生版本 扩展了Markdown的功能 如表格 脚注 内嵌HTML等等 Size 规定文本的尺寸大小 可能的值 从 1 到 7 的数字 浏览器默认值是 3 一 模板
  • coverage es6覆盖率解决方法

    该文章整理于2017年 当时为解决在GridManager2 3 0版本中ES6替换时遇到的问题 原文如下 替换之后发现 原先的测试覆盖率从72 下降至 24 通过 coverage html 在本地测试后发现 覆盖目标文件使用的为 bab
  • IDEA全局替换

    替换 有全局替换 和 当前文件内容替换 全局 ctrl shift r 在路径中替换 指的是在选定的目录下或者类包下 查找要被替换的字符 当前文件内容 ctrl r 当前文件内容替换 指的是在当前打开的文件中替换匹配的字符 只操作一个文件
  • 用python画二元函数图像

    利用Python的Matplotlib库可以实现二元函数的可视化 以下以一段代码说明 第三方库需求 Matplotlib 数据可视化 numpy 数学计算库 代码 import matplotlib pyplot as plt import
  • 控制反转 的种类

    之前对控制反转的定义和解释都不是很清晰 最近翻书发现在 Pro Spring 5 免费电子版在文章最后 有一段非常不错的解释 记录一下 有道翻译贴出来方便查看 如有请直接跳过中文 看后面的原文 控制反转的类型 控制反转的类型您可能想知道为什
  • CMake:消灭error(一)

    使用CMake 遇到的第一个错误 CMake Error CMake can not determine linker language for target hello CMake Error Cannot determine link
  • 微信小程序 首页弹出用户协议

    话不多说 直接上代码 wxml
  • 经典神经网络总结

    1 LeNet 5 3层卷积 2层全连接 第一个CNN网络 由 L e C u n LeCun LeCun提出 用于手写数字识别 1 1 网络结构 1 2 各层参数详解 0 INPUT层 输入层 输入图像
  • Python 自动发送邮件实战案例,人人都可以学会

    自动发送邮件能应用于许多场景 比如我想要知道股票策略中的股票池是否有实时的更新 这时候如果再拉一遍数据 跑一遍脚本 实在是太浪费时间了 为什么不把这一套流程放到服务器上 然后到点自动运行并发送邮件呢 类似的应用场景还有很多 不仅仅是在股票策