从 Markdown 到 WordPress:我的邮件发布流水线
最近搭了一条把本地 Markdown 文章自动发布到 WordPress 的小流水线,踩了一些坑,记下来分享一下。
背景
平时习惯用 Markdown 写笔记和博客,本地写完之后想发到 WordPress 站点上。传统路径一般是:
- 登录 WordPress 后台
- 新建文章
- 把 Markdown 内容复制进去
- 调整格式
- 发布
偶尔发一篇还行,但发多了就觉得麻烦——尤其是每次都要打开浏览器、登录、粘贴、调格式,步骤重复又琐碎。
思路
我想的是:能不能在本地写完 Markdown,一条命令就发出去?
刚好我用的 AI 编程工具(Reasonix)支持自定义 Skill,可以把多个步骤串起来自动执行。邮件发送也有现成的 Python 脚本。WordPress 这边,有 Postie 这个老牌插件,能把发到指定邮箱的邮件自动提取为文章。
于是流程就串联起来了:
本地 Markdown 文件
↓
Reasonix 执行 Skill
↓
Python 脚本通过 SMTP 发送邮件
↓
Postie 从邮箱提取邮件内容
↓
WordPress 发布为文章
各环节实现
1. 邮件发送脚本
核心是一个 Python CLI 工具,支持从文件读取正文、多附件、CC/BCC、SSL/TLS 切换:
python send_email.py \
--to "article@mydomain.com" \
--subject "文章标题" \
--body-file article.md \
--ssl
密码从 .env 文件读取,不硬编码在代码或命令历史中。
2. Reasonix Skill
把上述步骤封装成一个 Skill,调用时只需要说:
_"把
MARKDOWN_HASH133460bbbebb87d3ab3c4931d4d56a6aMARKDOWNHASH发到 WordPress"
Skill 自动完成:读取文件 → 从文件名提取邮件主题 → 读取目标邮箱(从 .env 获取) → 调用 Python 脚本原文发送 → 告知发送完成。
所有的敏感信息(SMTP 密码、目标邮箱地址)都放在 .env 里,不会被提交到代码仓库。
3. Postie 插件配置
WordPress 这边,安装 Postie 插件后需要做几件事:
- 配置一个专用的邮箱(我用的是 163 邮箱)
- 在 Postie 设置里填入邮箱的 IMAP/SMTP 信息
- 指定默认作者和分类
- 邮件主题作为文章标题,邮件正文作为文章内容
Postie 定期检查邮箱,有新邮件就自动提取并发布。
踩过的坑
1. 端口与加密方式
不同邮箱服务商支持的 SMTP 端口不一样:
| 端口 | 加密方式 | 说明 |
|---|---|---|
| 465 | SSL 直连 | 163 邮箱实测最稳 |
| 587 | STARTTLS | 通用标准 |
| 25 | 无加密 | 容易被运营商拦截 |
建议优先用 465 SSL 直连。
2. 代码块格式
Postie 提取邮件内容后,代码块如果带语言标签( python 、 bash ),在某些情况下会导致内容粘连。去掉语言标签只用 ` 效果更好。
3. 段落间距
Markdown 中的标题、代码块、引用块之间要有清晰的空行分隔,Postie 提取后的纯文本段落结构才正确。
后续可以改进的方向
-
用 HTML 格式发送:Postie 支持 HTML 邮件,如果能先把 Markdown 转换成 HTML 再发送,排版可以更精细。
-
REST API 直接发布:绕过邮件,直接用 WordPress REST API 创建文章,可以实时发布。
-
Gutenberg Blocks:如果站点使用古腾堡编辑器,可以把 Markdown 转换成 Gutenberg 的 HTML 注释格式,实现更丰富的排版。
小结
这条流水线目前跑得挺顺:
- ✅ 本地写 Markdown,保持习惯
- ✅ 一条命令发送,不用开浏览器
- ✅ 敏感配置隔离在 .env
- ✅ 邮件到达即发布,无需额外操作
对于只是偶尔发篇文章的个人博客来说,够用了。
2026.06 记