Toggle navigation
我的博客
首页
文章列表
留言板
登录
注册
首页
技术分享
文章
node发送短信,邮件
作者:
gaohan
•
2020年11月07日
阅读 (1515)
## 一) 发送短信
1. 开通阿里云短信服务,创建签名和模板
2. 调用 `@alicloud/sms-sdk` 阿里sdk,使用其api实现短信发送
#### 代码实现:
下载依赖:
npm @alicloud/sms-sdk --save
```javascript
const SMSClient = require('@alicloud/sms-sdk');
// 密匙: 在阿里个人中心查看
const accessKeyId = 'accessKeyId'
const secretAccessKey = 'secretAccessKey'
function sendMsg(){
//初始化sms_client
let smsClient = new SMSClient({accessKeyId, secretAccessKey})
//发送短信
smsClient.sendSMS({
PhoneNumbers: '手机号',//必填:支持以逗号分隔的形式批量调用,上限为1000个,发送国际/港澳台消息时格式为:国际区号+号码,如“85200000000”
SignName: '短信签名',//必填,在阿里云短信控制台查看
TemplateCode: '短信模板CODE',//必填,在阿里云短信控制台查看
TemplateParam: '模板内容为'//可选:模板内容为"亲爱的${name},您的验证码为${code}"时。
}).then(function (res) {
let {Code}=res
if (Code === 'OK') {
//处理返回参数
console.log(res)
}
}, function (err) {
console.log(err)
})
}
module.exports = sendMsg
```
## 二) 发送邮件
1. 开启对应邮箱的POP3/SMTP服务,获取第三方授权码
SMTP:SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务
[](https://yuezhou.oss-cn-beijing.aliyuncs.com/blogimg/emaihelp.png "qq邮箱设置POP3/SWPT帮助")
[](https://yuezhou.oss-cn-beijing.aliyuncs.com/blogimg/SMTP.png "qq邮箱POP3端口及SWPI端口")
2. 使用 `nodemailer` 模块实现邮件发送
#### 代码实现:
下载依赖:
npm nodemailer --save
```javascript
const https = require("https");
const cheerio = require("cheerio");
const nodemailer = require("nodemailer");
const fs = require("fs");
const path = require("path");
const schedule = require("node-schedule");
const template = require('art-template');
//发送者邮箱SMTP账户
let emailAuth = {
user: "账号",
pass: "授权码" // 授权码,不是密码
};
let emailInfo={
service: '发送者邮箱服务商', //https://github.com/andris9/nodemailer-wellknown#supported-services 支持列表
from: '发送者邮箱地址',
to: '接受者者邮箱地址',
subject: '邮件标题',
html: '邮件内容'
}
//墨迹天气当地拼音
const local = "inner-mongolia/bayannur";
// 墨迹天气地址
const weatherUrl = "https://tianqi.moji.com/weather/china/" + local;
function getWeateherData(){
let promise = new Promise((resolve,reject)=>{
https.get(weatherUrl,(res)=>{
let html = ''
res.setEncoding("utf-8");
res.on("data", (chunk)=>{
html += chunk
});
res.on("end", ()=>{
let $ = cheerio.load(html);
// 温暖提示
let tip = "";
$(".wea_tips").each((i, e)=> {
tip = $(e).find("em").text()
});
// 近三天天气
let data = [];
$(".forecast .days").each((i, e)=> {
let li = $(e).find("li");
data.push({
day: $(li[0]).text().replace(/\s/g, ""),
imgUrl: $(li[1]).find("img").attr("src"),
text: $(li[1]).text().replace(/\s/g, ""),
temperature: $(li[2]).text().replace(/\s/g, ""),
windDir: $(li[3]).find("em").text().replace(/\s/g, ""),
windLevel: $(li[3]).find("b").text().replace(/\s/g, "")
});
});
resolve({code: 1, data:{tip,data}, msg: '数据获取成功'})
});
res.on('error',(err)=>{
reject({code: -1, data: '', msg: '数据获取失败'});
})
})
})
return promise
}
// 获取邮件html
function getHtml(){
let promise = new Promise((resolve,reject)=>{
fs.readFile(path.resolve('../template/email.html'), (err,res)=>{
if( err ){
console.log(err);
reject(err)
return
}
getWeateherData().then((data)=>{
let today = `${new Date().getFullYear()}年${new Date().getMonth()+1}月${new Date().getDate()}日`
let tpl = template.render(res.toString(),{...data.data,today})
resolve(tpl)
})
})
})
return promise
}
// 发送邮件
function start() {
let promise = new Promise((resolve,reject)=>{
console.log('开始');
getHtml().then((html)=>{
// 创建连接
let transporter = nodemailer.createTransport({
service: 'qq',
auth: emailAuth,
secureConnection: true, // 使用 SSL
port: 465, // SMTP 端口
});
// 发送参数
let mailOptions = {
from: emailInfo.from,
to: emailInfo.to,
subject: emailInfo.subject,
html
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log(error);
reject({code:-1, data: '', msg: error})
return
}
resolve({code:1, data: info.messageId, msg: '邮件发送成功'})
console.log("等待目标时间...");
});
})
})
return promise
}
function sendEmail(time={hour:7,min:30}){
// 设置定时器
let rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(1, 6)];
rule.hour = time.hour;
rule.minute = time.min;
console.log("等待目标时间...");
schedule.scheduleJob(rule, function() {
console.log('设置计时:',time);
start()
});
}
sendEmail()
module.exports = sendEmail
// TODO
// 备忘录自动提示
// 输入时间,要做的事,在规定时间自动发送
// 发送后12小时自动删除
```
© 著作权归作者所有
分类
技术分享
标签
node