Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9356

express.jsでメールを送るAPIを作りテストサーバーを立ち上げる

$
0
0
express.jsでメールを送るAPIを作りテストサーバーを立ち上げる 概要 express.js smtp test server(schickling/mailcatcher) やり方 事前準備 nodeやnpm、npx、docker、docker-compose をインストールする。 まずはAPIを作りましょう。 npx create-express-api api cp api npm install nodemailer app.jsにbodyparserを追加する。 api/src/app.js const express = require("express"); const morgan = require("morgan"); const helmet = require("helmet"); const cors = require("cors"); var bodyParser = require("body-parser"); require("dotenv").config(); const middlewares = require("./middlewares"); const api = require("./api"); const app = express(); // parse application/x-www-form-urlencoded application/json app.use(bodyParser.urlencoded()); app.use(bodyParser.json()); app.use(morgan("dev")); app.use(helmet()); app.use(cors()); app.use(express.json()); app.use("/api/v1", api); app.use("/", api); app.use(middlewares.notFound); app.use(middlewares.errorHandler); module.exports = app; メールを送るルーターを追加する api/src/api/sendmail.js const express = require("express"); const router = express.Router(); const nodemailer = require("nodemailer"); const host = process.env.SMTP_HOST || "localhost"; const port = parseInt(process.env.SMTP_PORT) || 25; const from = process.env.MAIL_ADDRESS || "test@test.com"; const smtp = nodemailer.createTransport({ host, port, }); router.post("/", async (req, res) => { try { console.log(req.body); const { to, message, subject } = req.body; if (!to) throw new Error("to is required"); if (!message) throw new Error("message is required"); if (!subject) throw new Error("subject is required"); const option = { from, to, subject, text: message }; const result = await smtp.sendMail(option); res.json({ message: "message has been sent", }); } catch (e) { console.error(e); res.status(400).json({ error: true, message: e.message }); } }); module.exports = router; メールを送るルーターをindexに追加する api/src/api/index.js const express = require("express"); const emojis = require("./emojis"); const sendmail = require("./sendmail"); const router = express.Router(); router.get("/", (req, res) => { res.send("<a href='https://www.postman.com/'>use postman</a>"); }); router.use("/emojis", emojis); router.use("/sendmail", sendmail); module.exports = router; dockerfileを準備 api/Dockerfile FROM node:16.13.0 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install --only=production COPY . . EXPOSE 5000 CMD [ "npm", "start" ] docker-composeを用意する docker-compose.yml version: "3" services: smtp: image: schickling/mailcatcher ports: - "1080:1080" - "25:1025" api: build: context: ./api environment: - SMTP_HOST=smtp - SMTP_PORT=1025 ports: - "3000:5000" 起動 bash docker-compose up 使ってみる このAPIにリクエストを送ると、メールが送られます http://localhost:1080 にアクセスすればメールが擬似的に送られたことを確認できると思います。 curl --location --request POST 'http://localhost:3000/sendmail' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'to=test@test.com' \ --data-urlencode 'subject=件名' \ --data-urlencode 'message=これはテストです。' 参考文献 Node.js Web アプリケーションを Docker 化する create express api compose-postfix

Viewing all articles
Browse latest Browse all 9356

Trending Articles