So senden Sie eine E-Mail von JavaScript

243

Ich möchte, dass meine Website eine E-Mail senden kann, ohne die Seite zu aktualisieren. Also möchte ich Javascript verwenden.

<form action="javascript:sendMail();" name="pmForm" id="pmForm" method="post">
Enter Friend's Email:
<input name="pmSubject" id="pmSubject" type="text" maxlength="64" style="width:98%;" />
<input name="pmSubmit" type="submit" value="Invite" />

Hier ist, wie ich die Funktion aufrufen möchte, aber ich bin nicht sicher, was ich in die Javascript-Funktion einfügen soll. Aus den Recherchen, die ich durchgeführt habe, habe ich ein Beispiel gefunden, das die mailto-Methode verwendet, aber ich verstehe, dass das nicht direkt von der Site gesendet wird.

Meine Frage ist also, wo ich finde, was ich in die JavaScript-Funktion einfügen kann, um eine E-Mail direkt von der Website zu senden.

function sendMail() {
    /* ...code here...    */
}
user906357
quelle
7
Verwenden Sie die serverseitige Sprache, um die E-Mail tatsächlich zu senden, und AJAX, um das gewünschte Erscheinungsbild zu erhalten.
Schatten-Assistent ist Ohr für Sie
1
Dies könnte etwas spät sein, aber dies könnte Ihnen helfen: stackoverflow.com/questions/271171/…
PatrickMelia
2
Google Mail-Nutzer können es haben, siehe developer.google.com/gmail/api
Densi Tensy
Wie unten erwähnt, möchten Sie möglicherweise auch einen Blick auf EmailJS werfen , das das Senden von E-Mails mit vorgefertigten Vorlagen direkt aus Javascript ermöglicht und außerdem dynamische Parameter, Anhänge, Captcha, REST-API und mehr unterstützt. Wir bieten auch eine kostenlose Stufe an, um loszulegen [Offenlegung - ich bin einer der Schöpfer]
Sasha
Hinweis: Wenn Sie die akzeptierte Antwort verwenden, wird die E-Mail vom Benutzerkonto gesendet. Um eine E-Mail von Ihrem persönlichen oder geschäftlichen Konto aus zu senden, verwenden Sie Javascript, um E-Mails über Ihren eigenen Server oder einen Drittanbieter wie Byteline zu senden . Weitere Details in dieser Antwort unten.
dsbajna

Antworten:

311

Sie können keine E-Mail direkt mit Javascript senden.

Sie können jedoch den E-Mail-Client des Benutzers öffnen:

window.open('mailto:[email protected]');

Es gibt auch einige Parameter, um das Thema und den Körper vorab zu füllen:

window.open('mailto:[email protected]?subject=subject&body=body');

Eine andere Lösung wäre, einen Ajax-Anruf an Ihren Server zu tätigen, damit der Server die E-Mail sendet. Achten Sie darauf, dass niemand E-Mails über Ihren Server senden darf.

Arnaud Le Blanc
quelle
3
Wenn das Programm, das die Seite öffnet, bereits E-Mail-Client-Funktionen hat (wie Opera 12.50), öffnet es den Link als reguläre URL. Es gibt auch Thunderbird mit der Firefox-Gecko-Engine: Sie kann Webseiten über Hyperlinks in E-Mails als neue Registerkarten öffnen.
user2284570
11
Nur eine Notiz, Sie können auch window.location.href(wie in dieser Antwort: stackoverflow.com/questions/271171/… ) den E-Mail-Client öffnen und dieses leere Fenster bleibt nicht zurück, wenn der Benutzer mit der E-Mail fertig ist.
Igneosaurier
1
Sind subjectund bodyVariablen oder sind sie der tatsächliche Text, der in den Feldern sein wird?
Edward Karak
3
Diese Antwort beantwortet zwar keine Frage, aber @ rahulroys Antwort ist gut
Medet Tleukabiluly
3
Ich würde noch einen Schritt weiter gehen und window.open( String( 'mailto:recipient^example.com' ).replace('^', '@') );Spam-Bots verwirren
Pavel Lebedeff
94

