评论

基于云函数发送邮件

基于云函数发送邮件

引言:基于第三方Nodemailer可以实现使用云函数来发送邮件。在开发过程中使用发送邮件,一般使用场景是用来用户注册账号,更改密码等其它验证。

1.开发准备

1.1邮箱

已注册成功的QQ邮箱、网易邮箱等;

1.2Nodemailer功能

  • 零依赖性的单个模块–由于没有死角,因此代码易于审核
  • 高度重视安全性,没有人喜欢RCE漏洞
  • Unicode支持使用任何字符,包括表情符号💪
  • Windows支持 –您可以使用安装npm在Windows上,与其他模块一样,没有编译的依赖项。从Azure或Windows盒子免费使用它
  • 使用HTML内容以及纯文本替代
  • 附件 到消息
  • 嵌入式的 HTML内容的图像附件–您的设计不会被阻塞
  • 使用TLS / STARTTLS的安全电子邮件传递
  • 不同 运输方式 除了内置 SMTP支持
  • 与签署消息 DKIM
  • 自订 插件支持 用于处理消息
  • OAuth2 认证方式
  • 代理人 用于SMTP连接
  • ES6代码 –由于var的提升,不再有意外的内存泄漏
  • 自动生成来自的电子邮件测试帐户电子邮件

Nodemailer技术文档https://nodemailer.com/about/

2.开启SMTP服务,获取邮箱授权码

授权码在发送邮件时需要使用,以下为QQ邮箱和网易邮箱获取授权码的详细步骤,授权码的具体使用会在代码模块详细介绍;

2.1获取QQ邮箱授权码

登录QQ邮箱网页版,按照以下步骤获取授权码:

1.在首页找到设置

   

2.选择账户

3.在账户页面向下滚动找到此选项,点击开启服务

4.在弹出页面,按照步骤发送信息

5.发送成功后即可获得授权码:xxxxxxxxxxxxxx

2.2.获取网易邮箱授权码

登录网易邮箱网页版,按照以下步骤获取授权码:

1.在首页找到设置,在下拉框选择POP3/SMTP/IMAP

2.在此页面点击开启    

3.在弹出页面,按照步骤发送信息

      

4.发送成功后即可获得授权码:xxxxxxxxxxxxxxx

3.使用小程序云函数发送邮件

3.1配置依赖

在微信开发者工具中,新建一个云函数sendEmail,在云函数的package.json配置nodemailer最新版本的依赖,并右键云函数目录选择在终端中打开输入命令npm install安装依赖

"dependencies": {
      "nodemailer": "latest"
  }

3.2编写代码

以网易邮箱为例,在index.js里编写以下代码,在开发使用过程中根据自己的情况更改参数即可,如:

  • @parameter host:SMTP服务器地址;
  • @parameter port:端口号,通常为465,587,994,不同的邮件客户端端口号可能不一样;
  • @parameter auth

user:邮箱账号,填写已开启SMTP服务的邮箱地址即可;

pass:邮箱密码,不同的邮件系统可能机制不一样,QQ邮箱和网易邮箱为邮箱授权码;

  • @parameter message

from:填写发件邮箱地址;

to:填写收件方的邮箱地址;

  • nodemailer支持发送text文字内容、html网页内容以及附件的形式;
const cloud = require('wx-server-sdk')
cloud.init({ 
   env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {  
const nodemailer = require("nodemailer");  
let sendEmail = nodemailer.createTransport({    
   host: "smtp.163.com"//SMTP服务器地址    
   port: 465//端口号,通常为465,587,994,不同的邮件客户端端口号可能不一样    
   secure: true//如果端口是465,就为true;如果是其它就填false    
   auth: {      
      user: "xxxxxxxx@163.com",  //邮箱账号,填写已开启SMTP服务的邮箱地址即可      
      pass: "xxxxxxxxx"   //邮箱密码,不同的邮件系统可能机制不一样,QQ邮箱和网易邮箱为邮箱授权码    }  
});   
   let message = {   
      from'xxxxxxxx@163.com',   //填写发件邮箱地址   
      to: 'xxxxxxx@qq.com',  //填写收件方的邮箱地址 
      subject: '这是我发送的第一封邮件',    
      text: 'Hello world?',  //text纯文字  
      html: '<b>Hello world?</b>'//html代码  
};  
   let res = await sendEmail.sendMail(message); 
   return res;
}

3.3云函数的简单调用

云函数编写完成,并右键云函数目录选择上传并部署所有文件,待部署完成即可使用

wxml页面代码:

<button bindtap="sendEmail">点击发送邮件</button>

js调用云函数:

sendEmail({
    wx.cloud.callFunction({
      name:"sendEmail",
    }).then(res => {
      console.log("邮件发送成功",res)
    }).catch(err => {
      console.log("邮件发送失败",err)
    })
  },

成功执行,可在收件邮箱中查看到邮件:

4.云函数发送邮箱的扩展

本文主要介绍使用云函数来发送邮件的功能,虽然文中代码以网易邮箱为例,但在自己使用过程中可以灵活的改变参数以达到自己的需求。

且在实际开发过程中,可根据自己的需求来控制发送邮件的过程和流程,如果有什么不懂的问题可以查看官方文档,也可以私信本人(微信:ZW190308)

最后一次编辑于  2020-05-27  
点赞 2
收藏
评论

2 个评论

  • 渐行渐远
    渐行渐远
    2020-05-28

    很棒

    2020-05-28
    赞同
    回复
  • 苏军
    苏军
    2020-05-27

    对你为社区的贡献点个赞

    2020-05-27
    赞同
    回复 1
    • LetCode
      LetCode
      发表于小程序端
      2020-05-27
      感谢支持
      2020-05-27
      回复
登录 后发表内容