Comment puis-je envoyer un courrier électronique avec JavaScript sans ouvrir le client de messagerie?

J'écris une page HTML avec un bouton d'enregistrement qui devrait simplement envoyer un courrier électronique en silence sans ouvrir le client de messagerie local. Voici mon HTML:

<form method="post" action=""> <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required> <button onclick="sendMail(); return false">Send Email</button> </form> 

… et voici mon code JavaScript:

 <script type="text/javascript"> function sendMail() { var link = 'mailto:[email protected]?subject=Message from ' +document.getElementById('email_address').value +'&body='+document.getElementById('email_address').value; window.location.href = link; } </script> 

Le code ci-dessus fonctionne … mais il ouvre le client de messagerie local. Si je supprime l'énoncé de return dans l'attribut onclick comme ceci:

 <form method="post" action=""> <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required> <button onclick="sendMail()">Send Email</button> </form> 

… alors le courrier électronique n'est pas envoyé. Est-ce que je manque quelque chose?

Toute aide serait réellement appréciée 🙂

Vous avez besoin d'un support côté serveur pour y parvenir. Fondamentalement, votre formulaire devrait être affiché (AJAX est également bien) au serveur et ce serveur doit se connecter via SMTP à un fournisseur de messagerie et envoyer ce courrier électronique.

Même s'il était possible d'envoyer des courriels directement à l'aide de JavaScript (c'est-à-dire de l'ordinateur des utilisateurs), l'utilisateur devrait toujours se connecter à un serveur SMTP (comme gmail.com), fournir des informations d'identification SMTP, etc. Ceci est généralement traité sur Le côté serveur (dans votre application), qui connaît ces informations d'identification.

Vous ne pouvez pas faire en sorte que le navigateur de l'utilisateur envoie son courrier silencieusement. Ce serait un problème de sécurité horrible, car tout site Web pourrait utiliser son système comme un relais anti-spam et / ou récolter son adresse e-mail.

Vous devez effectuer une requête HTTP dans un processus côté serveur (écrit dans la langue de votre choix) qui envoie le courrier de votre serveur.

Directement du client


Envoyer un mail en utilisant uniquement JavaScript

 in short: 1. register for Mandrill to get an API key 2. load jQuery 3. use $.ajax to send an email 

Comme ça –

 function sendMail() { $.ajax({ type: 'POST', url: 'https://mandrillapp.com/api/1.0/messages/send.json', data: { 'key': 'YOUR API KEY HERE', 'message': { 'from_email': '[email protected]', 'to': [ { 'email': '[email protected]', 'name': 'RECIPIENT NAME (OPTIONAL)', 'type': 'to' } ], 'autotext': 'true', 'subject': 'YOUR SUBJECT HERE!', 'html': 'YOUR EMAIL CONTENT HERE! YOU CAN USE HTML!' } } }).done(function(response) { console.log(response); // if you're into that sorta thing }); } 

https://medium.com/design-startups/b53319616782

Remarque: Gardez à l'esprit que votre clé API est visible pour toute personne, de sorte que tout utilisateur malveillant peut utiliser votre clé pour envoyer des courriels pouvant contenir votre quota.


Indirecte via votre serveur – sécurisé


Pour surmonter la vulnérabilité ci-dessus, vous pouvez modifier votre propre serveur pour envoyer l'email après l'authentification basée sur la session.

Node.jshttps://www.npmjs.org/package/node-mandrill

 var mandrill = require('node-mandrill')('<your API Key>'); function sendEmail ( _name, _email, _subject, _message) { mandrill('/messages/send', { message: { to: [{email: _email , name: _name}], from_email: '[email protected]', subject: _subject, text: _message } }, function(error, response){ if (error) console.log( error ); else console.log(response); }); } // define your own email api which points to your server. app.post( '/api/sendemail/', function(req, res){ var _name = req.body.name; var _email = req.body.email; var _subject = req.body.subject; var _messsage = req.body.message; //implement your spam protection or checks. sendEmail ( _name, _email, _subject, _message ); }); 

Et utilisez ensuite $ .ajax sur le client pour appeler votre API de messagerie.

Vous ne pouvez pas le faire avec le script côté client uniquement … vous pourriez faire un appel AJAX sur un code côté serveur qui enverra un courrier électronique …

Il doit y avoir un type de cadre de backend pour envoyer le courrier électronique. Cela peut se faire via PHP / ASP.NET ou avec le client de messagerie local. Si vous voulez que l'utilisateur ne voie rien, la meilleure façon est d'utiliser ceux d'un appel AJAX vers un fichier send_email distinct.

Vous devez le faire directement sur un serveur. Mais une meilleure façon est d'utiliser PHP. J'ai entendu dire que PHP a un code spécial qui peut envoyer un courrier électronique directement sans ouvrir le client de messagerie.

Je pense que vous pouvez utiliser smtpjs.com