电子邮件操作技能Skill email

这是一个基于命令行的电子邮件自动化工具,通过IMAP/SMTP协议实现邮件的发送、接收和读取功能。支持多账户管理,使用curl配合OpenSSL/LibreSSL确保与腾讯企业邮箱等邮件服务商的TLS兼容性。所有凭证安全存储在macOS钥匙串中,提供安全的邮件操作解决方案。关键词:电子邮件自动化,IMAP/SMTP协议,邮件发送接收,命令行邮件工具,腾讯企业邮箱兼容,macOS钥匙串安全,多账户邮件管理,curl邮件客户端

DevOps 0 次安装 0 次浏览 更新于 2/28/2026

name: email version: 0.0.2 author: 7Sageer, Claude description: | 通过IMAP/SMTP协议进行电子邮件操作的技能,用于发送、获取和读取邮件。 使用curl配合OpenSSL/LibreSSL实现可靠的TLS兼容性,支持腾讯企业邮箱等邮件服务商。 凭证安全存储在macOS钥匙串中。 when_to_use: | 当用户请求电子邮件相关操作时使用此技能:

  • 发送邮件(“发送邮件给…”、“给X发邮件关于…”、“发邮件给…”)
  • 查看邮件(“检查我的邮件”、“有新邮件吗?”、“查看邮件”)
  • 读取特定邮件(“读取邮件#5”、“显示最新邮件”、“读取邮件”)
  • 邮件自动化任务(“当…时通知我”、“转发给…”)

电子邮件操作技能

概述

本技能通过curl直接访问IMAP/SMTP协议提供电子邮件功能。支持:

  • 发送邮件:通过SMTP+TLS发送邮件
  • 获取邮件列表:通过IMAP获取邮件列表
  • 读取邮件内容:按ID读取完整邮件内容
  • 多账户支持:安全凭证存储的多账户管理

架构

  • 协议:直接通过TLS的IMAP(端口993)和SMTP(端口465)
  • 安全性:密码存储在macOS钥匙串中,从不存储在配置文件中
  • 兼容性:使用curl配合OpenSSL/LibreSSL(比rustls更好的腾讯企业邮箱支持)
  • 配置:基于YAML的账户管理,位于references/accounts.yaml

可用脚本

1. 发送邮件(send-email.sh

通过SMTP发送邮件,支持内联或基于文件的内容。

用法:

./scripts/send-email.sh -t recipient@example.com -s "主题" -b "消息内容"
./scripts/send-email.sh -t recipient@example.com -s "主题" -f message.txt
./scripts/send-email.sh -t recipient@example.com -c another@example.com -s "主题" -b "消息内容"

参数:

  • -a ACCOUNT - 账户名称(默认:来自accounts.yaml)
  • -t EMAIL - 收件人邮箱(必需)
  • -c EMAIL - 抄送收件人(可选)
  • -s TEXT - 邮件主题(必需)
  • -b TEXT - 内联邮件正文(如果没有-f则必需)
  • -f FILE - 来自文件的邮件正文(如果没有-b则必需)

2. 获取邮件(fetch-emails.sh

从邮箱中检索邮件头信息。

用法:

./scripts/fetch-emails.sh                    # 从INBOX获取10封最新邮件
./scripts/fetch-emails.sh -n 20              # 获取20封最新邮件
./scripts/fetch-emails.sh -m "Sent"          # 从已发送文件夹获取

参数:

  • -a ACCOUNT - 账户名称(默认:来自accounts.yaml)
  • -m FOLDER - 邮箱文件夹(默认:INBOX)
  • -n N - 要获取的邮件数量(默认:10)

3. 读取邮件(read-email.sh

按ID读取特定邮件的完整内容。

用法:

./scripts/read-email.sh 123                   # 读取完整邮件
./scripts/read-email.sh -p HEADER 123         # 仅读取邮件头
./scripts/read-email.sh -p BODY 123           # 仅读取邮件正文

参数:

  • -a ACCOUNT - 账户名称(默认:来自accounts.yaml)
  • -m FOLDER - 邮箱文件夹(默认:INBOX)
  • -p PART - 要检索的部分:HEADER、BODY或TEXT(默认:TEXT)
  • EMAIL_ID - 邮件ID(必需,位置参数)

配置

账户设置

编辑references/accounts.yaml添加电子邮件账户:

default_account: SUSTech

accounts:
  SUSTech:
    email: qihr2022@mail.sustech.edu.cn
    display_name: Hanrui Qi
    imap:
      host: imap.exmail.qq.com
      port: 993
      login: qihr2022@mail.sustech.edu.cn
      protocol: imaps
    smtp:
      host: smtp.exmail.qq.com
      port: 465
      login: qihr2022@mail.sustech.edu.cn
      protocol: smtps

密码管理

密码存储在macOS钥匙串中。使用以下命令设置:

# IMAP密码
security add-generic-password \
  -a "qihr2022@mail.sustech.edu.cn" \
  -s "email-imap-sustech" \
  -w "your-password" \
  -U

# SMTP密码
security add-generic-password \
  -a "qihr2022@mail.sustech.edu.cn" \
  -s "email-smtp-sustech" \
  -w "your-password" \
  -U

钥匙串服务命名约定:

  • IMAP:email-imap-{account_name_lowercase}
  • SMTP:email-smtp-{account_name_lowercase}

常见用例

1. 快速发送邮件

当用户说:“发送邮件给alice@example.com关于会议”

cd /Users/seven/Claude/.claude/skills/email
./scripts/send-email.sh \
  -t alice@example.com \
  -s "会议讨论" \
  -b "你好Alice,我想跟进我们的会议..."

2. 检查最近邮件

当用户说:“检查我的邮件"或"有新邮件吗?”

cd /Users/seven/Claude/.claude/skills/email
./scripts/fetch-emails.sh -n 5

解析输出并为用户总结。

搜索/过滤(管道+grep/rg)

这是一种轻量级的方式,可以在fetch-emails.sh获取的最近邮件中"搜索"(仅邮件头:发件人/主题/日期)。

cd /Users/seven/Claude/.claude/skills/email

# 任意关键字(例如github),同时保留邮件ID行(便于后续读取)
./scripts/fetch-emails.sh -n 200 | rg -i "github" -B 2

# 主题关键字(建议用rg;没有rg就用grep -E)
./scripts/fetch-emails.sh -n 200 | rg "主题:.*会议" -B 2
./scripts/fetch-emails.sh -n 200 | grep -E "主题:.*会议" -B 2

# 发件人关键字
./scripts/fetch-emails.sh -n 200 | rg "发件人:.*alice" -B 1

# 提取匹配到的邮件ID,然后读取正文(取第一个匹配)
email_id="$(
  ./scripts/fetch-emails.sh -n 200 |
    rg -i "github" -B 2 |
    sed -nE 's/.*邮件 #([0-9]+).*/\1/p' |
    head -n 1
)"
./scripts/read-email.sh "$email_id"

如果email_id为空,增加-n(获取更多最近邮件)或调整关键字/正则表达式。

3. 读取特定邮件

当用户说:“读取邮件#3"或"显示最新邮件”

cd /Users/seven/Claude/.claude/skills/email
./scripts/read-email.sh 3

4. 邮件自动化

与其他技能结合实现自动化:

  • 检查日历 → 发送提醒邮件
  • 监控收件箱 → 创建系统通知
  • 获取邮件 → 解析并提取信息

错误处理

常见问题

  1. 认证失败

    • 验证钥匙串密码是否正确设置
    • 检查邮件服务商设置中是否启用了IMAP/SMTP
    • 对于腾讯企业邮箱,使用应用专用密码
  2. 连接超时

    • 验证网络连接
    • 检查防火墙设置,端口993(IMAP)和465(SMTP)
    • 确认accounts.yaml中的主机和端口
  3. TLS握手失败

    • 本技能使用curl配合OpenSSL/LibreSSL以获得更好的兼容性
    • 如果问题持续,检查邮件服务商的TLS要求

安全考虑

  • 从不记录或显示密码 - 密码仅存储在钥匙串中
  • 发送前确认 - 特别是重要邮件
  • 验证收件人 - 发送前检查电子邮件地址
  • 尊重隐私 - 除非明确请求,否则不要读取邮件

服务商特定说明

腾讯企业邮箱(exmail.qq.com

  • IMAP:imap.exmail.qq.com:993(SSL/TLS)
  • SMTP:smtp.exmail.qq.com:465(SSL/TLS)
  • 需要在设置中启用IMAP/SMTP
  • 推荐使用应用专用密码
  • 注意:某些腾讯企业邮箱服务器上,IMAP SEARCH用于字符串条件(如SUBJECT/FROM/HEADER)可能不可靠;建议通过fetch-emails.sh | rg/grep进行客户端过滤。

Gmail

Outlook/Office 365

技术细节

为什么使用curl而不是rustls?

rustls TLS库与某些邮件服务商(特别是腾讯企业邮箱)存在兼容性问题。使用curl配合OpenSSL/LibreSSL提供:

  • 更好的TLS握手兼容性
  • 更广泛的密码套件支持
  • 与企业电子邮件系统经过验证的可靠性

IMAP vs POP3

本技能使用IMAP(不是POP3)因为:

  • IMAP支持文件夹管理
  • 消息保留在服务器上
  • 多设备访问更好
  • 搜索和过滤更灵活

未来增强

潜在的改进(尚未实现):

  • 服务器端IMAP SEARCH(主题/发件人/日期;取决于服务商)
  • 附件处理
  • HTML邮件撰写
  • 邮件过滤和规则
  • OAuth2认证支持
  • 批量操作

参考资料