通过您的服务器间接调用第三方API-安全且推荐
您的服务器可以调用第三方API。 API密钥不会暴露给客户端。
node.js
const axios = require('axios');
async function sendEmail(name, email, subject, message) {
const data = JSON.stringify({
"Messages": [{
"From": {"Email": "<YOUR EMAIL>", "Name": "<YOUR NAME>"},
"To": [{"Email": email, "Name": name}],
"Subject": subject,
"TextPart": message
}]
});
const config = {
method: 'post',
url: 'https://api.mailjet.com/v3.1/send',
data: data,
headers: {'Content-Type': 'application/json'},
auth: {username: '<API Key>', password: '<Secret Key>'},
};
return axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
}
app.post('/api/sendemail/', function (req, res) {
const {name, email, subject, message} = req.body;
sendEmail(name, email, subject, message);
});
然后在客户端使用fetch调用您的电子邮件API。
使用from email
,这是您在Mailjet上注册时使用的。您还可以验证更多地址。Mailjet提供慷慨的免费套餐。
更新2023年:如评论中所指出,由于CORS,下面的方法不再起作用
如果要测试发送电子邮件,则这只有用处
直接从客户端 - 调用第三方API - 不建议
简而言之:
- 注册Mailjet以获取API密钥和密码
- 使用fetch调用API发送电子邮件
就像这样 -
function sendMail(name, email, subject, message) {
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.set('Authorization', 'Basic ' + btoa('<API Key>'+":" +'<Secret Key>'));
const data = JSON.stringify({
"Messages": [{
"From": {"Email": "<YOUR EMAIL>", "Name": "<YOUR NAME>"},
"To": [{"Email": email, "Name": name}],
"Subject": subject,
"TextPart": message
}]
});
const requestOptions = {
method: 'POST',
headers: myHeaders,
body: data,
};
fetch("https://api.mailjet.com/v3.1/send", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
}
sendMail('Test Name',"<YOUR EMAIL>",'Test Subject','Test Message')
注意:请记住您的API密钥对任何人都是可见的,因此任何恶意用户都可以使用您的密钥发送电子邮件以消耗您的配额。