Как отправить письмо из JavaScript

245

Я хочу, чтобы на моем сайте была возможность отправлять электронные письма без обновления страницы. Поэтому я хочу использовать 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...    */
}
user906357
источник
7
Используйте язык серверной части, чтобы фактически отправить электронное письмо, и AJAX, чтобы выглядеть и чувствовать, что вы хотите.
Shadow Wizard - это ухо для тебя
1
Это может быть немного поздно, но это может вам помочь: stackoverflow.com/questions/271171/…
PatrickMelia
2
Пользователи Gmail могут иметь его, см developers.google.com/gmail/api
Densi Tensy
Как упоминалось ниже, вы также можете взглянуть на EmailJS , который позволяет отправлять электронную почту с использованием предварительно созданных шаблонов непосредственно из Javascript, а также поддерживает динамические параметры, вложения, капчу, REST API и многое другое. Мы также предлагаем бесплатный уровень для начала [раскрытие - я один из создателей]
Саша
Обратите внимание, что если вы используете принятый ответ, электронное письмо будет приходить из учетной записи пользователя. Чтобы отправить электронное письмо из вашей личной или служебной учетной записи, правильным способом является использование javascript для отправки электронной почты через ваш собственный сервер или стороннюю службу, такую ​​как Byteline . Более подробно в этом ответе ниже.
Дсбайна

Ответы:

312

Вы не можете отправить электронное письмо напрямую с помощью JavaScript.

Однако вы можете открыть почтовый клиент пользователя:

window.open('mailto:test@example.com');

Есть также некоторые параметры для предварительного заполнения предмета и тела:

window.open('mailto:test@example.com?subject=subject&body=body');

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

Арно Ле Блан
источник
3
Если программа, открывающая страницу, уже имеет функции почтового клиента ... (например, Opera 12.50), она открывает ссылку как обычный URL-адрес. Это также Thunderbird, который имеет движок Firefox Gecko: он может открывать веб-страницы из гиперссылок в электронных письмах в виде новых вкладок.
user2284570
11
Просто заметку, которую вы также можете использовать window.location.href(как в этом ответе: stackoverflow.com/questions/271171/… ), чтобы открыть почтовый клиент, и он не оставляет это пустое окно, когда пользователь заканчивает работу с электронной почтой.
невежественный
1
Являются ли subjectи bodyпеременные или они фактический текст, который будет в полях?
Эдвард Карак,
3
этот ответ действительно не отвечает на вопрос, но ответ @ rahulroy хороший
Медет Тлеукабилулы
4
Я бы сделал еще один шаг и сделал бы, window.open( String( 'mailto:recipient^example.com' ).replace('^', '@') );чтобы запутать спам-ботов
Павел Лебедев
94

Переадресация через ваш сервер - вызов стороннего API - безопасный и рекомендуемый


Ваш сервер может вызывать сторонний API после надлежащей аутентификации и авторизации. Ключи API не предоставляются клиенту.

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: 'noreply@yourdomain.com',
            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 );

});

а затем используйте $ .ajax на клиенте для вызова вашего почтового API.


Напрямую от клиента - вызов стороннего API - не рекомендуется


Отправить письмо, используя только JavaScript

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

Как это -

