Mailhog和Nodejs的例子
发布者::Yatin Batra inDevOps May 11th, 2022 0 Views
你好。在本教程中,我们将借助Mailhog在一个nodejs应用程序中实现一个假的SMTP服务器。我们将使用Docker来安装和运行Mailhog作为一个容器。
1.1.简介
Mailhog是一个电子邮件测试,它提供了一个假的SMTP服务器的帮助来测试电子邮件的设置。它允许向任何收件人发送电子邮件,并将其保存起来供以后查看。它提供 -
- API支持
- 认证
- 下载附件
- 电子邮件捕获和存储
- 失败测试
- 轻量级和便携式
- 实时更新
- 支持SMTP扩展
- Web ui
1.1 设置Node.js
要在Windows上设置Node.js,你需要从这个链接下载安装程序。点击你的平台的安装程序(也包括NPM包管理器),运行安装程序,开始Node.js设置向导。按照向导的步骤操作,完成后点击 "完成"。如果一切顺利,你可以导航到命令提示符来验证安装是否成功,如图1所示。
图1: 验证node和npm的安装
1.2 设置Docker
如果有人需要经历Docker的安装,请观看此视频。
2.Mailhog和Nodejs的例子
为了设置应用程序,我们需要导航到我们的项目所在的路径,我将使用Visual Studio Code作为我的首选IDE。让我们快速浏览一下项目结构。
图 2: 项目结构
2.1 在Docker上运行mailhog
docker-compose是一个在多个容器中运行docker应用程序的工具。为了设置mailhog,我将使用这个功能。在项目的根目录下创建一个名为docker-compose.yml 的文件,并将下面的代码粘贴到其中。你可以根据自己的需要自由改变配置。
docker-compose.yml
services:
mailhog:
container_name: docker_mailhog
image: mailhog/mailhog:latest
logging:
driver: none # disable saving logs
ports:
- "1025:1025" # smtp server
- "8025:8025" # web ui
version: "3"
使用docker-compose -f /docker-compose.yml up -d 命令从docker hub下载mailhog镜像(如果没有的话),并在本地启动它作为docker容器。记得将path_to_file ,并将YAML文件驻留在你的项目中的原始路径。一旦命令在终端窗口成功执行,mailhog就会暴露出以下端点------。
- 暴露在端口号上的SMTP接口
1025 - 暴露在端口号上的Web界面和api
8025 - 通过在搜索栏中输入
localhost:8025,在浏览器中打开gui
其他docker-compose命令(如停止或移除容器)可以从下载部分下载。
图: 3: Docker上的Mailhog容器
2.2 设置项目的依赖性
导航到项目目录,运行npm init -y ,创建一个package.json 文件。这个文件持有与项目有关的元数据,用于管理项目的依赖关系、脚本、版本等。用下面给出的代码替换生成的文件----。
package.json
{
"name": "mailhog",
"version": "1.0.0",
"description": "Safe email testing with mailhog",
"main": "index.js",
"scripts": {
"dev": "nodemon index.js",
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"safe email",
"mailhog",
"nodejs",
"express"
],
"author": "geek",
"license": "MIT",
"devDependencies": {
"nodemon": "^2.0.16"
},
"dependencies": {
"config": "^3.3.7",
"express": "^4.18.1",
"nodemailer": "^6.7.5"
}
}
一旦该文件被替换,在终端窗口触发下面的npm 命令,下载本教程所需的不同软件包。
下载依赖项
npm install
2.3 设置配置json
在config 文件夹中创建一个json文件,负责保存应用程序的配置相关细节。你可以根据你的要求自由地改变这些值。
config/default.json
{
"mailhog": {
"host": "localhost",
"smtp_port": 1025
},
"app_port": 3005
}
2.4 设置实施文件
在根目录下创建一个文件,负责处理应用程序的启动,设置nodemailer模块,定义应用程序的路由,并在端口号3005 ,启动应用程序。
- GET端点--
/health,负责给出应用程序的状态 - POST端点 -
/send负责按照给定的请求体发送电子邮件
index.js
const express = require("express");
const nodemailer = require("nodemailer");
const config = require("config");
const app = express();
app.use(express.json({ extended: false }));
// config info
const transporter = nodemailer.createTransport({
host: config.get("mailhog.host"),
port: config.get("mailhog.smtp_port")
});
// define routes
// @route GET /health
// @desc Get application health
app.get("/health", (req, res) => {
res.status(200).json({
status: "ok",
message: "application is healthy"
});
});
// @route POST /send
// @desc Send email
app.post("/send", (req, res) => {
// console.log(req.body);
const { to, sub, body } = req.body;
const obj = transporter.sendMail({
from: "My company <localhost@mailhog.local>",
to: to,
subject: sub,
text: body
});
if (!obj) {
res.status(500).json({
status: "internal server error",
message: "error sending message"
});
}
res.status(201).json({
status: "create",
message: "message sent"
});
});
// driver code
const port = config.get("app_port");
app.listen(port, () => {
console.log(`Service endpoint http://localhost:${port}`);
});
3.运行应用程序
要运行该应用程序,请导航到项目目录,并在终端输入以下命令,如下所示。
运行命令
$ npm run dev
如果一切顺利,应用程序将在服务端点成功启动 -http://localhost:3005 。
4.演示
打开postman或你选择的任何工具,用如下所示的请求体点击/send 端点。
请求
(http post) - Send email
http://localhost:3005/send
request body -
{
"to": "test@example.com",
"sub": "Test mail",
"body": "Hi. I am test email."
}
如果一切顺利,将返回一个状态代码为201的json响应。你可以打开mailhog的网页界面来验证所发送的邮件,并检查。发送的邮件将显示如下。
图: 4: 已发送的邮件
这就是本教程的全部内容,我希望这篇文章能为你提供你想要的东西。祝你学习愉快,不要忘记分享!
5.总结
在本教程中,我们看到了mailhog,并创建了一个简单的应用程序来了解它的实际实现。你可以从 "下载"部分下载源代码。
6.下载项目
这是一个在nodejs应用程序中实现一个假的SMTP服务器的教程。
下载
你可以在这里下载这个例子的完整源代码。 Mailhog和Nodejs实例
电子邮件 JavaScript nodejs SMTP 2022-05-11



