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?

È stato utile?

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

  1. Includi lo script:

<script src="https://smtpjs.com/v2/smtp.js"> </script>

  1. 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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top