如何打造一个自动科技新闻摘要邮件机器人(附完整代码)
🌟 如何使用Python打造自动科技新闻摘要邮件机器人
📧 附完整代码和详细部署指南
📰 项目简介
无需手动操作,每天自动抓取CCTV科技频道的最新新闻,通过Python爬虫技术处理数据,生成美观的响应式HTML邮件,并使用GitHub Actions实现定时自动化发送
🌟 前言
你是否每天都想了解最新的科技动态,却苦于没有时间浏览各大科技网站?今天我要分享一个我自己开发的实用小项目——自动CCTV科技新闻摘要邮件机器人,它能够通过Python脚本自动抓取CCTV科技频道的最新新闻,使用SMTP协议发送美观的HTML格式邮件,并通过GitHub Actions实现完全自动化的定时运行,让你每天轻松获取最新的科技新闻。
✨ 项目价值
这个项目不仅可以帮助你节省时间,自动获取科技新闻,还可以作为学习Python爬虫、邮件发送和自动化部署的实用案例。
✨ 项目亮点
- ✨ 全自动运行
无需手动操作,通过GitHub Actions实现每天定时发送
- 📊 真实数据
直接从CCTV科技频道获取最新新闻,使用Python爬虫技术确保数据准确性
- 🎨 美观邮件
响应式HTML格式邮件,支持各种设备,专业的邮件模板设计
- 🔒 稳定可靠
3次重试机制,确保Python爬虫数据抓取成功率
- 🚀 易于部署
支持GitHub Actions自动化运行,包含详细的自动化部署指南
- 💻 免费工具
完全免费的自动化工具,无需服务器成本
🛠️ 技术栈
| 技术 | 用途 |
|---|---|
| Python 3.9 | 核心编程语言,用于开发Python爬虫和自动化脚本 |
| Requests | 网络请求库,用于抓取CCTV科技频道数据 |
| BeautifulSoup4 | HTML解析库,用于处理和提取网页数据 |
| SMTP_SSL | 安全邮件发送协议,用于通过SMTP服务器发送邮件 |
| GitHub Actions | 自动化运行平台,用于实现定时任务和自动化部署 |
| JSON | 数据存储格式,用于存储和处理新闻数据 |
| Regular Expressions | 正则表达式,用于JSONP数据解析 |
📁 项目结构
├── crawl_news.py # 新闻抓取脚本
├── send_email.py # 邮件发送脚本
├── news_data.json # 新闻数据存储
└── .github/workflows/
└── daily-news.yml # GitHub Actions配置
提示:项目结构清晰简洁,包含了所有必要的文件,易于理解和维护。
核心功能解析
智能新闻抓取
项目使用JSONP API直接从CCTV科技频道获取真实新闻数据,而非简单的HTML解析,确保了数据的准确性和完整性。
🐍 部分代码:crawl_news.py
1 | def crawl_cctv_tech_news(): |
代码说明:这段代码使用BeautifulSoup库解析CCTV科技频道的HTML页面,提取所有有效的新闻链接。
QQ邮箱配置与邮件发送
QQ邮箱授权码获取步骤
- 登录QQ邮箱:打开 mail.qq.com
- 进入设置:点击顶部导航栏的「设置」按钮
- 选择账户:在左侧菜单中选择「账号与安全」选项
- 开启SMTP服务:找到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务」部分
- 生成授权码:点击「生成授权码」,按照提示操作获取16位授权码
📷 操作截图
QQ邮箱SMTP设置页面,开启SMTP服务并生成授权码
📧 部分代码:send_email.py
1 | # 创建邮件 |
代码说明:这段代码使用SMTP_SSL创建安全连接,发送包含HTML和文本内容的邮件,确保邮件能够正确送达。
自动化部署(GitHub Actions)
通过GitHub Actions配置,实现每日自动运行,无需服务器。
时区说明
- GitHub服务器使用UTC时区
- 中国时区是UTC+8,所以UTC时间02:44:59对应中国时间10:44:59
- 以下配置设置为UTC时间02:45运行,对应中国时间10:45
邮件效果展示
📱 邮件效果
电脑端邮件效果,美观的HTML格式邮件,响应式设计
🚀 快速开始
📁 创建项目文件
创建以下三个核心文件,构建完整的Python自动化新闻邮件系统:
📄 crawl_news.py
- 功能:使用Python爬虫技术从CCTV科技频道抓取最新新闻
- 特性:3次重试机制,确保Python爬虫数据抓取成功率
📄 send_email.py
- 功能:生成美观的响应式HTML邮件并通过SMTP协议发送
- 特性:响应式设计,支持各种设备,专业邮件模板
📄 .github/workflows/daily-news.yml
- 功能:通过GitHub Actions实现每日自动运行的定时任务
- 特性:支持手动触发测试,方便调试和验证
🔧 安装依赖
1 | pip install requests beautifulsoup4 |
🖥️ 本地测试
1 | # 抓取新闻 |
📷 操作截图

📦 创建GitHub仓库
按照以下步骤创建GitHub仓库:
- 登录GitHub:打开 github.com
- 创建新仓库:点击右上角的「+」按钮,选择「New repository」
- 填写仓库信息:
- Repository name:
daily-tech-news - Description:
自动科技新闻摘要邮件机器人 - 选择 Public 或 Private
- 点击「Create repository」
- Repository name:
📷 操作截图

