MoeMail
返回部落格

在 Node.js 裡用程式接收 email

在 Node.js 裡接收 email,通常意味著要跑一台 SMTP/IMAP 伺服器,或接上 Gmail 的 API。但對測試、自動化與大多數應用程式流程來說,有條更簡單的路:一個你透過 HTTP 對話的拋棄式收件匣 API。本文是開發者 email 測試的一部分。

兩種接收方式

要嘛輪詢收件匣抓新訊息,要嘛註冊一個 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)

handler 要快、要冪等。同一組基本操作也撐起了 Playwright 測試與 Python 版本,在 CI 裡也原封不動就能跑。

開始動手

到個人頁面拿一把金鑰、讀讀 OpenAPI 文件,再建立一個郵箱試試看。