Linux环境下如何发送含内嵌图片的Jupyter生成HTML邮件正文?
Hey, 我刚好折腾过类似的需求,给你分享两种在Linux环境下把带内嵌图片的HTML作为邮件正文发送的靠谱方法,亲测好用:
方法一:用命令行工具(mutt)快速发送
如果你只是想快速测试或者偶尔发送,用mutt工具最方便。首先确保你已经安装了mutt(Debian/Ubuntu用sudo apt install mutt,RHEL/CentOS用sudo yum install mutt)。
因为你已经用jupyter nbconvert生成了内嵌图片的单个HTML(图片是base64编码的data URI格式),所以直接用下面的命令就能发送:
mutt -e "set content_type=text/html" -s "你的Notebook报告标题" -- 收件人邮箱@xxx.com < 你的生成文件.html
-e "set content_type=text/html":告诉mutt邮件正文是HTML格式-s:指定邮件主题- 最后用
<读取HTML文件作为正文内容
方法二:用Python脚本实现自动化发送
如果要配合定期任务(比如cron)自动运行,Python脚本会更灵活可控。这里用smtplib和email标准库,不需要额外安装依赖:
import smtplib from email.mime.text import MIMEText from email.header import Header # ---------------------- 配置信息 ---------------------- SMTP_SERVER = 'smtp.xxx.com' # 你的SMTP服务器地址,比如smtp.gmail.com SMTP_PORT = 587 # TLS端口一般是587,SSL端口用465 SENDER_EMAIL = '你的邮箱@xxx.com' SENDER_PWD = '你的邮箱密码/应用密码' # 比如Gmail需要用应用密码,不是登录密码 RECIPIENT_EMAIL = '收件人邮箱@xxx.com' EMAIL_SUBJECT = '定期生成的Notebook分析报告' HTML_FILE_PATH = '你的生成文件.html' # ------------------------------------------------------ # 读取内嵌图片的HTML文件内容 with open(HTML_FILE_PATH, 'r', encoding='utf-8') as f: html_body = f.read() # 构建HTML格式的邮件对象 msg = MIMEText(html_body, 'html', 'utf-8') msg['From'] = Header(SENDER_EMAIL) msg['To'] = Header(RECIPIENT_EMAIL) msg['Subject'] = Header(EMAIL_SUBJECT, 'utf-8') # 发送邮件 try: # 连接SMTP服务器,启用TLS加密 server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() server.login(SENDER_EMAIL, SENDER_PWD) # 发送邮件 server.sendmail(SENDER_EMAIL, RECIPIENT_EMAIL, msg.as_string()) print("✅ 邮件发送成功!") except Exception as e: print(f"❌ 邮件发送失败:{str(e)}") finally: server.quit()
额外注意点:
- 确保你用
nbconvert生成HTML时加了--embed-images参数,这样图片才会被转成base64内嵌到HTML里,命令示例:jupyter nbconvert --to html --embed-images 你的Notebook.ipynb - 如果用Python脚本配合cron定期运行,记得给脚本加执行权限,并且在cron任务里指定完整的文件路径(比如
/home/xxx/your_script.py)。
内容的提问来源于stack exchange,提问作者fatdragon
相关产品推荐
相关产品推荐

