javascript send - Come inviare una email da JavaScript




10 Answers

Non puoi inviare un'email direttamente con javascript.

Tuttavia, puoi aprire il client di posta dell'utente:

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

Ci sono anche alcuni parametri per pre-riempire il soggetto e il corpo:

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

Un'altra soluzione potrebbe essere quella di effettuare una chiamata ajax al server, in modo che il server invii l'e-mail. Fai attenzione a non consentire a nessuno di inviare email tramite il tuo server.

from js

Desidero che il mio sito Web abbia la possibilità di inviare un'email senza aggiornare la pagina. Quindi voglio usare Javascript.

<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" />

Ecco come voglio chiamare la funzione, ma non sono sicuro di cosa mettere nella funzione javascript. Dalla ricerca che ho fatto ho trovato un esempio che utilizza il metodo mailto, ma la mia comprensione è che in realtà non invia direttamente dal sito.

Quindi la mia domanda è dove posso trovare cosa mettere dentro la funzione JavaScript per inviare una mail direttamente dal sito.

function sendMail() {
    /* ...code here...    */
}



Puoi trovare cosa mettere dentro la funzione JavaScript in questo post.

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));
     }
}

Fornire il proprio script PHP (o qualsiasi altra lingua) per inviare l'e-mail.




Vi sto comunicando la notizia. NON è POSSIBILE inviare una e-mail con JavaScript di per sé.

In base al contesto della domanda dell'OP, la mia risposta sopra non è più valida come sottolineato da @KennyEvitt nei commenti. Sembra che tu possa usare JavaScript come client SMTP .

Tuttavia , non ho scavato più a fondo per scoprire se è abbastanza sicuro e compatibile cross-browser. Quindi, non posso né incoraggiare né scoraggiarti a usarlo. Utilizzare a proprio rischio.




window.open ( 'mailto: [email protected]'); come sopra non fa nulla per nascondere l'indirizzo email "[email protected]" da essere raccolto da spambots. Mi sono sempre imbattuto in questo problema.

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



Sembra che una "risposta" a questo sia implementare un client SMPT. Vedi email.js per una libreria JavaScript con un client SMTP.

Ecco il repository GitHub per il client SMTP. Sulla base del README del repository, sembra che potrebbero essere necessari vari shim o polyfill a seconda del browser client, ma nel complesso sembra certamente fattibile (se non addirittura realizzato in modo significativo), ma non in un modo che sia facilmente descrivibile anche da un ragionevole lunga risposta qui.




JavaScript non può inviare email da un browser web. Tuttavia, uscendo dalla soluzione che hai già provato ad implementare, puoi fare qualcosa che soddisfi i requisiti originali:

invia un'email senza aggiornare la pagina

È possibile utilizzare JavaScript per costruire i valori necessari all'e-mail e quindi effettuare una richiesta AJAX a una risorsa server che effettivamente invia l'e-mail. (Non so quali lingue / tecnologie sul lato server stai usando, quindi la parte dipende da te.)

Se non hai familiarità con AJAX, una rapida ricerca su Google ti darà molte informazioni. Generalmente puoi farlo funzionare rapidamente con la funzione $ .ajax () di jQuery. Hai solo bisogno di avere una pagina sul server che può essere chiamata nella richiesta.




Un altro modo per inviare email da JavaScript è utilizzare directtomx.com come segue;

 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 );
    }
};

Quindi chiamalo dalla tua pagina come segue;

 window.onload = function(){
    Email.apikey = "-- Your api key ---";
    Email.Send("[email protected]","[email protected]","Sent","Worked!");
 }



Lo farei con la libreria SMTPJs . Offre crittografia alle tue credenziali come username, password, ecc.




La risposta breve è che non puoi farlo usando JavaScript da solo. Avresti bisogno di un gestore lato server per connettersi con il server SMTP per inviare effettivamente la posta. Ci sono molti semplici script di posta online, come questo per PHP:

Usa Ajax per inviare una richiesta allo script PHP, controlla che il campo richiesto non sia vuoto o errato usando js tieni anche un record di posta inviata da chi dal tuo server.

function sendMail() is good for doing that.

Controlla eventuali errori rilevati durante la spedizione dal tuo script e intraprendi le azioni appropriate.
Per risolverlo, ad esempio, se l'indirizzo di posta elettronica è errato o se la posta non viene inviata a causa di un problema del server o è in coda in tali condizioni, segnalarla immediatamente all'utente e impedire più invio di stessa e-mail ripetutamente. Ottieni risposta dal tuo script Usando jQuery GET e POST

$ .get (URL, callback); $ .post (URL, callback);




Invia una email utilizzando JavaScript o 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.');
        }
    }
  }



Related