如何用Python邮件脚本发送每日生成的HTML文件内容?
解决读取每日HTML文件并作为邮件正文发送的问题
嘿,看起来你已经搭好了HTML邮件的发送框架,就差读取每日生成的HTML文件这关键一步啦!别担心,咱们一步步来搞定:
1. 动态匹配当日的HTML文件名
你的文件名格式是export_MM-DD-YY.html,用Python的datetime模块就能自动生成当天的文件名,不用手动改日期:
from datetime import datetime # 获取当前日期,格式化为 MM-DD-YY 格式 today = datetime.today().strftime("%m-%d-%y") html_filename = f"export_{today}.html"
2. 读取HTML文件内容
用Python内置的文件操作读取内容,记得指定编码(比如utf-8)避免乱码,同时加上异常处理防止文件找不到的情况:
try: with open(html_filename, 'r', encoding='utf-8') as file: html_content = file.read() except FileNotFoundError: print(f"错误:没找到今日的HTML文件 {html_filename}") # 这里可以加告警逻辑,比如发个错误提示邮件或者直接退出程序 exit(1) except Exception as e: print(f"读取文件时出错:{str(e)}") exit(1)
3. 整合到你的邮件发送脚本里
把读取到的html_content作为邮件的HTML正文,设置subtype='html'就能让邮件客户端直接渲染内容了。下面是补全后的完整示例代码:
#!/usr/bin/env python3 import smtplib from datetime import datetime from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import config # 假设你的config.py存了邮箱账号、密码、SMTP服务器等配置 # 生成当日HTML文件名 today = datetime.today().strftime("%m-%d-%y") html_filename = f"export_{today}.html" # 读取HTML文件内容 try: with open(html_filename, 'r', encoding='utf-8') as file: html_content = file.read() except FileNotFoundError: print(f"错误:未找到今日报告文件 {html_filename}") exit(1) except Exception as e: print(f"读取文件失败:{str(e)}") exit(1) # 构建邮件 msg = MIMEMultipart() msg['From'] = config.sender_email msg['To'] = config.recipient_email msg['Subject'] = f"今日数据报告 ({today})" # 添加HTML正文(这一步就是让邮件直接显示内容的关键) msg.attach(MIMEText(html_content, 'html')) # 发送邮件 try: with smtplib.SMTP(config.smtp_server, config.smtp_port) as server: server.starttls() # 如果用SSL协议,换成 smtplib.SMTP_SSL 即可 server.login(config.sender_email, config.sender_password) server.send_message(msg) print(f"邮件发送成功!已投递 {html_filename} 的内容") except Exception as e: print(f"发送邮件失败:{str(e)}")
几个实用小提示
- 如果HTML文件不在脚本同目录下,要写完整路径,比如
html_filename = f"/home/yourname/reports/export_{today}.html" - 确保
config.py里的SMTP配置正确:比如Gmail用smtp.gmail.com+端口587,QQ邮箱用smtp.qq.com+端口587,记得用授权码代替密码 - 异常处理可以根据需求扩展,比如文件不存在时给管理员发个提醒邮件
内容的提问来源于stack exchange,提问作者cloudjumper2000
相关产品推荐
相关产品推荐