Indirekt über Ihren Server - Aufruf der Drittanbieter-API - sicher und empfohlen


Ihr Server kann die Drittanbieter-API nach ordnungsgemäßer Authentifizierung und Autorisierung aufrufen. Die API-Schlüssel sind nicht für den Client verfügbar.

node.js - https://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 );

});

Verwenden Sie dann $ .ajax auf dem Client, um Ihre E-Mail-API aufzurufen.


Direkt vom Client - Aufruf der Drittanbieter-API - nicht empfohlen


Senden Sie eine E-Mail nur mit JavaScript

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

So was -

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

Hinweis: Beachten Sie, dass Ihr API-Schlüssel für jeden sichtbar ist, sodass jeder böswillige Benutzer Ihren Schlüssel verwenden kann, um E-Mails zu versenden, die Ihr Kontingent verschlingen können.

rahulroy9202
quelle
8
Obwohl der Artikel dies sagt, sollte es auch hier gesagt werden, dass es, obwohl dies funktionieren wird, einige Sicherheitsprobleme gibt, da Sie Ihren API-Schlüssel auch an den Client senden müssen. dies könnte missbraucht werden.
Cantdutchthis
35

Ich konnte keine Antwort finden, die die ursprüngliche Frage wirklich befriedigte.

  • Mandrill ist aufgrund seiner neuen Preispolitik nicht wünschenswert. Außerdem ist ein Backend-Service erforderlich, wenn Sie Ihre Anmeldeinformationen schützen möchten.
  • Es ist oft vorzuziehen, Ihre E-Mails auszublenden, damit Sie nicht auf Listen landen (die mailto-Lösung deckt dieses Problem auf und ist für die meisten Benutzer nicht praktisch).
  • Es ist mühsam, sendMail einzurichten oder überhaupt ein Backend zu benötigen, nur um eine E-Mail zu senden.

Ich habe einen einfachen kostenlosen Dienst zusammengestellt, mit dem Sie eine Standard-HTTP-POST-Anfrage zum Senden einer E-Mail stellen können. Es heißt PostMail und Sie können einfach ein Formular veröffentlichen, Javascript oder jQuery verwenden. Wenn Sie sich anmelden, erhalten Sie Code, den Sie kopieren und in Ihre Website einfügen können. Hier sind einige Beispiele:

Javascript:

<form id="javascript_form">
    <input type="text" name="subject" placeholder="Subject" />
    <textarea name="text" placeholder="Message"></textarea>
    <input type="submit" id="js_send" value="Send" />
</form>

<script>

    //update this with your js_form selector
    var form_id_js = "javascript_form";

    var data_js = {
        "access_token": "{your access token}" // sent after you sign up
    };

    function js_onSuccess() {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+Successfully+Sent%21&isError=0";
    }

    function js_onError(error) {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+could+not+be+sent.&isError=1";
    }

    var sendButton = document.getElementById("js_send");

    function js_send() {
        sendButton.value='Sending…';
        sendButton.disabled=true;
        var request = new XMLHttpRequest();
        request.onreadystatechange = function() {
            if (request.readyState == 4 && request.status == 200) {
                js_onSuccess();
            } else
            if(request.readyState == 4) {
                js_onError(request.response);
            }
        };

        var subject = document.querySelector("#" + form_id_js + " [name='subject']").value;
        var message = document.querySelector("#" + form_id_js + " [name='text']").value;
        data_js['subject'] = subject;
        data_js['text'] = message;
        var params = toParams(data_js);

        request.open("POST", "https://postmail.invotes.com/send", true);
        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

        request.send(params);

        return false;
    }

    sendButton.onclick = js_send;

    function toParams(data_js) {
        var form_data = [];
        for ( var key in data_js ) {
            form_data.push(encodeURIComponent(key) + "=" + encodeURIComponent(data_js[key]));
        }

        return form_data.join("&");
    }

    var js_form = document.getElementById(form_id_js);
    js_form.addEventListener("submit", function (e) {
        e.preventDefault();
    });
