mcpField
S
send-email

send-email

github.com/wangyendt生产力9652 次安装6 天前更新
代码仓库

关于 send-email

send-email 是一个引导使用 Python 通过 SMTP 发邮件的技能,涵盖收集邮件信息和服务商凭据到发送确认。它支持纯文本、HTML、Markdown 转换、附件和变量模板。

主要功能

  1. 01通过所列或自定义服务商发送 SMTP 邮件
  2. 02纯文本和 HTML 邮件
  3. 03自动将 Markdown 转为 HTML
  4. 04添加多个文件附件
  5. 05支持变量替换的模板
  6. 06交互收集信息并确认发送

适用场景

  1. 01通过邮件发送格式化报告
  2. 02为邮件添加多个附件
  3. 03使用 HTML 模板生成通知
  4. 04配置邮件服务商的 SMTP 凭据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wangyendt/wayne-skills --skill send-email

安装后在 Claude Code 中输入/send-email确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

requirements.txt
assets/
report-summary.html
simple-notification.html
references/
smtp-servers.md
scripts/
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)邮件正文文本或 HTMLHello, 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)
  • 如何获取应用专用密码:
    1. 前往 https://myaccount.google.com/apppasswords
    2. 登录 Google 账户
    3. 选择“邮件”和“其他(自定义名称)”→ 输入一个名称,例如“SMTP 脚本”
    4. 点击“生成”→ 复制 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 授权码(不是账户密码)
  • 如何获取授权码:
    1. 前往 https://mail.qq.com 登录 QQ 邮箱
    2. 点击“设置”→“账户”
    3. 找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务”
    4. 开启“POP3/SMTP 服务”或“IMAP/SMTP 服务”
    5. 点击“生成授权码”
    6. 通过短信验证身份→ 复制生成的授权码
  • SMTP 服务器:smtp.qq.com
  • 端口:587(TLS)或 465(SSL)
  • 用户名:完整的 QQ 邮箱地址

网易 163 邮箱(@163.com)

  • 密码类型:SMTP 授权码(不是账户密码)
  • 如何获取授权码:
    1. 前往 https://mail.163.com 登录 163 邮箱
    2. 点击“设置”→“POP3/SMTP/IMAP”
    3. 点击“IMAP/SMTP 服务”旁边的“开启”
    4. 验证身份→ 点击“获取授权码”
    5. 复制 16 位授权码
  • SMTP 服务器:smtp.163.com
  • 端口:465(SSL)或 994(IMAP)
  • 用户名:完整的 163 邮箱地址

网易 126 邮箱(@126.com)

  • 密码类型:SMTP 授权码(不是账户密码)
  • 如何获取授权码:
    1. 前往 https://mail.126.com 登录 126 邮箱
    2. 点击“设置”→“POP3/SMTP/IMAP”
    3. 启用“IMAP/SMTP 服务”
    4. 复制页面上显示的授权密码
  • SMTP 服务器:smtp.126.com
  • 端口:465(SSL)或 25(SSL)
  • 用户名:完整的 126 邮箱地址

SendGrid

  • 密码类型:API 密钥(用作密码)
  • 如何获取 API 密钥:
    1. 前往 https://app.sendgrid.com 登录 SendGrid
    2. 前往 Settings → API Keys
    3. 点击“Create API Key”
    4. 设置权限→ 点击“Create & View”
    5. 复制 API 密钥(仅显示一次)
  • SMTP 服务器:smtp.sendgrid.net
  • 端口:587(TLS)或 465(SSL)
  • 用户名:apikey(必须是此字符串)

Mailgun

  • 密码类型:控制面板中的 SMTP 凭据
  • 如何获取凭据:
    1. 前往 https://app.mailgun.com 登录 Mailgun
    2. 前往 Sending → Domains
    3. 选择你的域名
    4. 从页面复制 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"

技能:我可以帮您发送这封邮件。还需要了解一些信息:

  1. 邮件内容:正文应该写什么?
  2. 发件人邮箱:应该使用哪个邮箱发送?

