全功能邮件管理助手,支持发送(HTML样式+附件+内嵌图片)、接收、搜索、查看、删除、标记、移动邮件。覆盖市面上所有主流邮箱平台(163、QQ、126、Sina、Aliyun、139、189、Gmail、Outlook、Yahoo、iCloud、Zoho 等)。使用 Python 标准库(smtplib + imaplib),无需安装第三方依赖。触发词:发邮件、收邮件、查邮件、删邮件、邮件管理、邮箱、SMTP、IMAP、发送附件、HTML邮件、邮件搜索。
Email Master — 全功能邮件管理技能
功能概述
Email Master — 全功能邮件管理技能是一项面向实际任务的技能,主要用于本技能使用 Python 标准库( smtplib + imaplib )实现完整的邮件收发管理, 无需安装第三方依赖;支持功能:;
核心要点
- 发送 :纯文本/HTML正文(支持HTML文件路径)、多附件、内嵌图片、多收件人、抄送/密送、回复/转发邮件、高优先级;
- 接收 :列出邮件列表、分页浏览、仅看未读;
- 搜索 :按主题/发件人/收件人/日期/是否。
使用与执行
它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
Email Master — 全功能邮件管理技能
概述
本技能使用 Python 标准库(smtplib + imaplib)实现完整的邮件收发管理,无需安装第三方依赖。
支持功能:
- 发送:纯文本/HTML正文(支持HTML文件路径)、多附件、内嵌图片、多收件人、抄送/密送、回复/转发邮件、高优先级
- 接收:列出邮件列表、分页浏览、仅看未读
- 搜索:按主题/发件人/收件人/日期/是否未读筛选
- 查看:完整邮件内容(含正文、HTML、附件列表)、回复链信息、附件大小
- 管理:删除(支持批量)、标记已读/未读/星标(支持批量)、移动文件夹
- 下载:保存单个附件或全部附件到本地
- 自动识别:根据邮箱地址自动匹配SMTP/IMAP配置
脚本说明
| 脚本 | 功能 |
|---|---|
scripts/send_email.py |
邮件发送(SMTP,支持HTML+附件+回复/转发+重试) |
scripts/mail_client.py |
邮件接收与管理(IMAP,兼容163 Unsafe Login) |
scripts/email_config.py |
邮箱配置自动识别(根据邮箱地址匹配服务器配置) |
Python 运行路径(优先使用):
C:Usersadmin.workbuddybinariespythonversions3.13.12python.exe
快速开始
第一步:自动识别邮箱配置
python scripts/email_config.py user@163.com # 自动输出:SMTP服务器、IMAP服务器、端口、认证方式
第二步:确认授权码
大多数邮箱不支持账户密码,需生成授权码/应用密码:
- 163/126:网页版 → 设置 → POP3/SMTP/IMAP → 开启 → 获取授权码
- QQ:邮箱设置 → 账户 → 生成授权码
- Gmail:Google账号 → 安全 → 两步验证 → 应用密码
第三步:发送或收取邮件
见下方详细用法。
邮箱配置参考
常用快查表(完整配置见 references/email_providers.md,也可用 email_config.py 自动查询):
| 邮箱 | SMTP | IMAP | SSL端口 | 认证方式 |
|---|---|---|---|---|
| 163 | smtp.163.com | imap.163.com | 465/993 | 授权码 |
| smtp.qq.com | imap.qq.com | 465/993 | 授权码 | |
| 126 | smtp.126.com | imap.126.com | 465/993 | 授权码 |
| Gmail | smtp.gmail.com | imap.gmail.com | 587/993 | 应用密码 |
| Outlook | smtp-mail.outlook.com | imap-mail.outlook.com | 587/993 | 应用密码 |
| Yahoo | smtp.mail.yahoo.com | imap.mail.yahoo.com | 465/993 | 应用密码 |
| iCloud | smtp.mail.me.com | imap.mail.me.com | 587/993 | 应用密码 |
| Aliyun | smtp.aliyun.com | imap.aliyun.com | 465/993 | 授权码 |
| 139 | smtp.139.com | imap.139.com | 465/993 | 授权码 |
| 189 | smtp.189.cn | imap.189.cn | 465/993 | 授权码 |
发送邮件
基本发送(纯文本)
python scripts/send_email.py --host smtp.163.com --port 465 --user tnktechqa@163.com --password "授权码" --to "收件人@example.com" --subject "邮件主题" --body "邮件正文内容"
发送 HTML 邮件
# 直接传入HTML字符串 python scripts/send_email.py --host smtp.163.com --port 465 --user tnktechqa@163.com --password "授权码" --to "收件人@example.com" --subject "HTML邮件" --html "你好
这是一封 HTML 邮件。
" # 传入HTML文件路径(自动读取文件内容) python scripts/send_email.py --host smtp.163.com --port 465 --user tnktechqa@163.com --password "授权码" --to "收件人@example.com" --subject "月报" --html "/path/to/report.html"
发送带附件的邮件
python scripts/send_email.py --host smtp.163.com --port 465 --user tnktechqa@163.com --password "授权码" --to "收件人@example.com" --subject "请查收报告" --html "请查收附件中的报告。
" --attach "/path/to/report.pdf" "/path/to/data.xlsx"
发送给多人并抄送
python scripts/send_email.py --host smtp.163.com --port 465 --user tnktechqa@163.com --password "授权码" --to "a@example.com,b@example.com" --cc "boss@company.com" --subject "通知" --html "内容
" --from-name "技术团队"
回复邮件
# 传入原始邮件的 Message-ID(查看邮件详情时获取) python scripts/send_email.py --host smtp.163.com --port 465 --user tnktechqa@163.com --password "授权码" --to "sender@example.com" --subject "Re: 原始主题" --body "收到,谢谢!" --reply-to ""
高优先级邮件
python scripts/send_email.py --host smtp.163.com --port 465 --user tnktechqa@163.com --password "授权码" --to "boss@company.com" --subject "紧急通知" --html "紧急事项
" --priority high
作为模块调用
import sys
sys.path.insert(0, "C:/Users/admin/.workbuddy/skills/email-master/scripts")
from send_email import send_email
result = send_email(
host="smtp.163.com",
port=465,
user="tnktechqa@163.com",
password="授权码",
to=["收件人@example.com"],
subject="主题",
html_body="HTML内容
正文
",
attachments=["/path/to/file.pdf"],
from_name="发件人名称",
reply_to_msgid="",
priority="high",
max_retries=2,
)
print(result) # {"success": True, "message": "..."}
接收与管理邮件
163/126/Yeah 邮箱注意:首次使用 IMAP 可能触发「Unsafe Login」安全限制。 本脚本已内置 ID 命令绕过机制。若仍被拒绝,请登录网页版邮箱确认授权。 详见下方「常见问题」。
列出文件夹
python scripts/mail_client.py --host imap.163.com --user tnktechqa@163.com --password "授权码" folders
列出收件箱最新20封
python scripts/mail_client.py --host imap.163.com --user tnktechqa@163.com --password "授权码" list --limit 20
只看未读邮件
python scripts/mail_client.py ... list --unread
搜索邮件
# 按主题搜索 python scripts/mail_client.py ... search --subject "发票" # 按发件人搜索 python scripts/mail_client.py ... search --from "hr@company.com" # 按日期范围搜索(格式:DD-Mon-YYYY,如 01-May-2024) python scripts/mail_client.py ... search --since "01-May-2024" --before "31-May-2024" # 组合搜索 python scripts/mail_client.py ... search --subject "合同" --from "legal@firm.com" --unread
查看邮件详情
# 查看并自动标记已读 python scripts/mail_client.py ... view --uid 123 # 查看但不标记已读 python scripts/mail_client.py ... view --uid 123 --no-mark-read
删除邮件(支持批量)
# 删除单封 python scripts/mail_client.py ... delete --uid 123 # 批量删除 python scripts/mail_client.py ... delete --uid "123,456,789"
标记邮件状态(支持批量)
# 标记为已读 python scripts/mail_client.py ... mark --uid 123 --flag read # 批量标记未读 python scripts/mail_client.py ... mark --uid "123,456" --flag unread # 添加星标 python scripts/mail_client.py ... mark --uid 123 --flag flagged
移动邮件到文件夹
python scripts/mail_client.py ... move --uid 123 --dest "已处理"
下载附件
# 下载指定附件 python scripts/mail_client.py ... download --uid 123 --filename "report.pdf" --dir "/path/to/save" # 下载全部附件 python scripts/mail_client.py ... download --uid 123 --dir "/path/to/save"
获取邮箱统计
python scripts/mail_client.py ... stats
JSON格式输出(便于程序处理)
python scripts/mail_client.py ... list --json python scripts/mail_client.py ... view --uid 123 --json
作为模块调用
import sys
sys.path.insert(0, "C:/Users/admin/.workbuddy/skills/email-master/scripts")
from mail_client import MailClient
with MailClient("imap.163.com", 993, "tnktechqa@163.com", "授权码") as client:
# 列出邮件
emails = client.list_emails(limit=10)
for e in emails:
print(e["subject"], e["from"], e["date"])
# 搜索
results = client.search_emails(subject="发票", unread_only=True)
# 查看详情
mail = client.get_email("123", mark_read=False)
print(mail["subject"], mail["message_id"])
# 批量删除
client.delete_email("123,456,789")
# 下载全部附件
saved = client.download_all_attachments("123", save_dir="./downloads")
邮箱配置自动识别
# 查询邮箱配置
python scripts/email_config.py user@163.com
python scripts/email_config.py someone@gmail.com --json
# 作为模块调用
from email_config import get_email_config
config = get_email_config("user@163.com")
print(config["smtp_host"], config["smtp_port"])
print(config["imap_host"], config["imap_port"])
print(config["auth_guide"])
支持的邮箱域名:163.com、126.com、yeah.net、qq.com、sina.com、sohu.com、aliyun.com、139.com、189.cn、21cn.com、gmail.com、outlook.com、hotmail.com、live.com、yahoo.com、icloud.com、me.com、zoho.com、fastmail.com、protonmail.com 等 30+ 域名。
常见问题处理
| 错误 | 原因 | 解决方案 |
|---|---|---|
| Authentication failed | 使用了账户密码而非授权码 | 在邮箱设置中生成授权码/应用密码 |
| Connection refused | 端口错误或服务未开启 | 检查端口,163/QQ需在网页端开启SMTP/IMAP |
| SSL error | 端口与加密方式不匹配 | 465用SSL,587用STARTTLS |
| 163 Unsafe Login | 网易邮箱安全保护 | 登录163网页版 → 设置 → POP3/SMTP/IMAP → 确认授权/开启IMAP;本脚本已内置ID命令绕过机制 |
| 163发送失败 | 未开启SMTP服务 | 登录163网页 → 设置 → POP3/SMTP/IMAP → 开启 |
| Gmail认证失败 | 未使用应用密码 | Google账号 → 安全 → 两步验证 → 应用密码 |
| SMTPServerDisconnected | 网络不稳定 | 已内置重试机制(默认2次),可 --retries 3 增加重试 |
| IMAP select失败 | 文件夹名错误 | 先用 folders 命令查看可用文件夹名 |
163邮箱「Unsafe Login」详细解决步骤
- 登录 https://mail.163.com
- 点击右上角「设置」→「POP3/SMTP/IMAP」
- 确认 IMAP 服务已开启(如果未开启,点击开启并获取授权码)
- 如果有「安全登录」提示弹窗,点击确认授权
- 本脚本已内置
ID命令自动发送客户端标识,可绕过大部分 Unsafe Login 检测 - 如仍然失败,可能需要在网页版中先手动收取/发送一封邮件激活账户
参考资料
- 完整服务器配置表:
references/email_providers.md - 邮箱自动识别:
scripts/email_config.py <邮箱地址> - 发送脚本详细参数:
scripts/send_email.py --help - 接收脚本详细参数:
scripts/mail_client.py --help
热门AI工具
相关专题
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。
0
2026.10.22
PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.5万人学习
共6课时 | 54.7万人学习
最新文章
