当前位置: 首页 > 后端技术 > Node.js

nodemailer的使用

时间:2023-04-03 15:50:32 Node.js

前段时间有一个很普通的项目需要发邮件的功能,而我刚开始学习nodejs,所以随便找了个好用的库,找到了nodemailer。本文主要记录使用过程和心得。这里的使用方法是先配置nodejs:v6.9.4npm:3.10.10nodemailer:^4.1.0constparams={host:'smtp.163.com',//setserviceport:465,//portsercure:true,//是否使用TLS,true,端口为465,否则为other或568.user,//发送电子邮件至:config.emailTo,//接受电子邮件主题:config.title,//标题html:config.html//内容}//发送电子邮件consttransporter=nodemailer.createTransport(params)transporter.sendMail(mailOptions,(error,info)=>{if(error){returnconsole.log(error);}console.log('Message%ssent:%s',info.messageId,info.response);//success//...})按照这个格式,发送成功是没有问题的。但是注意这里的密码,不是邮箱的登录密码。如果163和qq获取授权码163邮箱,需要开启POP3/SMTP服务,在设置-->POP3/SMTP/IMAP页面进行设置。打开后会有一个授权码,密码在配置里,如果你用这个授权码qq邮箱,你还需要开启这个服务,设置-->账户-->POP3服务,点击打开,会有是一个授权码,如果忘记记录,在启用服务下有一个“生成授权码”,你可以得到它。这样qq和163就可以打开Gmail了。如果是Gmail,这就有点麻烦了。nodemailer官网上也提到:Gmail要么用得好,要么根本用不了。切换到替代服务可能比解决Gmail问题更容易。如果Gmail不适合您,请不要使用它。我这里用我的谷歌邮箱试了一下,修改了上面的配置。constparams={service:'Gmail',//注意,host改为serviceport:465,//portsercure:true,//是否使用TLS,true,端口为465,否则为other或568auth:{user:config.user,//邮箱和密码pass:config.emailPwd}}如果这不起作用,请打开此链接并启用Google以允许不安全的应用程序。如果没有,则需要配置Google的XOAuth2。即使用这种方法配置XOAuth2,也未必可以。这是我在网上找到的配置XOAuth2的教程,这里创建一个credential,选择OAuthclientID,applicationtype选择“webapplication”,然后填写name,记得填写redirectionURI,我填写这个“https://developers.google.com/oauthplayground”然后记录id和key进入这个页面,配置并填写之前的id和key,然后step1,选择apitostep2,点击'Exchange令牌按钮的授权码生成令牌,这就完成了。回到nodejs,重写配置constparams={service:'Gmail',auth:{type:'OAuth2',user:config.user,clientId:config.clientId,clientSecret:config.clientSecret,refreshToken:config.refreshToken,accessToken:config.accessToken}}我这里测试是成功的(本地服务器),如果不行就只能搜索解决方案了。这里是OAuth2官方配置nodemailer其他功能这里是我用过的功能。参见nodemailer官方介绍。好像很多函数发送多个用户://配置发送信息时constmailOptions={from:config.user,//sendemailto:config.emailTo+','+config.emailTo2//用','}分隔发送html内容constmailOptions={....html:config.html//这里可以是htmlcharactersString}发送附件可以发送多个constmailOptions={...attachments:[{filename:'test.txt',content:'helloworld!'},{filename:'test.txt',content:'helloworld!',contentType:'text/plain'}]}html显示图片如果直接把图片地址写在图片上,在qq中是无法直接显示的和谷歌邮箱。qq邮箱有个查看图片的按钮,点击后才能显示。如果使用附件的形式,可以直接显示图片。//伪代码varimg=require("fs").readFileSync('./images/1.jpeg')attachments:[{filename:'1.jpeg',content:img,cid:'00000001'}]html:``官方给出的配置文件名-文件名被报告为附加文件的名称。允许使用unicode。content-附件的字符串、缓冲区或流内容contentType-附件的可选内容类型,如果未设置,将从文件名属性派生contentDisposition-附件的可选内容配置类型,默认为“附件”cid-在HTML消息中使用内联图像的可选内容idsourceencoding-如果设置并且内容是字符串,则使用指定的编码将内容编码到缓冲区。示例值:‘base64’、‘hex’、‘binary’等。如果是则有用你想在JSON格式的电子邮件对象中使用二进制附件。headers-附件节点的自定义标头。与messageheadersraw相同的用法-是一个可选的特殊值,它覆盖当前mime节点的全部内容,包括mimeheaders。如果你想自己准备节点内容很有用总结我只是用nodemailer踩了很多坑,花了我一天的时间。Gmail不是很稳定。后来主管打电话要改成qq。据说qq企业邮箱发邮件比较多。本文只是记录。使用nodemailer的一些经验。