用户:内容是 "Hi John, just saying hello!",使用 [email protected] 发送

技能:我检测到您使用的是 Gmail。使用 Gmail 需要应用专用密码(而不是常规密码)。

获取应用专用密码:

  1. 前往 https://myaccount.google.com/apppasswords
  2. 登录并为“Mail”创建应用专用密码
  3. 复制 16 位密码

请提供您的 Gmail 应用专用密码:

用户:abcd efgh ijkl mnop

技能:已准备好发送:

是否继续发送?(y/n)


示例 2:使用默认发件人的 Markdown 内容

用户:发一封邮件给 [email protected],主题是"AR眼镜行业分析",内容是 [用户提供的 Markdown 报告]

技能:我来帮您发送这封邮件。检测到您没有指定发件人邮箱,我将使用默认邮箱 [email protected] 发送。

同时,我发现您的内容是 Markdown 格式,将自动转换为美观的 HTML 格式,让报告更易读。

为了使用 126 邮箱发送,我需要您提供 SMTP 授权码。

获取授权码步骤:

  1. 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
  2. 启用 "IMAP/SMTP 服务"
  3. 复制显示的授权密码

请提供 [email protected] 的授权码:

用户:[提供授权码]

技能:准备发送邮件:

  • 发件人: [email protected]
  • 收件人: [email protected]
  • 主题: AR眼镜行业分析
  • 格式: Markdown → HTML (自动转换)
  • 内容预览: 包含标题、列表、表格等格式化内容

确认发送? (y/n)


示例 3:使用默认发件人且缺少邮件内容

用户:发邮件给 [email protected],主题是项目报告

技能:我需要收集邮件内容:

邮件正文是什么?

用户:项目已完成,所有里程碑都已达成。

技能:我将使用默认邮箱 [email protected] 发送。

为了使用 126 邮箱发送,我需要您提供 SMTP 授权码。

获取授权码步骤:

  1. 登录 126 邮箱 → 设置 → POP3/SMTP/IMAP
  2. 启用 "IMAP/SMTP 服务"
  3. 复制显示的授权密码

请提供 [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] 发送邮件

技能:我需要收集一些信息:

  1. 主题:邮件主题是什么?
  2. 内容:邮件正文是什么?

用户:主题是 Test Email,内容是 Hello World

技能:由于你使用的是自定义域名([email protected]),我需要你的 SMTP 配置:

  1. SMTP 服务器:你的 SMTP 服务器地址是什么?
  2. SMTP 端口:应该使用哪个端口?
  3. 用户名:你的 SMTP 用户名是什么?
  4. 密码:你的 SMTP 密码是什么?

用户:服务器是 smtp.mydomain.com,端口是 587,用户名是 [email protected],密码是 secret

技能:准备发送:

是否继续发送?(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 服务器端口加密方式密码类型用户名
Gmailsmtp.gmail.com587TLS应用专用密码完整邮箱地址
Gmailsmtp.gmail.com465SSL应用专用密码完整邮箱地址
Outlooksmtp.office365.com587TLS帐户密码完整邮箱地址
QQ 邮箱smtp.qq.com587TLS授权码完整邮箱地址
QQ 邮箱smtp.qq.com465SSL授权码完整邮箱地址
163 邮箱smtp.163.com465SSL授权码完整邮箱地址
163 邮箱smtp.163.com994SSL授权码完整邮箱地址
126 邮箱smtp.126.com465SSL授权码完整邮箱地址
126 邮箱smtp.126.com25SSL授权码完整邮箱地址
SendGridsmtp.sendgrid.net587TLSAPI 密钥apikey
SendGridsmtp.sendgrid.net465SSLAPI 密钥apikey
Mailgunsmtp.mailgun.org587TLSSMTP 密码来自控制面板

安装

使用此技能前,请安装所需的 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 - 带有指标网格的专业报告模板

评论

支持 Markdown