使用node.js 发送邮箱

实现该功能无需任何费用哦!

一、目录结构:

 补充:

1、发送邮箱和接收邮箱可以是同一个邮箱;

2、授权码:是发送邮箱的授权码。

二、QQ邮箱

查看了QQ邮箱的帮助中心 得知
host 为 smtp.qq.com
port 为 465
user 是你要发送邮件的邮箱
pass 需要开启邮箱的SMTP
功能,开启方法在QQ邮箱帮助中心

三、常见的问题

 1.账号未设置该服务

1 { [AuthError: Invalid login - 454 Authentication failed, please open smtp flag first!]
2   name: 'AuthError',
3   data: '454 Authentication failed, please open smtp flag first!',
4   stage: 'auth' }

解决方案:QQ邮箱 -> 设置 -> 帐户 -> 开启服务:POP3/SMTP服务

 2.登录认证失败,可能由于smpt授权码/独立密码错误导致

1 Invalid login - 535 Authentication failed 

解决方案:

qq邮箱在测试smtp邮件服务器时,

1、在qq邮箱,设置,账户设置中.开启下smtp.

2、获取授权码.

3、在配置smtp服务器的密码时,注意一定要填你获得的授权码.不要用邮箱登录密码.否则会提示535 Authentication failed错误.

 3.权限认证失败,可能由于授权码错误导致,或者发件服务器不对应 我在qq设置的时候就遇到过

解决方案:登录Foxmail,查看发件服务器是什么?我QQ邮箱发件服务器是smtp.qq.com,企业邮箱是:smtp.exmail.qq.com

四、如何打开POP3/SMTP/IMAP功能?

五、完整项目代码如下

初始化项目

npm init -y

客户端:

index.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>请求接口后并推送消息给邮箱</title>
 6     <!-- CDN 引入vue 和 axios -->
   7     <script src="https://cdn.jsdelivr.net/npm/vue"></script>
   8     <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
 9     
10     
11 </head>
12 <body>
13     <div id="app">
14         
15         <button style="cursor: pointer;height:50px;border: 1px solid red;" @click="getSendEmail">点击发送邮箱</button>
16             
17     </div>
18     <script>
19         const app = Vue.createApp({
20             data(){
21                 return {}
22             },
23             methods: {
24                 //获取发送邮箱的接口
25                 fetchSendEmail(email) {
26                     return axios.post('/SendEmail', {
27                         email:email
28                     },{
29                         headers:{
30                             contentType: 'application/json',
31                         }
32                     })
33                 },
34                 //发送邮箱
35                 async getSendEmail(){
36                     try {
37                         const email = '**@qq.com'//接受邮箱的人
38                         let data  =  await this.fetchSendEmail(email)
39                         alert(data.data.message)
40                         
41                     } catch(err){
42                         console.log('err',err)
43                     }
44                 }
45             }
46 
47         }).mount('#app')
48       
49   </script>
50 </body>
51 </html>

 

服务端:

sendEmailApi.js

 1 var mailer = require('./services/sendEmail.js');
 2 const express = require('express');
 3 const app = express();// express.static 提供静态文件,就是html, css, js 文件
 4 app.use(express.static('public'));//指定加载public 下的 index.html
 5 
 6 const bodyParser = require('body-parser');//post请求
 7 
 8 
 9 // 指定本地服务ip地址,开启本地服务端口
10 app.listen(8888, '192.168.0.120',(err)=>{
11   if(!err) console.log('服务器启动成功了!,http://192.168.0.120:8888/')
12 })
13 
14 app.use(bodyParser.urlencoded({extended:false}));
15 app.use(bodyParser.json())
16 
17 app.use("/SendEmail",function (req, res) {
18   // 得到客户端发送的请求后,服务端需将返回信息给客户端
19   // console.log(req.query);//get请求
20   // console.log('post请求',req.body);//post请求
21   // setTimeout(() => {
22     // res.json({
23     //     success: true,
24     //     message:'您已成功发送邮箱!'
25     // })
26 
27   // }, 1000);
28     var email = req.body.email;
29     var subject = "会吃鱼的猫通知";//标题
30     var text = undefined;
31     var html = "<p>你好</p><p>欢迎访问会吃鱼的猫</p><p>点击下面链接进入访问吧:</p><p><a href='https://www.cnblogs.com/cat-eol/'>https://www.cnblogs.com/cat-eol/</a></p>";;
32 
33     mailer.emailTo(email, subject, text, html, function (data) {
34       console.log('data',data)
35       res.status(data.httpCode).json(data);
36     })
37 
38 
39     
40 })

 

sendMail.js

 1   var nodemailer = require('nodemailer');
 2   var smtpTransport = require('nodemailer-smtp-transport');
 3 
 4   const smtp = 'smtp.qq.com' //主机  查看发送邮件的邮箱开放的host
 5   const port = '465'//SMTP 端口 查看发送邮件的邮箱开放的port
 6   const mailFrom = '**@qq.com'//发送邮件的邮箱
 7   const mailPwd = '***';//授权码
 8   function emailTo(email,subject,text,html,callback) {
 9   // 开启一个 SMTP 连接池
10     var transporter = nodemailer.createTransport(smtpTransport({
11     host: smtp,// 主机  查看发送邮件的邮箱开放的host
12     secure: true, // 使用 SSL
13     secureConnection: true, // 使用 SSL
14     port:port, // SMTP 端口 查看发送邮件的邮箱开放的port
15     auth: {
16         user: mailFrom,//发送邮件的邮箱
17         pass: mailPwd //授权码,通过QQ获取    发送邮件的邮箱的密钥
18 
19     }
20     }));
21     var mailOptions = {
22         from: mailFrom, // 发送者发送邮件的邮箱,与上面 user 相同
23         to: email, // 接受者,可以同时发送多个,以逗号隔开  
24         subject: subject, // 标题  
25         html:html //邮件内容,可以为html
26     };
27     mailOptions.text = text;// 文本   
28     var result = {
29         httpCode: 200,
30         message: '您已成功发送邮箱!',
31         data: {},
32     }
33     try {
34         transporter.sendMail(mailOptions, function (err, info) {
35             if (err) {
36                 result.httpCode = 500;
37                 result.message = err;
38                 callback(result);
39                 return;
40             }
41             callback(result);
42         });
43     } catch (err) {
44         result.httpCode = 500;
45         result.message = err;
46         callback(result);
47     }
48     transporter.close(); // 如果没用,关闭连接池
49     
50  }
51 
52  module.exports = {
53     emailTo
54   };

六、安装依赖

npm i express@4.17.1
npm install nodemailer-smtp-transport --save
npm install nodemailer --save

 

七、成品:

 

 

学习来源:

1、https://www.cnblogs.com/jackson-yqj/p/10154296.html

2、https://segmentfault.com/a/1190000013069054

posted @ 2022-02-15 17:02  会吃鱼的猫123  阅读(400)  评论(0编辑  收藏  举报