</script>

jQuery:

<form id="jquery_form">
    <input type="text" name="subject" placeholder="Subject" />
    <textarea name="text" placeholder="Message" ></textarea>
    <input type="submit" name="send" value="Send" />
</form>

<script>

    //update this with your $form selector
    var form_id = "jquery_form";

    var data = {
        "access_token": "{your access token}" // sent after you sign up
    };

    function onSuccess() {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+Successfully+Sent%21&isError=0";
    }

    function onError(error) {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+could+not+be+sent.&isError=1";
    }

    var sendButton = $("#" + form_id + " [name='send']");

    function send() {
        sendButton.val('Sending…');
        sendButton.prop('disabled',true);

        var subject = $("#" + form_id + " [name='subject']").val();
        var message = $("#" + form_id + " [name='text']").val();
        data['subject'] = subject;
        data['text'] = message;

        $.post('https://postmail.invotes.com/send',
            data,
            onSuccess
        ).fail(onError);

        return false;
    }

    sendButton.on('click', send);

    var $form = $("#" + form_id);
    $form.submit(function( event ) {
        event.preventDefault();
    });
</script>

Bei vollständiger Offenlegung habe ich diesen Dienst erneut erstellt, da ich keine passende Antwort finden konnte.

user949286
quelle
Ich habe nach dieser Lösung gesucht, danke für die Antwort, aber ich frage mich, wie ich ein weiteres Textfeld in das HTML-Formular einfügen kann, denn wenn ich versuche, den Code zu ändern, um ein weiteres Textfeld für andere Informationen hinzuzufügen, wurde der Code gestoppt Arbeiten. Kennen Sie eine Lösung dafür?
Suman
Google Mail-Nutzer können tatsächlich das tun, was Sie möchten - siehe developer.google.com/gmail/api . Vielleicht haben einige andere E-Mail-Anbieter ihre Javascript-API
Densi Tensy
1
Dies ist die beste Lösung. Vielen Dank. Mandrill hat keinen freien Plan mehr und Mailgun unterstützt keine Cors und somit JavaScript
StallingOne
3
Hat dies nicht das gleiche Problem wie andere? Zugriffstoken (API-Schlüssel) wird
Greg Ennis
1
Sie haben ein tägliches Limit von 25 E-Mails pro Tag.
Archi
26

In diesem Beitrag finden Sie Informationen zur JavaScript-Funktion.

function getAjax() {
    try {
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            try {
                return new ActiveXObject('Msxml2.XMLHTTP');
            } catch (try_again) {
                return new ActiveXObject('Microsoft.XMLHTTP');
            }
        }
    } catch (fail) {
        return null;
    }
}

function sendMail(to, subject) {
     var rq = getAjax();

     if (rq) {
         // Success; attempt to use an Ajax request to a PHP script to send the e-mail
         try {
             rq.open('GET', 'sendmail.php?to=' + encodeURIComponent(to) + '&subject=' + encodeURIComponent(subject) + '&d=' + new Date().getTime().toString(), true);

             rq.onreadystatechange = function () {
                 if (this.readyState === 4) {
                     if (this.status >= 400) {
                         // The request failed; fall back to e-mail client
                         window.open('mailto:' + to + '?subject=' + encodeURIComponent(subject));
                     }
                 }
             };

             rq.send(null);
         } catch (fail) {
             // Failed to open the request; fall back to e-mail client
             window.open('mailto:' + to + '?subject=' + encodeURIComponent(subject));
         }
     } else {
         // Failed to create the request; fall back to e-mail client
         window.open('mailto:' + to + '?subject=' + encodeURIComponent(subject));
     }
}

Stellen Sie Ihr eigenes PHP-Skript (oder eine andere Sprache) zum Senden der E-Mail bereit.

Ry-
quelle
18

Ich bringe Ihnen die Neuigkeiten. Sie können keine E-Mail mit JavaScript per se senden.


