Node.js でプログラムからメールを受信する
Node.js でメールを受信するとなると、通常は SMTP/IMAP サーバーを立てるか、Gmail の API をつなぎ込むことになります。しかしテストや自動化、ほとんどのアプリのフローには、もっと簡単な道があります。HTTP 越しにやり取りする使い捨ての受信トレイ API です。本記事は開発者のためのメールテストの一部です。
受信の 2 つの方法
受信トレイを新着メッセージについてポーリングするか、webhook を登録してサービスから各メッセージを push してもらうか、です。まず始めるならポーリングが最も簡単で、遅延とスケールの面では 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 ドキュメントを読み、メールボックスを作成して試してみてください。