Node.js 实现邮件发送功能的详细步骤(例如:QQ邮箱、新浪邮箱)

nodemailer 介绍

nodemailer 是 Node.js 中比较常用的用于发送邮件的一种中间件。
可以查看 nodemailer 在 npm 官网上的详细介绍: nodemailer 文档

注:邮箱验证就是通过POP3/SMTP等服务从一个邮箱发送内容给另一个邮箱去。

额外知识点

  • SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。

  • SMTP 服务器地址:实际上就是代收发服务器地址,是由邮箱服务商提供的。例如:QQ邮箱。

  • SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。

前提

而要想让邮件服务器帮助我们发邮件,首先得让我们自己的邮箱账号同意开启POP3/SMTP服务。【此次举例 QQ邮箱的操作步骤,其他邮箱也大致一样。】

步骤如下:

1、发件人邮箱账户必须关闭QQ安全中心的邮箱保护。

2、在QQ邮箱点击 设置 > 账户 > 开启 下列服务:如下图:
在这里插入图片描述

3、生成授权码,用于通过SSL协议与POP3/SMTP等服务发送邮件的发件人进行登录验证。【注意:这里生成的授权码用于后面进行验证。】

这样,发件人邮箱就可以通过SSL协议,使用SMTP服务进行邮件发送了。

安装依赖

安装 nodemailer 及相应组件依赖

npm install nodemailer -s-d
npm install nodemailer-smtp-transport -s-d

开始使用

createTransport({…})

一、创建 SMTP 服务连接池,就跟数据库连接池一样可以进行回收的协议连接。主要是通过一些选项来配置好要应用的邮箱平台的主机认证,以 QQ 邮箱为例:

var nodemailer = require('nodemailer ');

//开启一个 SMTP 连接池
var transport = nodemailer.createTransport({
    host : 'smtp.qq.com', //QQ邮箱的 smtp 服务器地址
    secure : true, //使用 SSL 协议
    secureConnection : false, //是否使用对 https 协议的安全连接
    port : 465, //QQ邮件服务所占用的端口
    auth : {
        user : 'xxxxx@qq.com', //开启 smtp 服务的发件人邮箱,用于发送邮件给其他人
        pass : 'xxxx' //SMTP 服务授权码
    }
})
参数配置

创建好连接池之后,就需要为发送邮件功能进行配置一些参数信息。如下:

var mailOption = {
    from : 'xxxx@qq.com', //发件人
    to : 'xxx@qq.com', //收件人
    subject : 'xxx注册验证', //标题
    html : '<b>欢迎注册 xxx 系统</b>' //正文,可使用 HTML 格式进行渲染
}
sendMail(mailOption,call)

开始发送邮件,通过传入 mailOption 参数配置进行邮件发送,同时根据邮件发送情况执行回调函数 call。如下:

await transport.sendMail(mailOption,function (err,res)=>{
   if(err){//执行错误
   	  console.log(err) 
   } else {
       console.log(res) //执行成功, 会返回响应体内容。
   }     
	transport.close(); // 如果没用,则关闭连接池
})
常见错误记录
501
Error: Mail command failed: 501 mail from address must be same as authorization user

错误原因:授权码认证账号与发件人账号不一致。

535
Error: Invalid login: 535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼¡£ÏêÇéÇë¿´: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

错误原因:发件人邮箱没有开启POP3/SMTP服务或没有输入正确的授权码。

解决方法:

1、进入发件人邮箱账户 设置 > 账户 > 开启 SMTP/POP3服务

2、生产授权码,将生成的授权码输入到 pass 关键字中。

最终效果如图:

在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用 Node.js 实现点击按钮发送信息到 qq 邮箱,你需要使用 Node.js 的第三方邮件发送库。这里以 nodemailer 为例进行说明。 首先,你需要在你的项目中安装 nodemailer: ``` npm install nodemailer ``` 然后,在你的 Express 应用中添加路由处理 `/sendemail`,处理前端发送过来的邮件发送请求。示例代码如下: ```javascript const express = require('express'); const bodyParser = require('body-parser'); const nodemailer = require('nodemailer'); const app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.post('/sendemail', (req, res) => { let transporter = nodemailer.createTransport({ service: 'qq', secure: true, auth: { user: '你的 QQ 邮箱地址', pass: '你的 QQ 邮箱密码' } }); let mailOptions = { from: '你的 QQ 邮箱地址', to: req.body.to, subject: req.body.subject, text: req.body.message }; transporter.sendMail(mailOptions, (error, info) => { if (error) { console.log(error); res.send('邮件发送失败'); } else { console.log('邮件发送成功:' + info.response); res.send('邮件发送成功'); } }); }); app.listen(3000, () => { console.log('服务器已启动'); }); ``` 这段代码使用 nodemailer 创建一个邮件传输对象 `transporter`,并设置服务提供商为 `qq`,使用 QQ 邮箱SMTP 服务器发送邮件。在创建 `mailOptions` 对象时,我们使用了表单数据中的收件人地址、主题和正文。最后,我们使用 `transporter.sendMail()` 方法发送邮件,并在邮件发送完成后向前端发送响应。 在前端页面中,你可以使用 jQuery 或其他类库监听按钮的点击事件,并使用 AJAX 技术将表单数据发送到 `/sendemail` 路由。示例代码如下: ```html <!DOCTYPE html> <html> <head> <title>发送邮件</title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> </head> <body> <form> <label for="to">收件人:</label> <input type="email" id="to" name="to" required><br> <label for="subject">主题:</label> <input type="text" id="subject" name="subject" required><br> <label for="message">内容:</label> <textarea id="message" name="message" required></textarea><br> <button type="button" id="send">发送</button> </form> <script> $(function() { $('#send').click(function() { var to = $('#to').val(); var subject = $('#subject').val(); var message = $('#message').val(); $.post('/sendemail', {to: to, subject: subject, message: message}, function(response) { alert(response); }); }); }); </script> </body> </html> ``` 这里使用了 jQuery 的 `$.post()` 方法将表单数据发送到 `/sendemail` 路径,然后在后端服务器上监听该路径。当邮件发送完成后,我们在前端弹出一个提示框,显示邮件发送结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值