it-swarm.com.de

E-Mails mit Javascript senden

Das ist etwas verwirrend zu erklären, also trage mich hier ...

Ich möchte ein System einrichten, mit dem ein Benutzer Vorlagen-E-Mails über meine Website senden kann, es sei denn, sie werden tatsächlich nicht über meinen Server gesendet. Stattdessen wird ein eigener lokaler E-Mail-Client mit einer einsatzbereiten E-Mail geöffnet. Die Anwendung würde den Text der E-Mail mit vordefinierten Variablen ausfüllen, damit der Benutzer sie nicht selbst eingeben muss. Sie können die Nachricht dann wie gewünscht bearbeiten, falls sie nicht genau ihren Zwecken entspricht.

Es gibt eine Reihe von Gründen, aus denen ich möchte, dass es über den lokalen E-Mail-Client des Benutzers gesendet wird. Daher ist es keine Option, den Server zum Senden der E-Mail zu veranlassen: Es muss zu 100% clientseitig sein.

Ich habe bereits eine Lösung, die größtenteils funktioniert, und ich werde die Details dazu als Antwort veröffentlichen. Ich frage mich, ob es einen besseren Weg gibt.

102
nickf

So mache ich es jetzt im Grunde:

Der HTML:

<textarea id="myText">
    Lorem ipsum...
</textarea>
<button onclick="sendMail(); return false">Send</button>

Das Javascript:

function sendMail() {
    var link = "mailto:[email protected]"
             + "[email protected]"
             + "&subject=" + escape("This is my subject")
             + "&body=" + escape(document.getElementById('myText').value)
    ;

    window.location.href = link;
}

Dies funktioniert überraschenderweise ziemlich gut. Das einzige Problem ist, dass wenn der Body besonders lang ist (irgendwo über 2000 Zeichen), er nur eine neue E-Mail öffnet, aber keine Informationen enthält. Ich vermute, dass dies damit zu tun hat, dass die maximale Länge der URL überschritten wird.

126
nickf

So geht's mit jQuery und einem "Element" zum Anklicken:

$('#element').click(function(){
    $(location).attr('href', 'mailto:?subject='
                             + encodeURIComponent("This is my subject")
                             + "&body=" 
                             + encodeURIComponent("This is my body")
    );
});

Anschließend können Sie Ihre Inhalte entweder über Eingabefelder abrufen (z. B. mit $('#input1').val() oder über ein serverseitiges Skript mit $.get('...'). Viel Spaß

17
Reignier Julien

Sie brauchen kein Javascript, Sie müssen nur Ihre href so codiert sein:

<a href="mailto:[email protected]">email me here!</a>
10
Ryan Doherty

Sie können diesen kostenlosen Service nutzen: https://www.smtpjs.com

  1. Fügen Sie das Skript hinzu:

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

  1. Senden Sie eine E-Mail mit:

    Email.send("[email protected]", "[email protected]", "This is a subject", "this is the body", "smtp.yourisp.com", "username", "password");

5
cepix

Wie wäre es mit einer Live-Validierung des Textfelds und sobald es über 2000 ist (oder was auch immer der maximale Schwellenwert ist), wird angezeigt: 'Diese E-Mail ist zu lang, um im Browser ausgefüllt zu werden, bitte <span class="launchEmailClientLink">launch what you have in your email client</span> '

Zu dem hätte ich

.launchEmailClientLink {
cursor: pointer;
color: #00F;
}

und jQuery dies in Ihrem onDomReady

$('.launchEmailClientLink').bind('click',sendMail);
5
alex

Wenn dies nur den Client des Benutzers zum Senden der E-Mail öffnen soll, lassen Sie ihn dann auch dort verfassen. Sie können nicht mehr nachverfolgen, was gesendet wird. Wenn dies jedoch nicht wichtig ist, erfassen Sie einfach die Adressen und den Betreff und rufen Sie den Client auf, damit der Benutzer den Text ausfüllt.

2
tvanfosson

Anfrage senden an 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][email protected]&message[to][0][email][email protected]&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();
1

Das Problem mit der Idee ist, dass der Benutzer einen E-Mail-Client haben muss, was nicht der Fall ist, wenn er sich auf Webmails verlässt, was für viele Benutzer der Fall ist. (Zumindest gab es keine Möglichkeit, zu dieser Webmail umzuleiten, als ich vor einem Dutzend Jahren das Problem untersuchte.).

Aus diesem Grund besteht die normale Lösung darin, sich beim Versenden von E-Mails auf php mail () zu verlassen (also serverseitig).

Aber wenn heutzutage "E-Mail-Client" immer automatisch eingestellt ist, möglicherweise auf einen Webmail-Client, würde ich mich freuen, das zu wissen.

1
Fabrice NEYRET