Aufgrund des Kontextes der Frage des OP gilt meine obige Antwort nicht mehr, wie @KennyEvitt in den Kommentaren ausgeführt hat. Sie können anscheinend JavaScript als SMTP-Client verwenden .

Allerdings habe ich, digged nicht tiefer, um herauszufinden , ob es sicher und Cross-Browser - kompatibel genug. Daher kann ich Sie weder ermutigen noch entmutigen, es zu verwenden. Benutzung auf eigene Gefahr.

Shef
quelle
1
könnte mit Ajax oder sogar versteckten Iframes gemacht werden ... man weiß nie
Zebra
1
@danialentzri: JavaScript wird niemals das Mail-Relay sein, das habe ich mit "per se" gemeint .
Shef
Hoppla! Ich habe einen kleinen Monitor, der Ihnen die Wahrheit sagt, und er unterstützt keine Bildlaufleisten.
Zebra
@KennyEvitt von einem kurzen Blick, den ich nahm, scheint, dass Sie noch ein Mail-Relay benötigen. Das habe ich im Grunde in meiner Antwort gesagt.
Shef
@ Shef Was hast du auf deinem kurzen Blick gesehen? Ich kann keine Anforderung für etwas finden, das über die Anforderungen eines anderen E-Mail-Clients hinausgeht. Oder behaupten Sie beispielsweise, dass Microsoft Outlook auch keine E-Mails senden kann? Das ist technisch ein bisschen wahr, aber in keiner Weise, von der ich erwarten würde, dass es jemand anderes versteht.
Kenny Evitt
16

Ich weiß, dass ich viel zu spät bin, um eine Antwort auf diese Frage zu schreiben, aber ich denke trotzdem, dass dies für jeden nützlich sein wird, der daran denkt, E-Mails über Javascript zu versenden.

Der erste Weg, den ich vorschlagen würde, ist die Verwendung eines Rückrufs, um dies auf dem Server zu tun. Wenn Sie wirklich möchten, dass es mit Javascript gehandhabt wird, empfehle ich Folgendes.

Der einfachste Weg, den ich gefunden habe, war die Verwendung von smtpJs. Eine kostenlose Bibliothek, mit der Sie E-Mails senden können.

1. Schließen Sie das Skript wie unten ein

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

2. Sie können entweder eine solche E-Mail senden

Email.send({
    Host : "smtp.yourisp.com",
    Username : "username",
    Password : "password",
    To : '[email protected]',
    From : "[email protected]",
    Subject : "This is the subject",
    Body : "And this is the body"
    }).then(
      message => alert(message)
    );

Dies ist nicht ratsam, da Ihr Kennwort auf der Clientseite angezeigt wird. Auf diese Weise können Sie die folgenden Schritte ausführen, um Ihre SMTP-Anmeldeinformationen zu verschlüsseln, sie an eine einzelne Domäne zu sperren und stattdessen anstelle der Anmeldeinformationen ein sicheres Token zu übergeben.

Email.send({
    SecureToken : "C973D7AD-F097-4B95-91F4-40ABC5567812",
    To : '[email protected]',
    From : "[email protected]",
    Subject : "This is the subject",
    Body : "And this is the body"
}).then(
  message => alert(message)
);

Wenn Sie keinen SMTP-Server haben, verwenden Sie einen SMTP-Relay-Dienst wie Elastic Email

Hier finden Sie auch den Link zur offiziellen SmtpJS.com-Website, auf der Sie alle benötigten Beispiele und den Ort finden, an dem Sie Ihr sicheres Token erstellen können.

Ich hoffe, jemand findet diese Details hilfreich. Viel Spaß beim Codieren.

Pissu Pusa
quelle
3
Dadurch erhalten Dritte weiterhin uneingeschränkten Zugriff auf Ihren SMTP-Server, damit diese E-Mails für Sie weiterleiten können, im Austausch für… was?
Quentin
Das SecureToken ist nur für eine Domäne gültig, die Sie beim Erstellen angegeben haben. Daher funktioniert das Aufrufen der js von einer anderen Domäne nicht.
smoore4
8

