Как отправить электронное письмо из JavaScript

Я хочу, чтобы на моем веб-сайте была возможность отправлять электронные письма без обновления страницы. Так что я хочу использовать Javascript.

   Введите адрес электронной почты друга:    

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

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

  function sendMail (  ) {/* ... здесь код ... */}  

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

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

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

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

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

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


Непрямое через Ваш сервер — вызов стороннего API — безопасный и рекомендуемый


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

node.js — https://www.npmjs.org/package/node-mandrill

  const mandrill = require ('node-mandrill') ('');  функция sendEmail (_name, _email, _subject, _message) {mandrill ('/messages/send', {message: {to: [{email: _email, name: _name}], from_email: 'noreply@yourdomain.com', тема  : _subject, text: _message}}, function (error, response) {if (error) console.log (error); else console.log (response);});}//определяем ваш собственный API электронной почты, который указывает на ваш  server.app.post ('/api/sendemail/', function (req, res) {let _name = req.body.name; let _email = req.body.email; let _subject = req.body.subject; let _messsage  = req.body.message;//реализуем вашу защиту от спама или проверяем. sendEmail (_name, _email, _subject, _message);});  

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


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


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

вкратце:

  1. зарегистрируйтесь в Mandrill, чтобы получить ключ API
  2. загрузить jQuery
  3. использовать $. ajax для отправки электронного письма

