使用 Express.js 发送电子邮件的完整指南

电子邮件是 Web 应用程序中重要的一部分,实现发送电子邮件可以帮助我们在不同角色之间进行数据或者消息传递。在这篇文章中,我们将会讲解如何在 Express.js 应用程序中实现发送电子邮件,这里将提供一份完整的指南,包括安装和配置 SMTP 服务,生成和发送电子邮件以及其他一些实现方式和技巧。

为应用程序配置 SMTP 服务

要发送电子邮件,首要步骤是配置一个 SMTP 服务来实现邮件的发送。在此过程中,许多服务供应商可提供 SMTP 服务,例如 Gmail、Mailgun 或 SendGrid 等,但此处我们将以 Gmail 作示例讲解。

成为 Gmail 账户管理员

使用 Gmail SMTP 服务。您必须成为组织中某个人的管理员,更好的是自己成为管理员。这将允许您访问 Google 云平台并创建一个新的 OAuth 项目以进行 SMTP 配置。

创建新的 Google OAuth 项目

在 Google 开发者控制台(https://console.developers.google.com/)中,使用您的管理员账户创建一个新的 OAuth 项目。在“授权篇目”中,为该项目添加以下 OAuth 客户端 ID:

  • 一个“Web 应用程序”客户端 ID,用于应用程序的 Web 组件。
  • 一个“其他类型”客户端 ID,用于从服务器应用程序中使用的 OAuth 身份验证令牌。

配置 OAuth 客户端 ID

创建了 OAuth 客户端 ID 后,我们需要对其进行配置,设置允许访问 Gmail API。通过以下步骤完成 OAuth 客户端 ID 的配置:

  • 在您的 OAuth 管理面板中选择“Web 应用程序”客户端 ID。

  • 添加应用程序主页和回调 URL。

    这两个 URL 是使用 OAuth 身份验证时,从 Google 登录授权流中使用的 URL。它们应该是指向您的应用程序部署的服务器的 URL。

  • 选择“其他类型”客户端 ID。

  • 选择“访问控制”标签,然后选择“项目用户”。

  • 添加一个新用户,并将默认角色分配为“编辑”。

接着,在您的 Gmail 账户中配置 SMTP 服务。

  1. 登录您的 Gmail 账户。
  2. 导航到设置页面并切换到“转发和 POP/IMAP”选项卡。
  3. 选择“启用 IMAP”。
  4. 使用 SMTP 服务器名称“smtp.gmail.com”,端口为“465”。
  5. 使用您的邮件地址和密码来验证 SMTP 连接。

安装和配置 nodemailer

当我们已经完成 SMTP 服务的配置后,我们需要使用一个 JavaScript 库来生成和发送电子邮件。nodemailer 是一个流行的库,它可以与各种不同类型的 SMTP 服务一起使用,并为我们提供很多选项来自定义电子邮件。

安装 nodemailer:

--- ------- ---------- ------

在我们生成和发送电子邮件之前,我们需要在应用程序代码中配置 SMTP 凭据,这里将邮件地址与 SMTP 服务密码存储在一个配置文件中:

-------------- - -
  ------ -----------------------
  --------- --------------------------
  ----- ----------------------
  ----- ----------------------
--

其中:

  • SMTP_EMAIL:指您的 Gmail 账户电子邮件地址。
  • SMTP_PASSWORD:您的 Gmail 账户密码或是应用程序专用密码。
  • SMTP_HOST:SMTP 服务主机名称(例如:“smtp.gmail.com”)。
  • SMTP_PORT:SMTP 服务端口号(例如:465)。

生成并发送电子邮件

要生成和发送电子邮件,我们需要使用 nodemailer 库。以下是使用 nodemailer 库发送电子邮件的一些代码示例:

----- ---------- - ----------------------

----- ----------- - ----------------------------
  ----- ------------
  ----- ------------
  ----- -
    ----- -------------
    ----- ----------------
  --
---

----- -------- - ----- ------------- -- -
  ----- -------- - ----- ----------------------------------
  -------------------- ------- --------------------
--

----- ------------ - ---------- -------- ----- -- -
  ------ -
    ----- --- - ------------ - ----
    --- ---------
    -------- --------
    ----- -----
  --
--

----- ----------- - -- -- -
  ----- ---- - --------------------------------- ------- ------------
  ---------------
--

--------------

在这里,我们首先使用 nodemailer.createTransport 创建了一个 SMTP Transporter。这个 transporter 将 smtp_credentials 对象作为属性进行属性设置,并使用 await transporter.sendMail 方法在内部发送电子邮件。

接下来,我们使用 generateMail 函数生成一个邮件对象,该对象包含发送者、接受者、电子邮件主题以及电子邮件 HTML 正文内容等信息。

最后,我们使用 sendMail 函数来实际发送电子邮件。

总结

本篇文章为大家介绍了如何在 Express 应用程序中发送电子邮件。我希望这篇文章能够帮助您更好的实现和使用电子邮件功能,并通过nodemailer库和配置 SMTP 服务来解决常见问题。如果您有任何问题或反馈,请随时留言,让我们一起讨论。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/652f54497d4982a6eb0704ff


猜你喜欢

  • 解决 Tailwind CSS 导致页面渲染延迟的问题

    在现代 Web 开发中,前端框架被广泛使用,以加快开发速度并使代码更易维护。而 Tailwind CSS 是一个快速开发 CSS 的库,它提供了许多现成的样式类,可以帮助我们避免重复编写样式代码。

    1 年前
  • 不再纠结数据类型:ECMAScript 2019 的 Symbol 数据类型详解!

    前言: JavaScript 中的数据类型一直是前端开发者的热门话题。因此,我们在日常开发中常常用到的数据类型,比如 String, Number, Boolean, Object 等等,都是我们耳熟...

    1 年前
  • 利用 Hapi 框架实现 RESTful API 时遇到的问题及解决方案

    前言 随着前后端分离方式的流行,也催生了越来越多前端开发者开始接触 Node.js 并借助 Node.js 来实现服务器端的开发。而 Node.js 提供了丰富的框架和库,其中 Hapi 就是一个比较...

    1 年前
  • 网格布局中如何控制元素的排列顺序?

    在前端开发中,我们经常使用网格布局来构建网页的 UI 界面。网格布局可以灵活地控制元素的位置和大小。但是,当网格布局的多个子元素需要按照不同的顺序排列时,我们该如何实现呢?本文将介绍网格布局中如何控制...

    1 年前
  • 如何在 Mocha 测试套件中使用 test fixtures?

    测试套件是前端开发中重要的一环,Mocha 是一个流行的测试框架,可以帮助我们编写单元测试和集成测试,以确保代码的正确性和可靠性。在测试过程中,我们需要使用 test fixtures 来提供测试数据...

    1 年前
  • ESLint 如何解决禁止使用 eval 报错

    前言 在编程中,为了提供更好的可重用性和安全性,我们通常会在代码中禁止使用 eval 函数。在实际应用中,禁止使用 eval 函数有助于避免一些不必要的代码安全问题。

    1 年前
  • 使用 Mongoose 实现 MongoDB 数据中的防注入操作

    前言:在现代应用程序中,数据库操作是一个重要的部分,而防止 SQL 注入是数据库安全的关键。同样在 NoSQL 数据库中也存在注入攻击风险。在本篇文章中,我们将介绍如何使用 Mongoose,一个 N...

    1 年前
  • Redis 中使用 Lua 脚本时可能遇到的问题及解决方法

    前言 Redis 作为一款开源的 in-memory 数据库,具有高性能、可扩展等优点,在前端开发中被广泛应用。而 Lua 脚本则是 Redis 内置的一种脚本语言,可用于编写自定义命令、复杂的数据处...

    1 年前
  • SASS 编译出错:“Error: Undefined mixin” 的解决方法

    在使用SASS编写样式时,我们会经常使用mixin(混合)功能。但是有时在编译过程中可能会遇到错误:“Error: Undefined mixin”,这意味着SASS无法找到您引用的mixin。

    1 年前
  • Vue.js 在 Web 工程中的应用实践

    Vue.js 是一个用于构建用户界面的渐进式框架,它的主要特点是轻量、灵活、易用。Vue.js 也是目前最流行的前端框架之一,拥有庞大的社区和优秀的生态圈,在 Web 工程中的应用实践也越来越广泛。

    1 年前
  • 使用 Koa 和 PM2 实现进程守护的最佳实践

    在前端开发中,我们经常需要编写后端代码,而编写后端代码的一个重要问题就是如何保证代码的稳定性和可靠性。其中一个重要的方面就是进程守护。 进程守护是指在后端服务器运行的代码出现问题时,自动重启代码进程,...

    1 年前
  • GraphQL 中的异常处理机制详解

    GraphQL是一种先进的API查询语言,旨在解决REST API设计的某些局限性。在GraphQL的世界里,所有请求和响应都由类型系统定义,大大降低了前后端沟通成本。

    1 年前
  • Server-sent Events 下的在线教育 Web 应用开发探索

    随着互联网的不断发展,网络教育逐渐成为人们学习新知识和技能的首选。而在线教育平台的一个重要特点就是实时的互动性,既然要实现实时互动,就必须要用到一些新的技术。 本文将介绍如何基于 Server-sen...

    1 年前
  • 在 JavaScript 中使用 ECMAScript 2017 的 Object.entries() 方法对对象进行遍历的实践

    前言 ECMAScript 2017引入了许多新的功能和方法,Object.entries()就是其中之一。在这篇文章中,我们将学习如何使用它来遍历和操作对象,以及它的一些实际用例和最佳实践。

    1 年前
  • 在 Chai 的 expect 断言中如何验证对象是否是字符串

    在 Chai 的 expect 断言中如何验证对象是否是字符串 在前端开发过程中,经常需要对数据类型进行判断和处理,其中字符串是其中的一种常见数据类型。在 Chai 的 expect 断言中,我们可以...

    1 年前
  • Node.js 中常见的回调地狱问题及解决方法

    回调地狱指的是嵌套式的回调函数,这种写法看起来不仅累赘,而且难以维护。虽然在现代 JavaScript 中有了更好的解决方法,例如 Promise 和 async/await,但是依然有一些遗留的代码...

    1 年前
  • Serverless 平台中的应用全局配置管理

    随着云计算和 Serverless 技术的发展,现代应用的开发方式趋向于更加轻量化和可扩展。而 Serverless平台正是一个能够实现轻量化和可扩展的自动化管理平台。

    1 年前
  • 如何在 Material Design 中实现仿 QQ 空间的下拉刷新效果

    前言 Material Design 是谷歌推出的一种现代化的设计语言,广泛应用于 Android 和 Web 开发中。QQ 空间是一款基于 Material Design 的社交软件,其下拉刷新效果...

    1 年前
  • Webpack+React 实战(三)配置 webpack.config.js

    在前面的两篇文章中,我们介绍了怎样安装和使用 Webpack 和 React,然后利用 Webpack 打包 React 项目。在本文中,我们将进一步深入讲解 webpack.config.js 的配...

    1 年前
  • Web Components 应用实践:优化 Ajax 数据可视化展示

    前言 在今天的互联网环境下,许多网站为了拥有更好的用户体验和更高的流量,都在尝试着将自己的页面变得更加生动和直观,其中数据可视化的需求尤为突出。 而 Ajax 技术作为一种异步数据传输技术,也在不少的...

    1 年前

相关推荐

    暂无文章