从Markdown到WordPress的邮件发布流水线

从 Markdown 到 WordPress:我的邮件发布流水线

最近搭了一条把本地 Markdown 文章自动发布到 WordPress 的小流水线,踩了一些坑,记下来分享一下。

背景

平时习惯用 Markdown 写笔记和博客,本地写完之后想发到 WordPress 站点上。传统路径一般是:

  1. 登录 WordPress 后台
  2. 新建文章
  3. 把 Markdown 内容复制进去
  4. 调整格式
  5. 发布

偶尔发一篇还行,但发多了就觉得麻烦——尤其是每次都要打开浏览器、登录、粘贴、调格式,步骤重复又琐碎。

思路

我想的是:能不能在本地写完 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 提取后的纯文本段落结构才正确。

后续可以改进的方向

  1. 用 HTML 格式发送:Postie 支持 HTML 邮件,如果能先把 Markdown 转换成 HTML 再发送,排版可以更精细。

  2. REST API 直接发布:绕过邮件,直接用 WordPress REST API 创建文章,可以实时发布。

  3. Gutenberg Blocks:如果站点使用古腾堡编辑器,可以把 Markdown 转换成 Gutenberg 的 HTML 注释格式,实现更丰富的排版。

小结

这条流水线目前跑得挺顺:

  • ✅ 本地写 Markdown,保持习惯
  • ✅ 一条命令发送,不用开浏览器
  • ✅ 敏感配置隔离在 .env
  • ✅ 邮件到达即发布,无需额外操作

对于只是偶尔发篇文章的个人博客来说,够用了。


2026.06 记

上一篇 Git 常用命令