Invio di e-mail con Javascript
-
06-07-2019 - |
Domanda
Questo è un po 'confuso da spiegare, quindi abbi pazienza qui ...
Voglio impostare un sistema in cui un utente può inviare e-mail basate su modelli tramite il mio sito Web, tranne per il fatto che non è effettivamente inviato tramite il mio server, ma apre semplicemente il proprio client di posta locale con una e-mail pronta per l'uso. L'applicazione riempirebbe il corpo dell'e-mail con variabili predefinite, per evitare che l'utente dovesse digitarlo da solo. Possono quindi modificare il messaggio come desiderato, se non soddisfa esattamente i loro scopi.
Esistono diversi motivi per cui voglio che passi tramite il client di posta locale dell'utente, quindi ottenere il server per inviare l'e-mail non è un'opzione: deve essere al 100% lato client.
Ho già una soluzione per lo più funzionante e pubblicherò i dettagli come risposta, mi chiedo se esiste un modo migliore?
Soluzione
Il modo in cui lo sto facendo ora è sostanzialmente così:
HTML:
<textarea id="myText">
Lorem ipsum...
</textarea>
<button onclick="sendMail(); return false">Send</button>
Il Javascript:
function sendMail() {
var link = "mailto:me@example.com"
+ "?cc=myCCaddress@example.com"
+ "&subject=" + escape("This is my subject")
+ "&body=" + escape(document.getElementById('myText').value)
;
window.location.href = link;
}
Questo, sorprendentemente, funziona piuttosto bene. L'unico problema è che se il corpo è particolarmente lungo (da qualche parte oltre 2000 caratteri), allora apre solo una nuova e-mail ma non contiene informazioni. Sospetto che ciò riguarderebbe il superamento della lunghezza massima dell'URL.
Altri suggerimenti
Ecco come farlo usando jQuery e un " elemento " fare clic su:
$('#element').click(function(){
$(location).attr('href', 'mailto:?subject='
+ encodeURIComponent("This is my subject")
+ "&body="
+ encodeURIComponent("This is my body")
);
});
Quindi, puoi ottenere i tuoi contenuti alimentandoli dai campi di input (cioè usando $('#input1').val()
o da uno script lato server con $.get('...')
. Divertiti
Non hai bisogno di alcun javascript, hai solo bisogno che il tuo href sia codificato in questo modo:
<a href="mailto:me@me.com">email me here!</a>
Che ne dici di avere una convalida live sulla casella di testo, e una volta che supera i 2000 (o qualunque sia la soglia massima) quindi visualizza 'Questa email è troppo lunga per essere completata nel browser, per favore <span class="launchEmailClientLink">launch what you have in your email client</span>
'
A cui avrei
.launchEmailClientLink {
cursor: pointer;
color: #00F;
}
e jQuery questo nel tuo onDomReady
$('.launchEmailClientLink').bind('click',sendMail);
Puoi utilizzare questo servizio gratuito: https://www.smtpjs.com
- Includi lo script:
<script src="https://smtpjs.com/v2/smtp.js">
</script>
-
Invia un'e-mail utilizzando:
Email.send("from@you.com", "to@them.com", "This is a subject", "this is the body", "smtp.yourisp.com", "username", "password");
Se questo aprirà il client dell'utente per inviare l'e-mail, perché non lasciarlo comporre anche lì. Perdi la possibilità di tenere traccia di ciò che stanno inviando, ma se ciò non è importante, raccogli semplicemente gli indirizzi e l'oggetto e fai apparire il client per consentire all'utente di compilare il corpo.
Il problema con l'idea stessa è che l'utente deve disporre di un client di posta elettronica, il che non è il caso se si basa su e-mail, come nel caso di molti utenti. (almeno non ci sono stati cambiamenti per reindirizzare a questa webmail quando ho indagato sul problema una dozzina di anni fa).
Ecco perché la normale soluzione è fare affidamento su php mail () per inviare e-mail (lato server, quindi).
Ma se al giorno d'oggi " client di posta elettronica " è sempre impostato, automaticamente, potenzialmente su un client di webmail, sarò felice di saperlo.
Invia richiesta a mandrillapp.com :
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
console.log(xhttp.responseText);
}
}
xhttp.open('GET', 'https://mandrillapp.com/api/1.0/messages/send.json?message[from_email]=mail@7995.by&message[to][0][email]=zdanevich.vitaly@yaa.ru&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();