在现代的软件开发中,邮件服务是一个常见的需求,无论是用于用户通知、密码重置还是其他业务流程。然而,维护一个邮件服务器通常需要大量的资源和专业知识。幸运的是,有许多第三方服务可以帮助处理邮件的发送和接收,而无需自己维护服务器。本文将介绍如何使用Mailgun服务来发送和接收电子邮件,并将其集成到Google Cloud Platform(GCP)的云函数中。
有许多服务可以选择来发送和接收电子邮件,例如SendGrid、Amazon SES等。Mailgun是一个流行的选择,因为它提供了一个简单易用的API,并且对于小规模的使用是免费的。Mailgun允许发送和接收电子邮件,并且提供了临时存储邮件的功能。
要开始使用Mailgun,需要注册一个账户。注册过程非常简单,只需要一个能够接收短信的手机。注册后,可以在Mailgun的仪表板中看到沙箱域名(例如:sandbox1234567890.mailgun.org)。
在Mailgun仪表板中,可以找到API基础URL和API密钥。这些信息将用于发送电子邮件。可以在GCP的云函数中创建一个新的函数,使用HTTP触发器,并在index.js文件中输入电子邮件地址、API密钥和API基础URL。
exports.sendEmailFunction = function sendEmailFunction(req, res) {
var request = require("request");
var mailgunapiKey = new Buffer('api:key-abcdefghijklmnopqrst1234567890').toString('base64');
var mailFormData = {
from: "mailgun@mailgun.org",
to: "yourname@gmail.com",
subject: "sendEmailFunction",
text: "Hello from cloud"
};
request({
uri: "https://api.mailgun.net/v3/sandbox1234567890.mailgun.org/messages",
headers: {
'User-Agent': 'request',
'Authorization': 'Basic ' + mailgunapiKey,
},
method: "POST",
form: mailFormData,
}, function(error, response, body) {
res.status(200).send('Success: ' + error + "&" + response.statusCode + "&" + body + ' end');
});
};
请注意,mailFormData的成员可以根据变量来填充,甚至可以是req中接收到的变量(调用脚本的调用者必须支持这一点)。
使用Mailgun这样的服务,接收电子邮件变得非常简单。当有新的电子邮件到达时,Mailgun会调用云函数。需要定义哪个函数将被哪个电子邮件调用。在Mailgun的仪表板中,进入Routes部分,创建一个新的路由。
在表达式类型中选择Catch All,这意味着所有发送到沙箱域名的电子邮件(例如:info@sandbox1234567890.mailgun.org)都将由这个路由处理。在Actions中选择Forward,并输入触发GCP函数的URL。
exports.receiveEmailFunction = function receiveEmailFunction(req, res) {
if (req.body.subject === undefined) {
res.status(400).send('No subject defined!');
} else {
console.log(req.body['body-plain']);
res.status(200).send('Success: ' + req.body['body-plain']);
}
};
这只是一个简单的例子。即使电子邮件的主题为空,也没有理由让Mailgun调用的函数中的req.body.subject未定义。