Es scheint eine neue Lösung am Horizont zu geben. Es heißt EmailJS . Sie behaupten, dass kein Servercode benötigt wird. Sie können eine Einladung anfordern.

Update August 2016: EmailJS scheint bereits live zu sein. Sie können bis zu 200 E-Mails pro Monat kostenlos senden und es werden Abonnements für höhere Volumes angeboten.

Christiaan Westerbeek
quelle
Dies ist ein bisschen wie ein Penner, eine sehr hübsche Benutzeroberfläche, aber alle Dokumentationsbeispiele oder Hilfe. Vermeiden.
Skarsnik
Ich habe emailJS ausprobiert, aber es wird nur an meine E-Mail gesendet. Wie kann ich an eine andere E-Mail senden?
Maged Saeed
Dies ist spät, aber @MagedSaeed im Abschnitt E-Mail-Vorlagen. Wenn Sie eine Vorlage bearbeiten, können Sie die E-Mail "An" angeben. Sie können das Feld "An" sogar mithilfe der Vorlagenoption dynamisieren. Ihre Dokumente machen einen guten Job, indem sie es detailliert beschreiben.
Abagh0703
6

window.open ('mailto: [email protected]'); Wie oben wird die E-Mail-Adresse "[email protected]" nicht vor der Ernte durch Spambots geschützt. Ich bin ständig auf dieses Problem gestoßen.

var recipient="test";
var at = String.fromCharCode(64);
var dotcom="example.com";
var mail="mailto:";
window.open(mail+recipient+at+dotcom);
Windhund
quelle
4

Javascript ist clientseitig, Sie können keine E-Mails mit Javascript senden. Der Browser erkennt möglicherweise nur mailto:und startet Ihren Standard-Mail-Client.

der Böse
quelle
das würde erklären, warum ich keine Informationen darüber finden konnte. Danke dir!!
user906357
Das Gleiche ... Zukünftige APIs, die eine
unformatierte
Dies ist die genaueste Antwort! Alle anderen Antworten, die es möglich machen, verwenden irgendwo ein Back-End. Das OP sagte nur Javascript. Das heißt, bitte kein Back-End, auch wenn es sich um ein SAAS-Back-End handelt. Gute Antwort.
Dan Chase
4

sendMail()Fügen Sie in Ihrer Funktion Ihrem Backend einen Ajax-Aufruf hinzu, den Sie auf der Serverseite implementieren können.

Jeremy Huiskamp
quelle
4

function send() {
  setTimeout(function() {
    window.open("mailto:" + document.getElementById('email').value + "?subject=" + document.getElementById('subject').value + "&body=" + document.getElementById('message').value);
  }, 320);
}
input {
  text-align: center;
  border-top: none;
  border-right: none;
  border-left: none;
  height: 10vw;
  font-size: 2vw;
  width: 100vw;
}

textarea {
  text-align: center;
  border-top: none;
  border-right: none;
  border-left: none;
  border-radius: 5px;
  width: 100vw;
  height: 50vh;
  font-size: 2vw;
}

button {
  border: none;
  background-color: white;
  position: fixed;
  right: 5px;
  top: 5px;
  transition: transform .5s;
}

input:focus {
  outline: none;
  color: orange;
  border-radius: 3px;
}

textarea:focus {
  outline: none;
  color: orange;
  border-radius: 7px;
}

button:focus {
  outline: none;
  transform: scale(0);
  transform: rotate(360deg);
}
<!DOCTYPE html>
<html>

<head>
  <title>Send Email</title>
</head>

<body align=center>
  <input id="email" type="email" placeholder="[email protected]"></input><br><br>
  <input id="subject" placeholder="Subject"></input><br>
  <textarea id="message" placeholder="Message"></textarea><br>
  <button id="send" onclick="send()"><img src=https://www.dropbox.com/s/chxcszvnrdjh1zm/send.png?dl=1 width=50px height=50px></img></button>