📤 上传项目代码
使用GitHub网页界面上传文件:
- 进入仓库:打开您创建的GitHub仓库页面
- 上传文件:
- 点击「Add file」按钮
- 选择「Upload files」选项
- 选择文件:
- 拖拽或点击选择您的项目文件(crawl_news.py、send_email.py、news_data.json )
- 同时创建
.github/workflows/目录和 daily-news.yml 文件
- 提交更改:
- 在页面底部填写提交信息(如 “初始化项目”)
- 点击「Commit changes」按钮完成上传
📷 操作截图

⚙️ 配置GitHub Actions
在 .github/workflows/daily-news.yml 文件中添加以下配置:
1 | name: 每日科技新闻摘要 |
📷 操作截图

🔒 配置GitHub Secrets
📝 进入Secrets设置
按照以下路径进入Secrets设置页面:
进入GitHub仓库 → Settings → Secrets and variables → Actions
🔑 添加Secrets
点击 “New repository secret” 按钮,添加以下Secrets:
| Secret名称 | 描述 | 示例 |
|---|---|---|
SENDER_EMAIL | 您的QQ邮箱地址 | 3609506278@qq.com |
SENDER_PASSWORD | 您的QQ邮箱授权码(不是密码) | xxxxxxxxxxxxxxxx |
RECEIVER_EMAIL | 收件人邮箱(可以和发件人相同) | 3609506278@qq.com |
SMTP_SERVER | SMTP服务器地址 | smtp.qq.com |
SMTP_PORT | SMTP服务器端口 | 465 |
📷 操作截图

✅ 测试和验证
🚀 手动触发测试
按照以下步骤手动触发工作流测试:
进入GitHub仓库 → Actions → 每日科技新闻摘要 → Run workflow
点击 “Run workflow” 按钮手动触发工作流,无需等待定时执行
📊 查看运行结果
在Actions页面查看工作流的运行状态和详细日志:
- 检查工作流是否成功启动
- 查看每个步骤的执行状态
- 检查是否成功发送邮件
- 查看任何可能的错误信息
📷 操作截图

📧 验证邮件
查看您的QQ邮箱,确认是否收到了科技新闻摘要邮件:
- 检查收件箱或邮件
- 确认邮件主题是否为 “CCTV科技新闻摘要”
- 查看邮件内容是否完整
- 验证新闻链接是否可点击
📷 操作截图

📱 微信接收邮件提醒设置
为了确保及时收到科技新闻邮件,建议在微信里设置QQ邮箱提醒,只需按照以下步骤就能搞定:
📱 在微信里开启功能
- 打开微信,点击右下角的「我」,进入「设置」
- 选择「其他功能」(苹果跟安卓可能不同),然后点击进入「辅助功能」(部分旧版本可能显示为”功能”或”插件”)
- 在列表中找到「QQ邮箱提醒」,点击后选择「启用该功能」绑定QQ号即可
- 注意:如果找不到该入口,需先在微信的「我」-「设置」-「账号与安全」中绑定QQ号
📷 操作截图

🔐 QQ授权码变更注意事项
重要提醒:如果您修改了QQ密码,之前生成的QQ授权码将会失效,这会影响到使用该授权码的爬虫项目(如本项目)。遇到这种情况,请按照以下步骤操作:
🔑 重新生成QQ授权码
- 登录QQ邮箱
- 进入「设置」 > 「账户」
- 找到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务」
- 点击「生成授权码」,按照提示完成验证
💻 更新GitHub仓库中的授权码
- 进入项目的GitHub仓库
- 更新代码中的授权码:修改发送邮件的代码,将旧的授权码替换为新生成的授权码
- 更新环境变量:进入「Settings」 > 「Actions」 > 「Secrets and variables」 > 「Variables」
- 找到对应的环境变量,将其值更新为新的QQ授权码
- 注意:环境变量的名称必须与自动化脚本(yml文件)中使用的变量名保持一致
❓ 常见问题排查
| 问题 | 解决方案 |
|---|---|
| 邮件发送失败 | 检查授权码是否正确,SMTP服务是否开启 |
| 新闻抓取失败 | 检查网络连接,确认CCTV科技频道API是否可访问 |
| GitHub Actions运行失败 | 查看Actions日志,检查Secrets配置是否正确 |
🛠️ 项目维护
- 🔍 定期检查:确保项目正常运行
- 📦 更新依赖:定期更新Python依赖包
- ⏰ 调整时间:根据需要修改GitHub Actions的运行时间
- 🌟 扩展功能:根据需求添加更多新闻源或功能
🎯 技术难点与解决方案
🔍 JSONP数据解析
- 问题:CCTV科技频道使用JSONP格式返回数据,直接解析困难。
- 解决方案:使用正则表达式提取JSON数据,再进行解析。
📧 SMTP连接问题
- 问题:不同邮箱服务商的SMTP设置不同,容易出现连接错误。
- 解决方案:使用SMTP_SSL直接创建安全连接,简化连接流程。
⏰ 定时任务部署
- 问题:需要服务器才能实现定时任务。
- 解决方案:使用GitHub Actions免费实现自动化运行。
📝 结语
这个项目不仅是一个实用的工具,也是学习Python爬虫、邮件发送和自动化部署的好案例。通过它,你可以每天轻松获取最新的科技动态,同时也能提升自己的编程技能。
如果你对这个项目感兴趣,欢迎到我的GitHub仓库查看和Star,也可以在评论区分享你的使用体验和改进建议。
完整项目地址:https://github.com/Jay-R-J/daily_news
✍️ 作者:Jay





