美文网首页
前端使用node.js通过nodemailer发送邮件

前端使用node.js通过nodemailer发送邮件

作者: 蓦然回味 | 来源:发表于2024-04-01 11:05 被阅读0次

在node中收发电子邮件是非常方便的,然后再封装几个简单的接口,前端就可以很容易调用和实现功能。下面写了个简单例子,也是第一次写这样的功能,做个记录。给有需要的朋友们做个参考。

Nodemailer简介


nodemailer是一个简单易用的Node.js邮件发送组件
官网地址:https://nodemailer.com

GitHub地址:https://github.com/nodemailer/nodemailer

Nodemailer的主要特点包括:

  • 支持Unicode编码
  • 支持Window系统环境
  • 支持HTML内容和普通文本内容
  • 支持附件(传送大附件)
  • 支持HTML内容中嵌入图片
  • 支持SSL/STARTTLS安全的邮件发送
  • 支持内置的transport方法和其他插件实现的transport方法
  • 支持自定义插件处理消息
  • 支持XOAUTH2登录验证

安装使用


在安装了node.js之后下载安装 nodemailer

npm install nodemailer --save

发送邮件部分


下面是一个简单的示例,展示如何使用 Nodemailer 来通过 QQ 邮箱发送电子邮件。请确保你已经开通了 QQ 邮箱的 SMTP 服务,并获取了授权码。
开通个人QQ邮箱授权码可参考 service: 'QQ'
开通腾讯企业邮箱授权码可参考 service: '"QQex"'

'use strict';  
  
// 引入nodemailer模块  
const nodemailer = require('nodemailer');  
  
// 创建邮件传输器  
// 这里我们使用的是QQ邮箱的SMTP服务器  
// 注意:确保你的QQ邮箱已经开启了SMTP服务,并且获取了授权码  
const transporter = nodemailer.createTransport({  
  service: 'QQ', // 使用QQ邮箱的SMTP服务  
  port: 465, // SMTP端口号,通常SMTP over SSL的端口是465  
  secure: true, // 使用SSL连接  
  auth: {  
    user: '你的QQ邮箱地址', // 填写你的QQ邮箱地址  
    pass: '你的授权码', // 填写你在QQ邮箱中获取的授权码,不是登录密码  
  },  
});  
  
// 定义邮件的选项  
const mailOptions = {  
  from: `"发件人名称" <你的QQ邮箱地址>`, // 发件人的邮箱地址和名称  
  to: '收件人邮箱地址', // 收件人的邮箱地址  
  subject: '邮件主题', // 邮件的标题  
  text: '纯文本内容', // 邮件的纯文本内容(如果同时定义了html,则html会被优先使用)  
  html: '<h1>HTML内容</h1>', // 邮件的HTML内容  
  // 如果需要添加附件,可以定义attachments数组  
  attachments: [  
    {  
      filename: '附件1.jpg', // 附件的文件名  
      path: '附件1的本地路径或URL', // 附件的本地文件路径或网络URL  
      cid: 'myImage1', // CID,用于在HTML内容中引用该图片  
    },  
    {  
      filename: '附件2.docx',  
      path: '附件2的本地路径或URL',  
      cid: 'myDocument',  
    },  
    // 可以继续添加更多附件...  
  ],  
};  
  
// 发送邮件  
transporter.sendMail(mailOptions, (error, info) => {  
  if (error) {  
    // 如果发送邮件过程中出错,则打印错误信息  
    console.error('发送邮件时出错:', error);  
    return;  
  }  
  // 如果邮件发送成功,则打印相关信息  
  console.log('邮件发送成功:', info);  
  // info对象包含了邮件发送的详细信息,如messageId等  
});  
  
// 备注:  
// 1. 确保已经通过npm安装了nodemailer模块  
// 2. 替换上述代码中的'你的QQ邮箱地址'、'你的授权码'、'收件人邮箱地址'等为实际的值  
// 3. 邮件的HTML内容中,如果引用了附件中的图片,可以通过<img src="cid:图片CID" />的方式引用  
// 4. attachments数组中可以添加多个附件对象,每个对象定义了附件的文件名、路径和CID等信息  
// 5. 发送邮件时,如果发生错误,会在回调函数的error参数中返回错误信息  
// 6. 如果邮件发送成功,回调函数的info参数会包含邮件的详细信息,如messageId等

在实际的生产环境中,建议使用环境变量来存储敏感信息(如邮箱地址和授权码),而不是硬编码在代码中,以确保安全性。

封装接口部分
如果你想要为前端提供一个简单的API接口来发送邮件,你可以创建一个Express应用来实现这个功能。以下是一个简单的示例:

const express = require('express');  
const bodyParser = require('body-parser');  
const nodemailer = require('nodemailer');  
  
const app = express();  
app.use(bodyParser.json()); // 解析JSON请求体  
app.use(bodyParser.urlencoded({ extended: true })); // 解析URL编码的请求体  
  
// 创建邮件传输器(同上面的代码)  
const transporter = nodemailer.createTransport({  
  // ... 配置项  
});  
  
// 定义发送邮件的路由  
app.post('/send-email', (req, res) => {  
  const { from, to, subject, text, html, attachments } = req.body;  
  
  const mailOptions = {  
    from,  
    to,  
    subject,  
    text,  
    html,  
    attachments,  
  };  
  
  transporter.sendMail(mailOptions, (error, info) => {  
    if (error) {  
      res.status(500).json({ error: '邮件发送失败' });  
      return;  
    }  
    res.json({ message: '邮件发送成功' });  
  });  
});  
  
// 启动服务器  
const PORT = process.env.PORT || 3000;  
app.listen(PORT, () => {  
  console.log(`Server is running on port ${PORT}`);  
});

在这个示例中,我们创建了一个Express应用,并定义了一个POST路由 /send-email。前端可以通过发送一个包含邮件信息的POST请求到这个路由来触发邮件发送。请确保你已经安装了 express 和 body-parser 这两个依赖。

现在,你可以运行这个Express应用,并在前端通过AJAX或Fetch API来调用 /send-email 路由发送邮件了。记得处理可能出现的错误和异常情况,并为用户提供友好的反馈。

相关文章

网友评论

      本文标题:前端使用node.js通过nodemailer发送邮件

      本文链接:https://www.haomeiwen.com/subject/zgwjjltx.html