关于 send-email
send-email 是一个引导使用 Python 通过 SMTP 发邮件的技能,涵盖收集邮件信息和服务商凭据到发送确认。它支持纯文本、HTML、Markdown 转换、附件和变量模板。
主要功能
- 01通过所列或自定义服务商发送 SMTP 邮件
- 02纯文本和 HTML 邮件
- 03自动将 Markdown 转为 HTML
- 04添加多个文件附件
- 05支持变量替换的模板
- 06交互收集信息并确认发送
适用场景
- 01通过邮件发送格式化报告
- 02为邮件添加多个附件
- 03使用 HTML 模板生成通知
- 04配置邮件服务商的 SMTP 凭据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wangyendt/ wayne-skills --skill send-email安装后在 Claude Code 中输入/send-email确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
requirements.txtassets/report-summary.htmlsimple-notification.htmlreferences/smtp-servers.mdscripts/send_email.py详细介绍
发送邮件
使用 Python 通过 SMTP 发送邮件,支持纯文本、HTML 格式、文件附件和基于模板的邮件。
主要功能
- 默认发件人邮箱:未指定发件人时,自动使用
[email protected] - Markdown 自动转换为 HTML:检测 Markdown 内容并将其转换为精美的 HTML
- 支持多种邮件服务商:支持 Gmail、Outlook、QQ 邮箱、163/126 邮箱和自定义 SMTP
- 文件附件:可为邮件附加多个文件
- 邮件模板:使用带变量替换功能的模板文件
交互式邮件发送流程
此技能将逐步引导你完成邮件发送流程。
第 1 步:收集基本邮件信息
向用户询问以下必填信息。若有任何信息缺失,请提示用户提供:
| 信息 | 描述 | 示例 |
|---|---|---|
收件人 (--to) | 邮件的收件地址 | [email protected] |
主题 (--subject) | 邮件主题 | Monthly Report |
内容 (--content) | 邮件正文文本或 HTML | Hello, here is your report. |
重要——默认发件人邮箱行为:
如果用户在初始请求中未指定发件人邮箱,请自动使用 [email protected] 作为默认发件人。不要询问用户要使用哪个邮箱发送。
只有在用户明确表示想使用自己的邮箱地址时,才询问用户是否要使用其他发件人邮箱。
使用默认邮箱 [email protected] 时,直接进入第 2 步,并询问 126 邮箱授权码。
第 2 步:识别邮件服务商并收集凭据
根据发件人邮箱的域名,识别邮件服务商并索取相应凭据。
邮件服务商检测
@gmail.com, @googlemail.com → Gmail
@outlook.com, @hotmail.com, @live.com, @office365.com → Outlook/Office 365
@qq.com, @vip.qq.com → QQ Mail
@163.com, @126.com → NetEase Mail
@aliyun.com, @aliyun-inc.com → Aliyun Mail
@sendgrid.net, @*.sendgrid.net → SendGrid
@*.mailgun.org → Mailgun
Other domains → Custom SMTP (ask for server, port, username, password)
特定服务商的凭据要求
Gmail(@gmail.com、@googlemail.com)
- 密码类型:应用专用密码(不是账户密码)
- 前提条件:必须启用双重身份验证(2FA)
- 如何获取应用专用密码:
- 前往 https://myaccount.google.com/apppasswords
- 登录 Google 账户
- 选择“邮件”和“其他(自定义名称)”→ 输入一个名称,例如“SMTP 脚本”
- 点击“生成”→ 复制 16 位密码
- SMTP 服务器:
smtp.gmail.com - 端口:
587(TLS)或465(SSL) - 用户名:完整的 Gmail 地址
Outlook / Office 365(@outlook.com、@hotmail.com、@live.com、@office365.com)
- 密码类型:账户密码(与网页登录密码相同)
- SMTP 服务器:
smtp.office365.com - 端口:
587(TLS) - 用户名:完整的 Outlook / Office 365 邮箱地址
QQ 邮箱(@qq.com、@vip.qq.com)
- 密码类型:SMTP 授权码(不是账户密码)
- 如何获取授权码:
- 前往 https://mail.qq.com 登录 QQ 邮箱
- 点击“设置”→“账户”
- 找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务”
- 开启“POP3/SMTP 服务”或“IMAP/SMTP 服务”
- 点击“生成授权码”
- 通过短信验证身份→ 复制生成的授权码
- SMTP 服务器:
smtp.qq.com - 端口:
587(TLS)或465(SSL) - 用户名:完整的 QQ 邮箱地址
网易 163 邮箱(@163.com)
- 密码类型:SMTP 授权码(不是账户密码)
- 如何获取授权码:
- 前往 https://mail.163.com 登录 163 邮箱
- 点击“设置”→“POP3/SMTP/IMAP”
- 点击“IMAP/SMTP 服务”旁边的“开启”
- 验证身份→ 点击“获取授权码”
- 复制 16 位授权码
- SMTP 服务器:
smtp.163.com - 端口:
465(SSL)或994(IMAP) - 用户名:完整的 163 邮箱地址
网易 126 邮箱(@126.com)
- 密码类型:SMTP 授权码(不是账户密码)
- 如何获取授权码:
- 前往 https://mail.126.com 登录 126 邮箱
- 点击“设置”→“POP3/SMTP/IMAP”
- 启用“IMAP/SMTP 服务”
- 复制页面上显示的授权密码
- SMTP 服务器:
smtp.126.com - 端口:
465(SSL)或25(SSL) - 用户名:完整的 126 邮箱地址
SendGrid
- 密码类型:API 密钥(用作密码)
- 如何获取 API 密钥:
- 前往 https://app.sendgrid.com 登录 SendGrid
- 前往 Settings → API Keys
- 点击“Create API Key”
- 设置权限→ 点击“Create & View”
- 复制 API 密钥(仅显示一次)
- SMTP 服务器:
smtp.sendgrid.net - 端口:
587(TLS)或465(SSL) - 用户名:
apikey(必须是此字符串)
Mailgun
- 密码类型:控制面板中的 SMTP 凭据
- 如何获取凭据:
- 前往 https://app.mailgun.com 登录 Mailgun
- 前往 Sending → Domains
- 选择你的域名
- 从页面复制 SMTP 用户名和密码
- SMTP 服务器:
smtp.mailgun.org - 端口:
587(TLS) - 用户名:从 Mailgun 控制面板获取
自定义 SMTP(其他域名) 请用户提供:
- SMTP 服务器地址
- SMTP 端口
- 用户名
- 密码
第 3 步:自动检测并处理 Markdown 内容
脚本会根据常见格式自动检测邮件内容是否为 Markdown:
- 标题(
#、##、###) - 粗体/斜体文本(
**bold**、*italic*) - 列表(
- item或1. item) - 代码块(```)
- 链接(
[text](url))
如果检测到 Markdown,内容会自动转换为样式精美的 HTML,并包含:
- 专业的字体排版和间距
- 按颜色区分的标题
- 样式化的表格和代码块
- 适配邮件客户端的响应式设计
Markdown 内容无需手动指定 --content-type html——脚本会自动处理!
步骤 4:收集可选信息(如有需要)
--from-name:发件人显示名称(例如,“John Doe”)--content-type html:用于 HTML 格式的邮件(默认为纯文本,但会自动转换 Markdown)--attach:要附加的文件路径(可指定多个)--template:使用模板文件,而非内容--template-vars:模板变量的 JSON 字符串
步骤 5:确认并发送
发送前,请向用户确认:
Ready to send:
From: [Sender Email]
To: [Recipient Email]
Subject: [Subject]
Content Type: [Plain/HTML]
Attachments: [List of attachments or None]
Proceed to send? (y/n)
如果用户确认,请使用收集到的所有参数执行 send_email.py 脚本。
对话示例
示例 1:发送基本的 Gmail 邮件
用户:给 [email protected] 发一封邮件,主题是 "Hello"
技能:我可以帮您发送这封邮件。还需要了解一些信息:
- 邮件内容:正文应该写什么?
- 发件人邮箱:应该使用哪个邮箱发送?
用户:内容是 "Hi John, just saying hello!",使用 [email protected] 发送
技能:我检测到您使用的是 Gmail。使用 Gmail 需要应用专用密码(而不是常规密码)。
获取应用专用密码:
- 前往 https://myaccount.google.com/apppasswords
- 登录并为“Mail”创建应用专用密码
- 复制 16 位密码
请提供您的 Gmail 应用专用密码:
用户:abcd efgh ijkl mnop
技能:已准备好发送:
- 发件人:[email protected]
- 收件人:[email protected]
- 主题:Hello
- 内容:Hi John, just saying hello!
是否继续发送?(y/n)
示例 2:使用默认发件人的 Markdown 内容
用户:发一封邮件给 [email protected],主题是"AR眼镜行业分析",内容是 [用户提供的 Markdown 报告]
技能:我来帮您发送这封邮件。检测到您没有指定发件人邮箱,我将使用默认邮箱 [email protected] 发送。
同时,我发现您的内容是 Markdown 格式,将自动转换为美观的 HTML 格式,让报告更易读。
为了使用 126 邮箱发送,我需要您提供 SMTP 授权码。
获取授权码步骤:
- 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
- 启用 "IMAP/SMTP 服务"
- 复制显示的授权密码
请提供 [email protected] 的授权码:
用户:[提供授权码]
技能:准备发送邮件:
- 发件人: [email protected]
- 收件人: [email protected]
- 主题: AR眼镜行业分析
- 格式: Markdown → HTML (自动转换)
- 内容预览: 包含标题、列表、表格等格式化内容
确认发送? (y/n)
示例 3:使用默认发件人且缺少邮件内容
用户:发邮件给 [email protected],主题是项目报告
技能:我需要收集邮件内容:
邮件正文是什么?
用户:项目已完成,所有里程碑都已达成。
技能:我将使用默认邮箱 [email protected] 发送。
为了使用 126 邮箱发送,我需要您提供 SMTP 授权码。
获取授权码步骤:
- 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
- 启用 "IMAP/SMTP 服务"
- 复制显示的授权密码
请提供 [email protected] 的授权码:
用户:[提供授权码]
技能:准备发送邮件:
- 发件人: [email protected]
- 收件人: [email protected]
- 主题: 项目报告
- 内容: 项目已完成,所有里程碑都已达成。
确认发送?(y/n)
示例 4:用户指定自定义发件人邮箱
用户:从 [email protected] 给 [email protected] 发送一份关于 Q4 业绩的报告,并附上附件 /home/user/q4_report.pdf
技能:我来帮您发送这封邮件。请提供邮件内容:
关于 Q4 业绩,邮件中应该写些什么?
用户:请查收附件中的 Q4 财务报告。如有任何问题,请告知我。
技能:我看到您使用的是 Outlook。您需要提供 Outlook 账户密码(与网页登录密码相同)。
请提供您的 Outlook 密码:
用户:mypassword123
技能:已准备好发送:
- 发件人:[email protected]
- 收件人:[email protected]
- 主题:Q4 业绩
- 内容:请查收附件中的 Q4 财务报告。如有任何问题,请告知我。
- 附件:/home/user/q4_report.pdf
是否继续发送?(y/n)
示例 5:自定义 SMTP
用户:从 [email protected] 向 [email protected] 发送邮件
技能:我需要收集一些信息:
- 主题:邮件主题是什么?
- 内容:邮件正文是什么?
用户:主题是 Test Email,内容是 Hello World
技能:由于你使用的是自定义域名([email protected]),我需要你的 SMTP 配置:
- SMTP 服务器:你的 SMTP 服务器地址是什么?
- SMTP 端口:应该使用哪个端口?
- 用户名:你的 SMTP 用户名是什么?
- 密码:你的 SMTP 密码是什么?
用户:服务器是 smtp.mydomain.com,端口是 587,用户名是 [email protected],密码是 secret
技能:准备发送:
- 发件人:[email protected]
- 收件人:[email protected]
- 主题:Test Email
- 内容:Hello World
- SMTP 服务器:smtp.mydomain.com:587
是否继续发送?(y/n)
脚本命令参考
收集完所有信息后,使用适当的参数执行脚本:
基本命令
python3 scripts/send_email.py \
--to [email protected] \
--subject "Email Subject" \
--content "Email body content" \
--smtp-server smtp.gmail.com \
--smtp-port 587 \
--username [email protected] \
--password your-password-or-app-password
HTML 邮件
python3 scripts/send_email.py \
--to [email protected] \
--subject "Email Subject" \
--content "<h1>Hello</h1><p>HTML content</p>" \
--content-type html \
--smtp-server smtp.gmail.com \
--smtp-port 587 \
--username [email protected] \
--password your-password
带附件的邮件
python3 scripts/send_email.py \
--to [email protected] \
--subject "Email Subject" \
--content "Email body" \
--attach /path/to/file1.pdf \
--attach /path/to/file2.csv \
--smtp-server smtp.gmail.com \
--smtp-port 587 \
--username [email protected] \
--password your-password
使用模板的邮件
python3 scripts/send_email.py \
--to [email protected] \
--subject "Email Subject" \
--template assets/simple-notification.html \
--template-vars '{"title":"Notification","message":"Your report is ready!"}' \
--content-type html \
--smtp-server smtp.gmail.com \
--smtp-port 587 \
--username [email protected] \
--password your-password
SSL 连接(替代 TLS)
python3 scripts/send_email.py \
--to [email protected] \
--subject "Email Subject" \
--content "Email body" \
--smtp-server smtp.gmail.com \
--smtp-port 465 \
--use-ssl \
--username [email protected] \
--password your-password
SMTP 服务器配置参考
| 提供商 | SMTP 服务器 | 端口 | 加密方式 | 密码类型 | 用户名 |
|---|---|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | TLS | 应用专用密码 | 完整邮箱地址 |
| Gmail | smtp.gmail.com | 465 | SSL | 应用专用密码 | 完整邮箱地址 |
| Outlook | smtp.office365.com | 587 | TLS | 帐户密码 | 完整邮箱地址 |
| QQ 邮箱 | smtp.qq.com | 587 | TLS | 授权码 | 完整邮箱地址 |
| QQ 邮箱 | smtp.qq.com | 465 | SSL | 授权码 | 完整邮箱地址 |
| 163 邮箱 | smtp.163.com | 465 | SSL | 授权码 | 完整邮箱地址 |
| 163 邮箱 | smtp.163.com | 994 | SSL | 授权码 | 完整邮箱地址 |
| 126 邮箱 | smtp.126.com | 465 | SSL | 授权码 | 完整邮箱地址 |
| 126 邮箱 | smtp.126.com | 25 | SSL | 授权码 | 完整邮箱地址 |
| SendGrid | smtp.sendgrid.net | 587 | TLS | API 密钥 | apikey |
| SendGrid | smtp.sendgrid.net | 465 | SSL | API 密钥 | apikey |
| Mailgun | smtp.mailgun.org | 587 | TLS | SMTP 密码 | 来自控制面板 |
安装
使用此技能前,请安装所需的 Python 依赖项:
pip install -r requirements.txt
这会安装 markdown 库(版本 ≥3.4.0),该库是自动将 Markdown 转换为 HTML 所必需的。
资源
scripts/send_email.py
用于发送邮件的主要 Python 脚本。支持:
- 纯文本和 HTML 内容
- 多个文件附件
- 支持变量替换的邮件模板
- TLS 和 SSL 加密
- 自定义发件人名称
references/smtp-servers.md
常见的 SMTP 服务器配置,包括 Gmail、Outlook、126、QQ、163、SendGrid、Mailgun 和阿里云。
assets/
邮件模板:
simple-notification.html- 基本通知模板report-summary.html- 带有指标网格的专业报告模板