在 Node.js 里以编程方式接收邮件
在 Node.js 里接收邮件,通常意味着要跑一个 SMTP/IMAP 服务器,或者接上 Gmail 的 API。但对于测试、自动化和大多数应用流程来说,还有一条更简单的路:一个你通过 HTTP 与之对话的一次性收件箱 API。本文是开发者邮件测试的一部分。
两种接收方式
要么轮询收件箱查新邮件,要么注册一个 Webhook、让服务把每封邮件推给你。轮询上手最简单;论延迟和规模,Webhook 更优(参见接收来信的 Webhook)。
创建并轮询(fetch)
const API = 'https://moemail.app/api'
const H = { 'X-API-Key': process.env.MAIL_KEY }
async function createInbox() {
const res = await fetch(API + '/emails/generate', { method: 'POST', headers: H })
return res.json() // { id, address }
}
async function readLatest(id) {
const res = await fetch(API + '/emails/' + id + '/messages', { headers: H })
const data = await res.json()
return data.messages[0] // newest first
}
Node 18+ 内置了 fetch。带一个短延迟反复调用 readLatest,直到出现一封邮件,然后读它的 .text / .html。
或者接收 Webhook(Express)
import express from 'express'
const app = express()
app.use(express.json())
app.post('/inbound', (req, res) => {
const mail = req.body // verify the signature first in production
console.log('got mail for', mail.to, '-', mail.subject)
res.sendStatus(200) // respond fast; non-2xx triggers retries
})
app.listen(3000)
处理逻辑要保持轻快且幂等。同样这套基本操作,既驱动 Playwright 测试和 Python 版本,在 CI 里也原样跑得通。
动手开始
从个人资料里取一个密钥,读一读 OpenAPI 文档,再创建一个邮箱试一试。