Как отправить письмо с помощью JavaScript без открытия почтового клиента? - программирование
Подтвердить что ты не робот

Как отправить письмо с помощью JavaScript без открытия почтового клиента?

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

<form method="post" action="">
    <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
    <button onclick="sendMail(); return false">Send Email</button>
</form>

... и вот мой код JavaScript:

<script type="text/javascript">
  function sendMail() {
    var link = 'mailto:[email protected]?subject=Message from '
             +document.getElementById('email_address').value
             +'&body='+document.getElementById('email_address').value;
    window.location.href = link;
}
</script>

Код выше работает... но он открывает локальный почтовый клиент. Если я удалю оператор return в атрибуте onclick следующим образом:

<form method="post" action="">
    <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
    <button onclick="sendMail()">Send Email</button>
</form>

... тогда письмо не отправляется вообще. Я что-то пропустил?

Любая помощь будет оценена с достоинством: -)

4b9b3361

Ответ 1

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

Даже если можно было отправлять электронную почту напрямую с помощью JavaScript (то есть с компьютера пользователя), пользователю все равно придется подключаться к некоторому SMTP-серверу (например, gmail.com), предоставлять учетные данные SMTP и т.д. Это обычно обрабатывается на стороне сервера (в вашем приложении), который знает эти учетные данные.

Ответ 2

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

Вам нужно сделать HTTP-запрос на серверный процесс (написанный на выбранном вами языке), который отправляет почту с вашего сервера.

Ответ 3

Непосредственно из клиента


Отправить электронное письмо, используя только 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': '[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

Примечание. Имейте в виду, что ваш ключ 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: '[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 );

});

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

Ответ 4

Вы не можете сделать это с клиентской стороны script только... вы можете сделать вызов AJAX на какой-либо код на стороне сервера, который отправит электронное письмо...

Ответ 5

Для отправки электронной почты должен быть какой-то тип бэкэнд-фреймворка. Это можно сделать через PHP/ASP.NET или с локальным почтовым клиентом. Если вы хотите, чтобы пользователь ничего не видел, лучший способ - использовать их при вызове AJAX в отдельный файл send_email.

Ответ 6

Вам нужно сделать это прямо на сервере. Но лучший способ - использовать PHP. Я слышал, что у PHP есть специальный код, который может отправлять электронную почту напрямую, не открывая почтовый клиент.

Ответ 7

Я думаю, вы можете использовать smtpjs.com