</body>

</html>

Samuel Tees
quelle
Es wird ein E-Mail-Client verwendet, nicht direkt aus Javascript.
Weijing Jay Lin
2
Auch wenn es schön ist, ein vollständiges Beispiel zu haben, verwirrt das CSS die Dinge nur, da jeder das herausfiltern muss, um das Beispiel zu verstehen. Nichts für ungut.
Dan Chase
2

JavaScript kann keine E-Mails von einem Webbrowser senden. Wenn Sie jedoch von der Lösung zurücktreten, die Sie bereits zu implementieren versucht haben, können Sie etwas tun, das die ursprüngliche Anforderung erfüllt:

Senden Sie eine E-Mail, ohne die Seite zu aktualisieren

Sie können JavaScript verwenden, um die Werte zu erstellen, die die E-Mail benötigt, und dann eine AJAX-Anforderung an eine Serverressource senden, die die E-Mail tatsächlich sendet. (Ich weiß nicht, welche serverseitigen Sprachen / Technologien Sie verwenden, daher liegt dieser Teil bei Ihnen.)

Wenn Sie mit AJAX nicht vertraut sind, erhalten Sie durch eine schnelle Google-Suche viele Informationen. Im Allgemeinen können Sie es mit der $ .ajax () -Funktion von jQuery schnell zum Laufen bringen. Sie benötigen lediglich eine Seite auf dem Server, die in der Anforderung aufgerufen werden kann.

David
quelle
2

Es scheint, als ob eine Antwort darauf darin besteht, einen SMPT-Client zu implementieren. In email.js finden Sie eine JavaScript-Bibliothek mit einem SMTP-Client.

Hier ist das GitHub-Repo für den SMTP-Client. Basierend auf der README-Datei des Repos scheint es, dass je nach Client-Browser verschiedene Shims oder Polyfills erforderlich sein können, aber insgesamt scheint dies durchaus machbar (wenn nicht tatsächlich signifikant erreicht) zu sein, obwohl dies nicht einmal von einem vernünftigen Benutzer leicht zu beschreiben ist. lange Antwort hier.

Kenny Evitt
quelle
2

Es gibt einen Kombinationsservice. Sie können die oben aufgeführten Lösungen wie Mandrill mit einem Service EmailJS kombinieren, wodurch das System sicherer wird. Sie haben den Dienst jedoch noch nicht gestartet.

Santhosh Menon
quelle
2

Eine andere Möglichkeit, E-Mails von JavaScript aus zu senden, besteht darin, directtomx.com wie folgt zu verwenden.

 Email = {
 Send : function (to,from,subject,body,apikey)
    {
        if (apikey == undefined)
        {
            apikey = Email.apikey;
        }
        var nocache= Math.floor((Math.random() * 1000000) + 1);
        var strUrl = "http://directtomx.azurewebsites.net/mx.asmx/Send?";
        strUrl += "apikey=" + apikey;
        strUrl += "&from=" + from;
        strUrl += "&to=" + to;
        strUrl += "&subject=" + encodeURIComponent(subject);
        strUrl += "&body=" + encodeURIComponent(body);
        strUrl += "&cachebuster=" + nocache;
        Email.addScript(strUrl);
    },
    apikey : "",
    addScript : function(src){
            var s = document.createElement( 'link' );
            s.setAttribute( 'rel', 'stylesheet' );
            s.setAttribute( 'type', 'text/xml' );
            s.setAttribute( 'href', src);
            document.body.appendChild( s );
    }
};

Rufen Sie es dann von Ihrer Seite wie folgt auf;

 window.onload = function(){
    Email.apikey = "-- Your api key ---";
    Email.Send("[email protected]","[email protected]","Sent","Worked!");
 }
