Indirect via Your Server - Calling 3rd Party API - secure and recommended
Votre serveur peut appeler l'API tierce. Les clés API ne sont pas exposées au client.
node.js
const axios = require('axios');
async function sendEmail(name, email, subject, message) {
const data = JSON.stringify({
"Messages": [{
"From": {"Email": "", "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: '', password: ''},
};
return axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
}
// définissez votre propre api d'email qui pointe vers votre serveur.
app.post('/api/sendemail/', function (req, res) {
const {name, email, subject, message} = req.body;
// implémentez votre protection contre le spam ou vos vérifications.
sendEmail(name, email, subject, message);
});
et ensuite utilisez fetch côté client pour appeler votre API d'email. Utilisez from email
que vous avez utilisé pour vous inscrire sur Mailjet. Vous pouvez également authentifier plus d'adresses. Mailjet offre un généreux niveau gratuit.
Mise à jour 2023: Comme indiqué dans les commentaires, la méthode ci-dessous ne fonctionne plus en raison de CORS
Ceci peut être seulement utile si vous souhaitez tester l'envoi d'email et pour ce faire
Directement du client - Appel à une API tierce - non recommandé
en bref:
- inscrivez-vous sur Mailjet pour obtenir une clé API et un Secret
- utilisez fetch pour appeler l'API pour envoyer un email
Comme ceci -
function sendMail(name, email, subject, message) {
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.set('Authorization', 'Basic ' + btoa(''+":" +''));
const data = JSON.stringify({
"Messages": [{
"From": {"Email": "", "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',"",'Test Subject','Test Message')
Remarque: Gardez à l'esprit que votre clé API est visible pour tout le monde, donc tout utilisateur malveillant peut utiliser votre clé pour envoyer des emails qui peuvent consommer votre quota.
10 votes
Utilisez un langage côté serveur pour réellement envoyer l'e-mail, et AJAX pour avoir l'apparence que vous souhaitez.
2 votes
Cela pourrait être un peu tard, mais cela pourrait vous aider : stackoverflow.com/questions/271171/…
3 votes
Les utilisateurs de Gmail peuvent l'avoir, consultez developers.google.com/gmail/api
1 votes
Comme mentionné ci-dessous, vous voudrez peut-être également jeter un coup d'œil à EmailJS, qui permet d'envoyer des e-mails à l'aide de modèles préconstruits directement depuis Javascript, et prend également en charge les paramètres dynamiques, les pièces jointes, les captcha, l'API REST et plus encore. Nous offrons également un niveau gratuit pour commencer [divulgation - je suis l'un des créateurs]
1 votes
Notez que si vous utilisez la réponse acceptée, l'e-mail proviendra du compte de l'utilisateur. Pour envoyer un e-mail depuis votre compte personnel ou professionnel, la bonne solution est d'utiliser JavaScript pour envoyer des e-mails via votre propre serveur ou un service tiers tel que Byteline. Plus de détails dans cette réponse ci-dessous.