阿酷

普普通通的人

寻找免费的邮件API

图片源自:https://pixabay.com/

长期以来,我经历的项目都是用PHP做后端。学校的网站也是Drupal这种跟Microsoft Word差不多的内容管理系统。

如果需要写一个用系统发邮件的话,基本上就是PHPMailer加上Postfix解决问题。

今天遇到了一个新课题,那就是如何在Serverless的平台用ExpressJS发邮件。


在最开始,我想找一个只用前端的方法。基本上在没找之前就知道没多大可能,但是还是抱着偷懒的心里在网上搜一下。结果发现都要将自己的密码或者验证码直接写道程序里,暴露在大庭广众之下。谁会干这傻事?

还是找后端的方法的。

不过在写代码之前,需要一个能够提供API的地方。看到不少要钱的,突然间让我寻到了一个宝。Sendinblue可以提供免费服务,一天能发300封邮件。

这年头,不怕写不出程序,就怕找不到免费使用的工具。在网上看了一下大众的点评,看上去还算靠谱,于是就建立了一个账户。反正要做的项目不需要太多的流量,眼前这个平台刚好合适。

要想使用Sendinblue的电子邮件 API,就需要安装它的 SDK。

yarn add sib-api-v3-sdk

其实平台还提供了PHP,Python等其他选项。但是我今天要用ExpressJS,所以就使用NodeJS的包。

设立API密钥

平台上可以在https://account.sendinblue.com/advanced/api创建新的 API身份验证密钥,好像没有数量限制。一个项目用一个密钥能够更好的监控单个项目。

存放API密钥

除非是傻子,要不然谁也不会把密钥写到程序中。所以就需要安装dotenv来储存所有的环境变量。

yarn add dotenv

在程序中调用.env文件的变量只需要在程序上加上

require("dotenv").config();
const apiKey.apiKey = process.env.SIB_Api_key

SIB_Api_key是我为API密钥定义的变量名称。起名字其实可以非常随意,只要我们不使用在此项目中使用的任何关键字或定义的函数名称。

因为我们总是有一个默认的电子邮件地址来发送或接收电子邮件通知。 我们也可以将它们添加到 .env 文件中。

调用API

require("dotenv").config();

const SibApiV3Sdk = require("sib-api-v3-sdk");
let defaultClient = SibApiV3Sdk.ApiClient.instance;

let apiKey = defaultClient.authentications["api-key"];
apiKey.apiKey = process.env.SIB_Api_Key;

let apiInstance = new SibApiV3Sdk.TransactionalEmailsApi();

let sendSmtpEmail = new SibApiV3Sdk.SendSmtpEmail();

这段没啥可说的,调库,定义,度密钥。一切都是准备工作。

function sendMail(data) {
  sendSmtpEmail.subject = data.subject;
  sendSmtpEmail.htmlContent = data.message;
  sendSmtpEmail.sender = {
    "name": data.name,
    "email": data.email
  };
  sendSmtpEmail.to = [{
    "email": process.env.SIB_Main_Email,
    "name": process.env.SIB_Main_Name
  }];
  sendSmtpEmail.headers = {"sender.ip": data.senderip};

  apiInstance.sendTransacEmail(sendSmtpEmail)
  .then(function(data) {
    console.log("API called successfully. Returned data: " + JSON.stringify(data));
  },function(error) {
    console.error(error);
  });
}

这段就是生成邮件了,填写收件人,发件人,邮件的台头,和内容等等……

我不知道其他人,但我不喜欢只在后端显示console.log,这玩意谁也看不见。我需要将一些值返回到前端。 考虑到这一点,我将sendMail修改为一个异步函数,这样每当我调用这个函数时,我都会收到一个结果。

测试

该测试了!要用Postman,这时候才发现现在用的电脑根本没安装 Postman……好吧,下一个。

用Postman测试 API还是满轻松的。手动编辑JSON代替前端的表格发给后端。


几秒钟后,收到邮件。


完事

在前端再测试一下。完事就绪,将代码发到gitGithub上,并让 Cyclic 进行自动部署。

收工啦……

CC BY-NC-ND 2.0

Like my work?
Don't forget to support or like, so I know you are with me..

Want to read more ?

Login with one click and join the most diverse creator community.