Fiach Reid
quelle
Um dies hinzuzufügen, besteht eine alternative Möglichkeit, vorausgesetzt, Sie haben Zugriff auf einen SMTP-Server, darin, dieses Skript unter smtpjs.com/smtp.js zu verwenden , das wie folgt aufgerufen wird. Email.send ("[email protected]", "[email protected]", "Subject", "Body.", "Smtp.yourisp.com", "username", "password"); - Siehe smtpjs.com
Fiach Reid
1
Kannst du HTML mit smtp.js senden?
Alejandro Corredor
@AlejandroCorredor - Ja, Sie können HTML-E-Mails über SMTPJS senden
Fiach Reid
2

Ich würde das mit der SMTPJ- Bibliothek tun. Sie bietet Verschlüsselung für Ihre Anmeldeinformationen wie Benutzername, Passwort usw.

Suhail Mumtaz Awan
quelle
1
Ich würde wirklich zögern, mein SMTP-Passwort einem winzigen kleinen Unternehmen zu geben, damit diese E-Mails über meinen Server gegen nichts anderes als mein Passwort senden können. Ich bezahle sie nicht. Sie haben keine starke Motivation, den Dienst am Laufen zu halten / meine Anmeldeinformationen wirklich zu schützen / meinen Server nicht für Spam zu verwenden.
Quentin
@ Quentin Ich habe verstanden, aber diese Bibliothek könnte eine Antwort auf die Frage sein.
Suhail Mumtaz Awan
2

Es gibt keine eindeutige Antwort auf Ihre Frage, da wir E-Mails nicht nur mit Javascript senden können, sondern es gibt Möglichkeiten, Javascript zum Senden von E-Mails für uns zu verwenden:

1) Verwenden einer API, um die API per Javascript an uns zu senden, um die E-Mail für uns zu senden. Https://www.emailjs.com sagt beispielsweise , dass Sie einen solchen Code verwenden können, um die API nach einigen Einstellungen aufzurufen:

var service_id = 'my_mandrill';
var template_id = 'feedback';
var template_params = {
name: 'John',
reply_email: '[email protected]',
message: 'This is awesome!'
};

emailjs.send(service_id,template_id,template_params);

2) Erstellen Sie einen Backend-Code, um eine E-Mail für Sie zu senden. Sie können jedes Backend-Framework verwenden, um dies für Sie zu tun.

3) mit etwas wie:

window.open('mailto:me@http://stackoverflow.com/');

Wenn Sie Ihre E-Mail-Anwendung öffnen, wird dies möglicherweise in einem blockierten Popup in Ihrem Browser angezeigt.

Im Allgemeinen ist das Senden einer E-Mail eine Serveraufgabe, sollte also in Backend-Sprachen erfolgen. Wir können jedoch Javascript verwenden, um die benötigten Daten zu sammeln und an den Server oder die API zu senden. Außerdem können wir die Anwendung für dritte Paritäten verwenden und sie öffnen über den Browser mit Javascript wie oben erwähnt.

Alireza
quelle
5
Betreff (1): Ich würde mein SMTP-Passwort nur sehr ungern an eine kleine Firma weitergeben, damit diese E-Mails über meinen Server gegen nichts anderes als mein Passwort senden kann. Ich bezahle sie nicht. Sie haben keine starke Motivation, den Dienst am Laufen zu halten / meine Anmeldeinformationen wirklich zu schützen / meinen Server nicht für Spam zu verwenden.
Quentin
0

Die kurze Antwort lautet, dass Sie dies nicht allein mit JavaScript tun können. Sie benötigen einen serverseitigen Handler, um eine Verbindung zum SMTP-Server herzustellen und die E-Mails tatsächlich zu senden. Es sind viele einfache Mail-Skripte online, wie dieses für PHP:

Verwenden Sie Ajax , um eine Anfrage an das PHP-Skript zu senden. Überprüfen Sie mithilfe von js, ob das erforderliche Feld nicht leer oder falsch ist. Führen Sie außerdem eine Aufzeichnung der von wem von Ihrem Server gesendeten E-Mails.

function sendMail() is good for doing that.

