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

article/2025/10/5 0:57:46

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

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

下面就来讲讲怎么用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 yagmailclass 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 yagmailclass 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 yagmailclass 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 Mailwhile 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 &

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

推荐文章

  • 李宏毅《机器学习》国语课程(2022)来了

  • 有人把吴恩达老师的机器学习和深度学习做成了中文版

  • 上瘾了,最近又给公司撸了一个可视化大屏(附源码)

  • 如此优雅,4款 Python 自动数据分析神器真香啊

  • 梳理半月有余,精心准备了17张知识思维导图,这次要讲清统计学

  • 年终汇总:20份可视化大屏模板,直接套用真香(文末附源码)


http://chatgpt.dhexx.cn/article/dikG5iDE.shtml

相关文章

干货 | 解放双手,用Python实现自动发送邮件

使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间。 Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。 邮件发…

小区物业管理系统设计与开发论文

目录 第1章 需求规格说明书... 1 1.1 目的... 1 1.2 系统概述... 1 1.3 系统总体功能描述... 1 1.4 运行环境... 2 1.5 系统角色分工... 2 1.5.1xxx模块功能描述.. 4 1.5.2 xxx模块功能描述.. 5 1.5.3 xxx模块功能描述... 5 1.5.4 xxx模块功能描述... 6 第2章 系统设计说明书..…

基于安卓 android studio的考试APP开发设计 前台和后台管理系统

一 项目概述 考试APP系统分为前台APP端和后台管理系统,前台APP可以注册,登录,试卷列表,开始测试,个人中心,试卷打分,试题解析,退出系统,后台管理系统 主要有 老师注册 登…

产品开发的组织架构和开发管理

摘要:产品开发的组织架构和产品开发过程管理是一个软件企业开发管理的两个侧面,开发组织架构指软件项目的立项和项目开发有效的人员调配和组织,开发过程管理指在项目确定后,软件开发过程的管理。本文根据作者在建立软件企业管理体…

图书馆管理系统的开发

课程设计的目的与要求 课程设计目的软件工程课程设计是学习软件工程课程后所进行的实践环节,目的是培养学生用工程化的思想和标准文档化的思想进行软件开发。本次课程设计通过开发一个小型实用的软件系统,亲身体验软件生命周期中的各个环节,以加深对软件工程课程的深入理解、…

微信小程序 一键授权 给第三方平台代开发管理(一,创建第三方平台)

不是重点,可以忽略: 本人 七月的胜利。代表七月份我出生啦,嘻嘻 博客就是平常记录一些常用到的开发常用到的技术,方法等,看见好东西了就自己整理一下防止以后自己遇到了再找不到。 如果有幸帮到你,欢迎点赞…

使用go语言开发运维管理平台

前言 经过对go语言的一段时间学习,打算实践一下,正好公司缺个运维平台,于是我就对Zeus二次开发,完成了一个初步的效果,在这里分享给大家,大家有什么建议可以提出来哈,一起进步 采用技术 前端&am…

微信小程序云开发实践--搭建一个管理小程序

概述 : 开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即…

基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者没有积分想获取项目,欢迎指教: 企鹅:869192208 文章目录 一、开发背景二、 需求分析三、开发环境四、运行效果五、开发流程工程目…

用Django半天时间开发一个员工管理系统实例教程分享

熟悉python的朋友都知道,django简直是web开发领域的一个大杀器。 请求、模板、ORM、admin 都自带,程序员可以很轻松的开发出一个网站或者管理系统。 今天小编给大家分享一个超简单的员工管理系统 源码地址: https://github.com/newpanjin…

微信小程序云开发-内容管理系统(CMS)小案例

一、前言 最近有朋友问到如何在CMS上实现审核小程序端提交的数据,例如发布的内容审核,订单审核等等。因而出一篇小案例。 二、原理说明 这个由腾讯开源的这个内容管理系统,实际上就是对于云开发数据库的可视化操作(又或者说其实…

使用微信提供的云开发实现后端 微信小程序云开发的内容管理CMS

以前开发一款小程序或者应用啥的,首先就是申请域名租服务器,这是必不可少的步骤。 现在小程序云开发出来后,又再出现内容管理的这个功能,对于开发一款简单的小程序来说,真的是太简单的了。 现成的后台直接配置&#…

新能力 | 云开发CMS内容管理系统,5分钟搞定小程序管理后台

小程序云开发的云调用能力,让用户可以免鉴权快速调用微信的开放能力,极大节约了开发成本。现在,大家期待已久的云开发 CMS 内容管理系统,终于上线啦!顺便提示,接下来还可以二次开发哦! 云开发 …

[敏捷开发]研发管理 开发过程管理

开发过程管理,主要面向开发人员的管理。其核心目的,是通过一个项目管理软件,来管理不同项目,然后通过项目的里的工作项,了解开发人员的工作量,效率,从而来管理开发人员,合理调配开发…

Arduino常用的附加开发版管理器网址

20211004更新 增加ESP32 常用的附加开发版管理器网址 ESP32 https://dl.espressif.com/dl/package_esp32_index.json 如果使用ESP32-SOLO要用这里的编译文件替换源文件 https://github.com/lbernstone/arduino-esp32-solo 替换位置 C:\Users\你的用户名\AppData\Local\Ar…

基于vue的后台管理系统开发

如果要快速开发一套基于vue的后台管理系统,你可以手动从0到1动手撸,也可以基于现有的vue的后台管理系统模版进行开发。 github上有几套关注度比较的vue后台管理系统模版[1]: vue-element-admin[2]vue-admin[3]vue-manage-system[4]iview-admi…

微信小程序 —— 成员管理及开发管理

引入 要理解微信小程序的成员管理,首先要理解微信小程序的注册。 微信小程序的注册需要用户提供一个邮箱作为登录账号,并绑定一个微信号作为管理员。登录账号会得到一个官方提供的appid作为标识码,作为登录账号的凭证。微信小程序登录账号与…

软件开发项目管理经验总结

这是我从事软件外包工作以来的项目管理经验的总结,编写文章的目的是为了回顾和总结自己的一些想法,如果其中有不足的地方大家可以一起讨论交流。 项目经理的职责 关于项目经理的工作职责有很多种说法,我自己是这样理解的作为一名项目经理第一…

管理信息系统开发方法——原型法

管理信息系统开发方法——原型法 引言 管理信息系统(MIS)的设计开发方法是系统开发人员和从事方法论研究人员极为关注的问题。对于MIS项目来说,在系统开发前期用户很难确定和表达对未来的信息系统的全面要求。这是因为用户对系统本身的想法是比较模糊的和不完全确…