Как отправить письмо из JavaScript - PullRequest
206 голосов
/ 12 сентября 2011

Я хочу, чтобы на моем веб-сайте была возможность отправлять электронные письма без обновления страницы.Поэтому я хочу использовать 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" />

Вот как я хочу вызвать функцию, но я не уверен, что поместить в функцию javascript.Из проведенного мною исследования я нашел пример, в котором используется метод mailto, но, насколько я понимаю, на самом деле он не отправляется напрямую с сайта.

Итак, мой вопрос: где я могу найти, что добавить в функцию JavaScript, чтобы отправить электронное письмо прямо с сайта?

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

Ответы [ 20 ]

3 голосов
/ 26 апреля 2017

Нет прямого ответа на ваш вопрос, так как мы не можем отправлять электронную почту только с использованием javascript, но есть способы использовать javascript для отправки нам электронных писем:

1) с помощью API для вызова и вызоваAPI через javascript для отправки нам электронного письма, например, https://www.emailjs.com говорит, что вы можете использовать такой код ниже, чтобы вызвать их API после некоторой настройки:

var service_id = 'my_mandrill';
var template_id = 'feedback';
var template_params = {
name: 'John',
reply_email: 'john@doe.com',
message: 'This is awesome!'
};

emailjs.send(service_id,template_id,template_params);

2) создать бэкэнд-кодчтобы отправить электронное письмо для вас, вы можете использовать любую внутреннюю платформу, чтобы сделать это для вас.

3) используя что-то вроде:

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

, которое откроет ваше почтовое приложение, это может попасть в заблокированное всплывающее окно в вашем браузере.

В общем, отправка электронного письмаэто задача сервера, поэтому ее следует выполнять на языках бэкэнда, но мы можем использовать javascript для сбора необходимых данных и отправки их на сервер или API, также мы можем использовать приложение третьих сторон и открывать их через браузер, используя javascript какупомянутый выше.

2 голосов
/ 30 сентября 2015

Еще один способ отправки электронной почты из JavaScript - использовать directtomx.com следующим образом;

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

Затем вызвать его со своей страницы следующим образом:

 window.onload = function(){
    Email.apikey = "-- Your api key ---";
    Email.Send("to@domain.com","from@domain.com","Sent","Worked!");
 }
2 голосов
/ 20 мая 2015

Есть комбинированный сервис.Вы можете объединить перечисленные выше решения, такие как mandrill, с сервисом EmailJS, который может сделать систему более безопасной.Они еще не начали службу, хотя.

2 голосов
/ 08 ноября 2014

Похоже, что одним из «ответов» на это является реализация SMPT-клиента. См. email.js для библиотеки JavaScript с SMTP-клиентом.

Вот репозиторий GitHub для SMTP-клиента. Основываясь на README репо, кажется, что в зависимости от браузера клиента могут потребоваться различные прокладки или полифилы, но в целом это, безусловно, представляется возможным (если на самом деле не выполнено значительно), хотя это не так легко описать даже разумно длинный ответ здесь.

2 голосов
/ 12 сентября 2011

JavaScript не может отправлять электронную почту из веб-браузера. Однако, отступая от решения, которое вы уже пытались реализовать, вы можете сделать что-то, что соответствует первоначальному требованию:

отправить письмо без обновления страницы

Вы можете использовать JavaScript, чтобы создать значения, которые понадобятся электронной почте, а затем сделать запрос AJAX на ресурс сервера, который фактически отправляет электронную почту. (Я не знаю, какие серверные языки / технологии вы используете, так что эта часть зависит от вас.)

Если вы не знакомы с AJAX, быстрый поиск в Google даст вам много информации. Как правило, вы можете быстро его запустить и запустить с помощью функции jQuery $ .ajax (). Вам просто нужна страница на сервере, которую можно вызвать в запросе.

1 голос
/ 16 июля 2016

Я бы сделал это с SMTPJs библиотекой. Он предлагает шифрование ваших учетных данных, таких как имя пользователя, пароль и т. Д.

0 голосов
/ 29 апреля 2017

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="yourfreind@something.somthing"></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>
0 голосов
/ 05 февраля 2016

Отправить письмо с помощью JavaScript или 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.');
        }
    }
  }
0 голосов
/ 09 октября 2014

Поскольку это все замечательная информация, есть небольшой API под названием Mandrill для отправки писем из javascript, и он отлично работает. Вы можете дать ему шанс. Вот маленький учебник для начала.

0 голосов
/ 13 июля 2014

Короткий ответ: вы не можете сделать это, используя только JavaScript.Вам понадобится серверный обработчик для соединения с SMTP-сервером для фактической отправки почты.В сети есть много простых почтовых сценариев, таких как этот для PHP:

Используйте Ajax для отправки запроса в сценарий PHP, проверьте, что обязательные поля не пусты или неправильны с помощью js, также сохранитезапись почты, отправленной кем с вашего сервера.

function sendMail() is good for doing that.

Проверьте наличие ошибок, обнаруженных при отправке по почте из вашего скрипта, и примите соответствующие меры.
Для устранения, например, если почтовый адрес неверный или почта не отправлена ​​из-за проблемы с сервером или находится вочередь в таком состоянии немедленно сообщает об этом пользователю и предотвращает многократную отправку одного и того же сообщения снова и сноваПолучить ответ от вашего скрипта Используя jQuery GET и POST

$. Get (URL, callback);$ .post (URL, обратный вызов);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...