Python实战:利用yagmail实现自动发送邮件与服务器监控

夏知夏
夏知夏
发布时间:2026-10-15 | 4人浏览过
原创

本文详细介绍如何使用Python的yagmail库实现自动发送邮件功能。内容涵盖开启邮箱SMTP服务及获取授权码的关键步骤,封装包含日志功能的邮件发送类,并通过一个监控网站状态的小实例,展示如何在服务器后台运行脚本以实时接收异常提醒,适用于股票策略更新、网站宕机告警等自动化场景。

自动发送邮件功能可应用于多种场景。例如,若需监控股票策略中的股票池是否实时更新,重新拉取数据并运行脚本会耗费大量时间。将整套流程部署至服务器并设置定时自动运行及邮件发送,是更高效的解决方案。

此类应用场景广泛,不仅限于股票策略提醒。例如,可定时向特定人员发送信息;当网站发生宕机时实时发送告警邮件;或在网站负载过高时发送提醒邮件等。

接下来将介绍如何使用Python构建自动发送邮件的脚本。

1.开启SMTP服务

为实现自动发送邮件的目标,需在邮箱设置中开启SMTP服务:

此步骤至关重要,务必开启SMTP服务,否则邮件发送将失败。此外,需点击生成授权码,该授权码才是使用Python发送邮件时实际使用的密码。

完成邮箱设定后,即可开始脚本开发。

2.准备

开始前,请确保电脑已正确安装Python和pip。若未安装,可参考相关Python安装指南进行配置。

(可选1) 若使用Python进行数据分析,可直接安装Anaconda,其已内置Python和pip。

(可选2) 推荐使用VSCode编辑器,因其具备诸多优势。

请选择以下任一种方式输入命令安装依赖:

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 &

到此,关于Python自动发送邮件实现的教程介绍完毕。更多Python自动发送邮件相关内容,请搜索本站以往文章或继续浏览后续文章,希望大家今后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表