Вот так —

  function sendMail () {$ .ajax ({type: 'POST'  , url: 'https://mandrillapp.com/api/1.0/messages/send.json', data: {'key': 'ВАШ КЛЮЧ API ЗДЕСЬ', 'message': {'from_email': 'ВАШ @ EMAIL  .HERE ',' to ': [{' email ':' RECIPIENT@EMAIL.HERE ',' name ':' ИМЯ ПОЛУЧАТЕЛЯ (НЕОБЯЗАТЕЛЬНО) ',' type ':' to '}],' autotext ':' true  ',' subject ':' ВАША ТЕМА ЗДЕСЬ! ',' html ':' СОДЕРЖАНИЕ ВАШЕЙ ПОЧТЫ ЗДЕСЬ! ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ HTML! '}}}). done (function (response) {console.log (response);// если вам нравится такая штука});}  

https://medium.com/design-startups/b53319616782

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

1


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

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

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

Javascript:

        //обновить его с помощью селектора js_form var form_id_js = "javascript_form";  var data_js = {"access_token": "{ваш токен доступа}"//отправляется после регистрации};  function js_onSuccess () {//удалите это, чтобы избежать перенаправления window.location = window.location.pathname + "? message = Email + Successfully + Sent% 21 & isError = 0";  } function js_onError (error) {//удалите это, чтобы избежать перенаправления window.location = window.location.pathname + "? message = Email + could + not + be + send. & isError = 1";  } var sendButton = document.getElementById ("js_send");  function js_send () {sendButton.value = 'Отправка…';  sendButton.disabled = true;  var request = new XMLHttpRequest ();  запрос. onreadystatechange = функция () {если (request.readyState == 4 && request.status == 200) {js_onSuccess ();  } иначе, если (request.readyState == 4) {js_onError (request.response);  }};  var subject = document.querySelector ("#" + form_id_js + "[name = 'subject']"). значение;  var message = document.querySelector ("#" + form_id_js + "[name = 'text']"). value;  data_js ['тема'] = тема;  data_js ['текст'] = сообщение;  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 (параметры);  вернуть ложь;  } sendButton.onclick = js_send;  функция toParams (data_js) {var form_data = [];  for (ключ var в 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 ();});   

jQuery:

        //обновите это с помощью селектора $ form var form_id = "jquery_form";  var data = {"access_token": "{ваш токен доступа}"//отправляется после регистрации};  function onSuccess () {//удалите это, чтобы избежать перенаправления window.location = window.location.pathname + "? message = Email + Successfully + Sent% 21 & isError = 0";  } function onError (error) {//удалите это, чтобы избежать перенаправления window.location = window.location.pathname + "? message = Email + could + not + be + отправлено. & isError = 1";  } var sendButton = $ ("#" + form_id + "[name = 'send']");  функция send () {sendButton.val ('Отправка…');  sendButton.prop ('отключено', истина);  var subject = $ ("#" + form_id + "[name = 'subject']"). val ();  var message = $ ("#" + form_id + "[имя = 'текст']"). val ();  данные ['тема'] = субъект;  данные ['текст'] = сообщение;  $ .post ('https://postmail.invotes.com/send', data, onSuccess) .fail (onError);  вернуть ложь;  } sendButton.on («щелкнуть», отправить);  var $ form = $ ("#" + form_id);  $ form.submit (function (event) {event.preventDefault ();});   

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

11


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

  function getAjax () {try {if (window.XMLHttpRequest) {return new XMLHttpRequest ();  } else if (window.ActiveXObject) {попробуйте {вернуть новый ActiveXObject ('Msxml2.XMLHTTP');  } catch (try_again) {вернуть новый объект ActiveXObject ('Microsoft.XMLHTTP');  }}} catch (сбой) {return null;  }} функция sendMail (to, subject) {var rq = getAjax ();  if (rq) {//Успех;  попытаться использовать запрос Ajax к сценарию PHP для отправки электронной почты попробуйте {rq.open ('GET', 'sendmail.php? to =' + encodeURIComponent (to) + '& subject =' + encodeURIComponent (subject) +  '& d =' + новая дата (). getTime (). toString (), истина);  rq.onreadystatechange = function () {if (this.readyState === 4) {if (this.status> = 400) {//Запрос не выполнен;  вернуться к почтовому клиенту window.open ('mailto:' + to + '? subject =' + encodeURIComponent (subject));  }}};  rq.send (ноль);  } catch (fail) {//Не удалось открыть запрос;  вернуться к почтовому клиенту window.open ('mailto:' + to + '? subject =' + encodeURIComponent (subject));  }} else {//Не удалось создать запрос;  вернуться к почтовому клиенту window.open ('mailto:' + to + '? subject =' + encodeURIComponent (subject));  }}  

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


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

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

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

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

     

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

  Email.send ({Host: "smtp  .yourisp.com ", Имя пользователя:" имя пользователя ", Пароль:" пароль ", Кому: 'them@website.com', От:" you@isp.com ", Тема:" Это тема ", Текст:"  И это тело "}). Then (message => alert (message));  

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

  Email.send ({SecureToken: "C973D7AD-F097-4B95-91F4-40ABC5567812", Кому: 'them@website.com', От  : "you@isp.com", Тема: "Это тема", Body: "А это тело"}). then (message => alert (message));  

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

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

Надеюсь, кому-то эти подробности пригодятся. Удачного кодирования.

4


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


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

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

5


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

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

3


window.open (‘mailto: test@example.com’); как и выше, ничто не скрывает адрес электронной почты test@example.com от спам-ботов. Раньше я постоянно сталкивался с этой проблемой.

  var recipient = "test"; var at = String.fromCharCode (64); var dotcom = "example.com"; var  mail = "mailto:"; window.open (почта + получатель + at + dotcom);  


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


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

3


  function send () {setTimeout (function () {window.open ("mailto:" + document.getElementById ('email'). value + "? subject =" + document  .getElementById ('тема'). значение + "& body =" + document.getElementById ('сообщение'). значение);  }, 320);}  
  input {text-align: center;  граница-верх: нет;  граница справа: нет;  граница слева: нет;  высота: 10vw;  размер шрифта: 2vw;  ширина: 100vw;} текстовое поле {выравнивание текста: центр;  граница-верх: нет;  граница справа: нет;  граница слева: нет;  радиус границы: 5 пикселей;  ширина: 100ввт;  высота: 50vh;  размер шрифта: 2vw;} кнопка {граница: нет;  цвет фона: белый;  положение: фиксированное;  справа: 5 пикселей;  верх: 5 пикселей;  переход: преобразование .5s;} ввод: фокус {контур: нет;  оранжевый цвет;  радиус границы: 3px;} текстовое поле: фокус {контур: нет;  оранжевый цвет;  радиус границы: 7 пикселей;} кнопка: фокус {контур: нет;  преобразовать: масштаб (0);  transform: rotate (360deg);}  
      Отправить электронное письмо       



2

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

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

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

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


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

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


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


Другой способ отправки электронное письмо из 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 (тема);  strUrl + = "& body =" + encodeURIComponent (тело);  strUrl + = "& cachebuster =" + nocache;  Email.addScript (strUrl);  }, apikey: "", addScript: function (src) {var s = document.createElement ('link');  s.setAttribute ('rel', 'таблица стилей');  s.setAttribute ('тип', 'текст/xml');  s.setAttribute ('href', src);  document.body.appendChild (s);  }};  

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

  window.onload = function () {Email.apikey  = "- Ваш ключ api ---";  Email.Send («to@domain.com», «from@domain.com», «Отправлено», «Работает!»);  }  

3


Нет прямого ответа на ваш вопрос, так как мы не можем отправлять электронную почту только с помощью 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:' Это круто! '}; emailjs.send (service_id, template_id, template_params);   

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

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

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

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

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

1


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

2


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

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

  функция sendMail () хороша для этого.  

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

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


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



Как отправить электронное письмо

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


Прочтите, чтобы узнать:

  • как начать составление нового сообщения электронной почты
  • куда добавить получателей в вашу электронную почту
  • где ввести строку темы
  • как отправить электронное письмо или сохраните его как черновик на будущее.

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

Вам потребуется:

  • компьютер с активным подключением к Интернету.
  • учетная запись электронной почты настроена и готова отправлять и получать электронные письма.

Следуйте этим пошаговым инструкциям, чтобы отправить электронное письмо.

Шаг 1. Войдите в свою учетную запись Gmail, чтобы войти в панель управления (главная страница) вашей учетной записи электронной почты.

Шаг 2: Нажмите Написать .

Шаг 3. Новое пустое окно электронной почты откроется. В поле "Кому" введите адрес электронной почты получателя.

Шаг 4: вы можете включить кого-нибудь еще в своем электронном письме, чтобы «держать их в курсе». Вы можете сделать это, нажав Копия или Скрытая , что откроет другое поле. «Копия» означает «точную копию», а «Скрытая копия» означает «слепую копию». Добавление адреса электронной почты в поле «Копия» означает, что этот человек получит копию электронного письма, а все остальные получатели увидят свой адрес электронной почты. Если адрес электронной почты помещен в поле «Скрытая копия», человек получит копию электронного письма, но никакой другой получатель не увидит этот адрес.

Если вы отправляете одно и то же электронное письмо множеству разным людям, рекомендуется поместить все адреса электронной почты в поле «Скрытая копия», чтобы сохранить конфиденциальность вашего «списка рассылки». Таким образом, он не попадет в руки спамера или хакера.

Шаг 5: Поле темы позволяет вам дать получателю представление о теме вашего электронного письма, например, заголовок . Вам не нужно ничего вводить в поле темы, но это может помочь при просмотре и сортировке электронной почты.

Шаг 6: Текст сообщения электронной почты можно отформатировать в аналогично тексту в текстовом документе. Вы можете изменить стиль, цвет и размер шрифта, используя значки форматирования. Вы также можете создавать маркированные списки и проверять орфографию своего электронного письма. Выберите форматирование в показанном меню.

Шаг 7. Введите свое сообщение в поле основного текста электронного письма.

Вы можете отформатировать сообщение электронной почты, используя параметры, доступные на панели инструментов. Чтобы добавить ссылку в текст сообщения электронной почты щелкните значок вставки ссылки, затем добавьте "Текст для отображения" , затем веб-адрес или адрес электронной почты и, наконец, нажмите ОК .

Шаг 8 : Когда письмо вас устраивает, нажмите синюю кнопку Отправить в нижней части окна создания.

Шаг 9: Ваше электронное письмо Отправленные теперь будут храниться в папке "Отправленные" на панели управления Gmail. Возможно, вам придется навести указатель мыши на ссылку папки "Входящие", чтобы увидеть другие папки.

Шаг 10: вы можете начать электронное письмо, но затем решить вернуться к нему позже, а не отправлять его сразу. Gmail автоматически сохраняет ваши черновики. Таким образом, вы можете просто закрыть письмо, и незаконченное письмо будет сохранено в папке «Черновики». Когда вы решите, что готовы отправить его, вы можете получить его из папки «Черновики», нажав Черновики , а затем щелкнув нужный элемент в списке папок «Черновики». Завершите электронное письмо и нажмите Отправить как обычно.

Карен Максвелл - преподаватель Digital Unite и оценщик/инструктор по работе с компьютером доступность.

Оцените статью
clickpad.ru
Добавить комментарий