function sendMail() {
    $.ajax({
      type: 'POST',
      url: 'https://mandrillapp.com/api/1.0/messages/send.json',
      data: {
        'key': 'YOUR API KEY HERE',
        'message': {
          'from_email': 'YOUR@EMAIL.HERE',
          'to': [
              {
                'email': 'RECIPIENT@EMAIL.HERE',
                '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

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

rahulroy9202
источник
8
Несмотря на то, что в статье говорится об этом, я чувствую, что здесь также следует сказать, что, хотя это будет работать, есть некоторые проблемы с безопасностью, так как вам также необходимо отправить свой ключ API клиенту. этим можно злоупотреблять.
canthutchthis
35

Я не мог найти ответ, который действительно удовлетворил первоначальный вопрос.

  • Mandrill нежелателен в связи с новой ценовой политикой, плюс для этого требуется бэкэнд-сервис, если вы хотите сохранить свои учетные данные в безопасности.
  • Часто предпочтительнее скрыть свою электронную почту, чтобы не попасть в списки (решение mailto выявляет эту проблему и неудобно для большинства пользователей).
  • Это хлопотно, чтобы настроить sendMail или вообще требовать бэкэнда только для отправки электронного письма.

Я собрал простой бесплатный сервис, который позволяет вам сделать стандартный HTTP-запрос POST для отправки электронной почты. Он называется PostMail , и вы можете просто опубликовать форму, использовать Javascript или jQuery. Когда вы регистрируетесь, он предоставляет вам код, который вы можете скопировать и вставить на свой сайт. Вот некоторые примеры:

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>

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

user949286
источник
Я искал это решение, спасибо за ответ, но мне интересно, как я могу добавить еще одно текстовое поле в HTML-форму, потому что всякий раз, когда я пытаюсь изменить код, чтобы добавить еще одно текстовое поле для какой-либо другой информации, код останавливается работает. Знаете ли вы какое-либо решение для этого.
Суман
Пользователи Gmail могут фактически делать то , что вы хотите - смотрите developers.google.com/gmail/api , поэтому , возможно , некоторые другие производители электронной почты имеют свой Javascript API
Densi Tensy
1
Это лучшее решение. Большое спасибо. Mandrill не имеет свободный план больше и mailgun не поддерживает CORS и таким образом JavaScript
stallingOne
3
Разве это не та же проблема, что и у других? Открыт токен доступа (ключ API)
Грег Эннис,
1
У них есть дневной лимит в 25 писем в день.
Арчи
26

Вы можете найти, что поместить в функцию JavaScript в этом посте.

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

Предоставьте свой собственный скрипт PHP (или любой другой язык) для отправки электронной почты.

Ry-
источник
18

Я сообщаю вам новости. Вы НЕ МОЖЕТЕ отправить электронное письмо с JavaScript как таковым.


Исходя из контекста вопроса ОП, мой ответ выше не соответствует действительности, на что указал @KennyEvitt в комментариях. Похоже, вы можете использовать JavaScript в качестве SMTP-клиента .

Тем не менее , я не стал копаться глубже, чтобы выяснить, достаточно ли он безопасен и кроссбраузерен. Так что я не могу ни поощрять, ни отговаривать вас использовать его. Используйте на свой риск.

Shef
источник
1
может быть сделано с помощью AJAX или даже скрытых фреймов ... вы никогда не знаете
Зебра
1
@danialentzri: JavaScript никогда не будет ретранслятором почты, это я и имел в виду под «per se» .
Shef
упс! У меня есть маленький монитор, чтобы сказать вам правду, и он не поддерживает полосы прокрутки.
Зебра
@KennyEvitt с первого взгляда, который я взял, похоже, вам все еще нужна пересылка почты. Это в основном то, что я сказал в своем ответе.
Shef
@Shef Что ты видел в своем быстром взгляде? Я не могу найти требования для чего-либо кроме того, что требует любой другой почтовый клиент. Или вы утверждаете, что, например, Microsoft Outlook также не может отправлять электронную почту? Это технически верно, но ни в каком смысле я бы не ожидал, что кто-нибудь еще поймет.
Кенни Эвитт
16

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

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

Самым простым способом, который я нашел, было использование smtpJs. Бесплатная библиотека, которую можно использовать для отправки писем.

1. Включите скрипт, как показано ниже

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

2. Вы можете отправить электронное письмо, как это

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

Что нежелательно, так как он будет отображать ваш пароль на стороне клиента. Таким образом, вы можете сделать следующее, зашифровав свои учетные данные SMTP и заблокировав их в одном домене, и вместо этого передайте безопасный токен вместо учетных данных.

Email.send({
    SecureToken : "C973D7AD-F097-4B95-91F4-40ABC5567812",
    To : 'them@website.com',
    From : "you@isp.com",
    Subject : "This is the subject",
    Body : "And this is the body"
}).then(
  message => alert(message)
);

Наконец, если у вас нет SMTP-сервера, вы используете службу SMTP-ретрансляции, такую ​​как Elastic Email

Также здесь есть ссылка на официальный сайт SmtpJS.com, где вы можете найти все примеры, которые вам нужны, и место, где вы можете создать свой безопасный токен.

Я надеюсь, что кто-то найдет эти детали полезными. Удачного кодирования.

Писсу Пуса
источник
3
Это по-прежнему дает полный доступ к вашему SMTP-серверу третьей стороне, чтобы они могли передавать вам почту в обмен на ... что?
Квентин,
SecureToken действителен только для домена, который вы указываете при его создании, поэтому вызов js из другого домена не будет работать.
smoore4
8

Кажется, на горизонте новое решение. Это называется EmailJS . Они утверждают, что код сервера не требуется. Вы можете запросить приглашение.

Обновление август 2016: EmailJS, кажется, уже в живых. Вы можете отправлять до 200 электронных писем в месяц бесплатно, и он предлагает подписку на большие объемы.

Кристиан Вестербик
источник
Это немного глупо, очень симпатичный интерфейс, но в нем есть все примеры документации или помощь. Избегайте.
Скарсник
Я попробовал emailJS, но он отправляет только на мою электронную почту. Как я могу отправить на любой другой адрес электронной почты?
Магед Саид
Это поздно, но @MagedSaeed в разделе шаблонов электронной почты, при редактировании шаблона вы можете указать адрес электронной почты «Кому». Вы даже можете сделать поле «Кому» динамическим, используя их шаблонную опцию. Их документы делают хорошую работу, детализируя это.
abagh0703
6

window.open ( 'электронной почты: test@example.com'); как указано выше, ничего не скрывает спам-боты от адреса электронной почты «test@example.com». Я привык постоянно сталкиваться с этой проблемой.

var recipient="test";
var at = String.fromCharCode(64);
var dotcom="example.com";
var mail="mailto:";
window.open(mail+recipient+at+dotcom);
борзая
источник
4

Javascript на стороне клиента, вы не можете по электронной почте с Javascript. Браузер распознает, может быть, только mailto:и запускает почтовый клиент по умолчанию.

evilone
источник
это объяснило бы, почему я не мог найти информацию об этом. Спасибо!!
user906357
То же самое ... Будущий API, который мог бы разрешить необработанное соединение с портом, идет ...
user2284570
Это самый точный ответ! Все остальные ответы, которые делают это возможным, используют где-то серверную часть. ОП сказал только Javascript. То есть, пожалуйста, не бэкэнд, даже если это бэкэнд SAAS. Отличный ответ.
Дэн Чейз
4

В вашей sendMail()функции добавьте ajax-вызов в ваш бэкэнд, где вы можете реализовать это на стороне сервера.

Джереми Хуискамп
источник
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="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>

Сэмюэл Тис
источник
Он использует почтовый клиент, а не напрямую из javascript.
Вейкин Джей Лин
2
Кроме того, хотя хорошо иметь полный пример, CSS просто запутывает вещи, так как каждый должен отфильтровать это, чтобы понять пример. Без обид.
Дэн Чейз
2

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

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

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

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

Дэвид
источник
2

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

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

Кенни Эвитт
источник
2

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

Сантош Менон
источник
2

Еще один способ отправки электронной почты из 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!");
 }
Фиах Рейд
источник
Чтобы добавить к этому, альтернативный способ, при условии, что у вас есть доступ к SMTP-серверу, состоит в том, чтобы использовать этот сценарий по адресу smtpjs.com/smtp.js , который называется следующим образом; Email.send («from@you.com», «to@them.com», «Subject», «Body», «smtp.yourisp.com», «username», «password»); - См smtpjs.com
Fiach Reid
1
Вы можете отправить HTML, используя smtp.js?
Алехандро Корредор
@AlejandroCorredor - Да, вы можете отправлять электронные письма в формате HTML через SMTPJS
Fiach Reid
2

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

Сухай Мумтаз Аван
источник
1
Я бы очень неохотно передавал свой пароль SMTP крошечной маленькой компании, чтобы они могли отправлять электронные письма, используя мой сервер, в обмен только на мой пароль. Я не плачу им. У них нет сильной мотивации поддерживать службу в рабочем состоянии / действительно защищать мои учетные данные / не использовать мой сервер для своей рассылки спама.
Квентин
@Quentin я понял, но эта библиотека может быть ответом на вопрос.
Сухайль Мумтаз Аван
2

На ваш вопрос нет однозначного ответа, так как мы не можем отправлять электронную почту только с использованием 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, как указано выше.

Алиреза
источник
5
Re (1): Я бы очень неохотно передавал свой пароль SMTP крошечной маленькой компании, чтобы они могли отправлять электронные письма, используя мой сервер, в обмен только на мой пароль. Я не плачу им. У них нет сильной мотивации поддерживать службу в рабочем состоянии / действительно защищать мои учетные данные / не использовать мой сервер для своей рассылки спама.
Квентин
0

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

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

function sendMail() is good for doing that.

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

$ .Get (URL, вызов); $ .Post (URL, вызов);

П. БАНЕРДЖИ
источник
-1

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

Серкан Оздемир
источник
-5

Отправьте электронное письмо, используя 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.');
        }
    }
  }
Анил Ратод
источник
3
Пожалуйста, опишите, как этот код отвечает на вопрос.
JAL
Похоже, что это использует ActiveX и работает только в IE на ПК с установленным Outlookvar objO = new ActiveXObject('Outlook.Application');
Chic