Mailhog和Nodejs的例子

364 阅读5分钟

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界面和api8025
  • 通过在搜索栏中输入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

+Yatin Batra