Suchen Sie in Ihrem Skript nach Fehlern, die beim Versenden aufgetreten sind, und ergreifen Sie die entsprechenden Maßnahmen.
Um das Problem zu beheben, wenn beispielsweise die E-Mail-Adresse falsch ist oder die E-Mail aufgrund eines Serverproblems nicht gesendet wird oder sich in einem solchen Zustand in der Warteschlange befindet, melden Sie dies sofort dem Benutzer und verhindern Sie, dass dieselbe E-Mail immer wieder mehrfach gesendet wird. Erhalten Sie eine Antwort von Ihrem Skript mit jQuery GET und POST

$ .get (URL, Rückruf); $ .post (URL, Rückruf);

P. BANERJEE
quelle
-1

Da dies alles wundervolle Infos sind, gibt es eine kleine API namens Mandrill , um Mails aus Javascript zu versenden, und sie funktioniert perfekt. Sie können es versuchen. Hier ist ein kleines Tutorial für den Start.

Sercan Ozdemir
quelle
-5

Senden Sie eine E-Mail mit JavaScript oder jQuery

var ConvertedFileStream;
var g_recipient;
var g_subject;
var g_body;
var g_attachmentname;


function SendMailItem(p_recipient, p_subject, p_body, p_file, p_attachmentname, progressSymbol) {

    // Email address of the recipient 
    g_recipient = p_recipient;

   // Subject line of an email
    g_subject = p_subject;

   // Body description of an email
    g_body = p_body;

    // attachments of an email
    g_attachmentname = p_attachmentname;

    SendC360Email(g_recipient, g_subject, g_body, g_attachmentname);

}

function SendC360Email(g_recipient, g_subject, g_body, g_attachmentname) {
    var flag = confirm('Would you like continue with email');
    if (flag == true) {

        try {
            //p_file = g_attachmentname;
            //var FileExtension = p_file.substring(p_file.lastIndexOf(".") + 1);
           // FileExtension = FileExtension.toUpperCase();
            //alert(FileExtension);
            SendMailHere = true;

            //if (FileExtension != "PDF") {

            //    if (confirm('Convert to PDF?')) {
            //        SendMailHere = false;                    
            //    }

            //}
            if (SendMailHere) {
                var objO = new ActiveXObject('Outlook.Application');

                var objNS = objO.GetNameSpace('MAPI');

                var mItm = objO.CreateItem(0);

                if (g_recipient.length > 0) {
                    mItm.To = g_recipient;
                }

                mItm.Subject = g_subject;

                // if there is only one attachment                 
                // p_file = g_attachmentname;
                // mAts.add(p_file, 1, g_body.length + 1, g_attachmentname);

                // If there are multiple attachment files
                //Split the  files names
                var arrFileName = g_attachmentname.split(";");
                 // alert(g_attachmentname);
                //alert(arrFileName.length);
                var mAts = mItm.Attachments;

                for (var i = 0; i < arrFileName.length; i++)
                {
                    //alert(arrFileName[i]);
                    p_file = arrFileName[i];
                    if (p_file.length > 0)
                    {                     
                        //mAts.add(p_file, 1, g_body.length + 1, g_attachmentname);
                        mAts.add(p_file, i, g_body.length + 1, p_file);

                    }
                }

                mItm.Display();

                mItm.Body = g_body;

                mItm.GetInspector.WindowState = 2;

            }
            //hideProgressDiv();

        } catch (e) {
            //debugger;
            //hideProgressDiv();
            alert('Unable to send email.  Please check the following: \n' +
                    '1. Microsoft Outlook is installed.\n' +
                    '2. In IE the SharePoint Site is trusted.\n' +
                    '3. In IE the setting for Initialize and Script ActiveX controls not marked as safe is Enabled in the Trusted zone.');
        }
    }
  }
Anil Rathod
quelle
3
Bitte erläutern Sie, wie dieser Code die Frage beantwortet.
JAL
Es sieht so aus, als würde dies ActiveX verwenden und funktioniert nur im IE auf einem PC mit installiertem Outlookvar objO = new ActiveXObject('Outlook.Application');
Chic