RSS如何集成邮件通知?

来源:Python编程网作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《RSS如何集成邮件通知?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《RSS如何集成邮件通知?》有用,将其分享出去将是对创作者最好的鼓励。

RSS作为常用的内容聚合格式,很多用户希望通过邮件及时接收订阅源的更新内容,避免错过重要信息。实现RSS集成邮件通知的核心思路是定期抓取RSS内容,解析最新更新的条目,再通过邮件服务将内容推送给指定收件人。

环境准备

实现该功能需要准备以下环境和依赖:

  • Python 3.6及以上版本
  • feedparser库:用于解析RSS内容,可通过pip install feedparser安装
  • smtplib库:Python内置的邮件发送库,无需额外安装
  • 一个可开启SMTP服务的邮箱,比如QQ邮箱、163邮箱等

核心实现步骤

1. 解析RSS内容

首先使用feedparser库读取RSS链接,获取最新的条目信息,我们可以提取标题、链接、发布时间等核心字段。

import feedparser

def parse_rss(rss_url):
    # 解析RSS链接
    feed = feedparser.parse(rss_url)
    entries = []
    # 遍历所有条目,提取需要的信息
    for entry in feed.entries:
        item = {
            "title": entry.get("title", "无标题"),
            "link": entry.get("link", ""),
            "published": entry.get("published", "未知发布时间")
        }
        entries.append(item)
    return entries

# 示例RSS链接,可替换为自己的订阅源
rss_url = "https://rsshub.app/zhihu/daily"
latest_entries = parse_rss(rss_url)
print(f"获取到{len(latest_entries)}条最新内容")

2. 编写邮件发送逻辑

使用smtplib和email库构造邮件内容,将解析到的RSS条目整理成邮件正文,发送到指定邮箱。

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_email(sender, password, receiver, subject, content, smtp_server, smtp_port):
    # 构造邮件内容
    message = MIMEText(content, "html", "utf-8")
    message["From"] = Header(sender, "utf-8")
    message["To"] = Header(receiver, "utf-8")
    message["Subject"] = Header(subject, "utf-8")
    
    try:
        # 连接SMTP服务器并发送邮件
        smtp_obj = smtplib.SMTP_SSL(smtp_server, smtp_port)
        smtp_obj.login(sender, password)
        smtp_obj.sendmail(sender, [receiver], message.as_string())
        smtp_obj.quit()
        print("邮件发送成功")
    except Exception as e:
        print(f"邮件发送失败:{e}")

# 邮箱配置示例,替换为自己的实际信息
sender_email = "test@ipipp.com"
sender_password = "邮箱SMTP授权码"
receiver_email = "receive@ipipp.com"
smtp_server = "smtp.ipipp.com"
smtp_port = 465

3. 整合逻辑并添加去重机制

为了避免重复发送已经推送过的内容,我们需要记录已发送的条目链接,每次只推送新的内容。

import json
import os

# 存储已发送条目的文件路径
SENT_RECORD_FILE = "sent_entries.json"

def load_sent_records():
    # 加载已发送的条目链接
    if os.path.exists(SENT_RECORD_FILE):
        with open(SENT_RECORD_FILE, "r", encoding="utf-8") as f:
            return json.load(f)
    return []

def save_sent_records(records):
    # 保存已发送的条目链接
    with open(SENT_RECORD_FILE, "w", encoding="utf-8") as f:
        json.dump(records, f, ensure_ascii=False, indent=2)

def generate_email_content(entries):
    # 生成HTML格式的邮件正文
    html = "<h2>RSS最新更新内容</h2>"
    html += "<ul>"
    for entry in entries:
        html += f"<li><a href='{entry['link']}'>{entry['title']}</a><br/>发布时间:{entry['published']}</li>"
    html += "</ul>"
    return html

def main():
    rss_url = "https://rsshub.app/zhihu/daily"
    # 解析RSS内容
    entries = parse_rss(rss_url)
    # 加载已发送记录
    sent_links = load_sent_records()
    # 筛选未发送的新条目
    new_entries = [e for e in entries if e["link"] not in sent_links]
    
    if not new_entries:
        print("没有新的RSS内容需要推送")
        return
    
    # 生成邮件内容
    email_content = generate_email_content(new_entries)
    # 发送邮件
    send_email(
        sender_email,
        sender_password,
        receiver_email,
        "RSS订阅更新通知",
        email_content,
        smtp_server,
        smtp_port
    )
    # 更新已发送记录
    new_links = [e["link"] for e in new_entries]
    save_sent_records(sent_links + new_links)

if __name__ == "__main__":
    main()

设置定时任务

实现自动推送需要设置定时任务,在Linux系统下可以使用crontab,Windows系统下可以使用任务计划程序。以crontab为例,编辑定时任务:

# 打开crontab编辑界面
crontab -e
# 添加以下内容,每小时执行一次脚本,替换为实际脚本路径
0 * * * * /usr/bin/python3 /path/to/your/rss_mail.py >> /tmp/rss_mail.log 2>&1

注意事项

  • 邮箱SMTP授权码不是邮箱登录密码,需要在邮箱设置中单独开启SMTP服务获取
  • 不同邮箱的SMTP服务器地址和端口不同,需要参考对应邮箱的官方说明配置
  • 如果RSS条目较多,可以适当调整筛选逻辑,只推送最近一段时间内的更新内容
  • 定时任务的执行频率可以根据订阅源的更新频率调整,避免过于频繁请求RSS源

RSS邮件通知Pythonfeedparser修改时间:2026-06-26 22:03:46

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。