Отправка писем с помощью Javascript

Это немного запутать, чтобы объяснить, так что несите меня здесь...

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

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

У меня уже есть работающее в основном решение, и я расскажу подробности об этом в качестве ответа, мне интересно, есть ли лучший способ?

Ответ 1

Теперь я делаю это в основном так:

HTML:

<textarea id="myText">
    Lorem ipsum...
</textarea>
<button onclick="sendMail(); return false">Send</button>

Javascript:

function sendMail() {
    var link = "mailto:[email protected]"
             + "[email protected]"
             + "&subject=" + escape("This is my subject")
             + "&body=" + escape(document.getElementById('myText').value)
    ;

    window.location.href = link;
}

Это, что удивительно, работает довольно хорошо. Единственная проблема заключается в том, что если тело особенно длинное (где-то более 2000 символов), оно просто открывает новое электронное письмо, но в нем нет никакой информации. Я подозреваю, что это будет связано с максимальной длиной превышенного URL.

Ответ 2

Вот как это сделать, используя jQuery и "элемент", чтобы щелкнуть:

$('#element').click(function(){
    $(location).attr('href', 'mailto:?subject='
                             + encodeURIComponent("This is my subject")
                             + "&body=" 
                             + encodeURIComponent("This is my body")
    );
});

Затем вы можете получить свое содержимое, загрузив его из полей ввода (например, используя $('#input1').val() или на стороне сервера script с помощью $.get('...'). Удачи

Ответ 3

Вам не нужен javascript, вам просто нужно, чтобы ваш href был закодирован следующим образом:

<a href="mailto:[email protected]">email me here!</a>

Ответ 4

Как насчет наличия активной проверки в текстовом поле, и после того, как она перейдет через 2000 (или какой бы ни был максимальный порог), тогда отобразите "Это письмо слишком длинное для завершения в браузере, пожалуйста, <span class="launchEmailClientLink">launch what you have in your email client</span>"

Для чего у меня будет

.launchEmailClientLink {
cursor: pointer;
color: #00F;
}

и jQuery это в ваш onDomReady

$('.launchEmailClientLink').bind('click',sendMail);

Ответ 5

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

Ответ 6

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

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

Но если в настоящее время "почтовый клиент" всегда установлен автоматически, потенциально для клиента веб-почты, я буду рад узнать.

Ответ 7

Отправить запрос mandrillapp.com:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
        console.log(xhttp.responseText);
    }
}
xhttp.open('GET', 'https://mandrillapp.com/api/1.0/messages/send.json?message[from_email][email protected]&message[to][0][email][email protected]&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();

Ответ 8

Вы можете использовать эту бесплатную услугу: https://www.smtpjs.com

  • Включите script:

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

  1. Отправьте электронное письмо с помощью:

    Email.send("[email protected]", "[email protected]", "This is a subject", "this is the body", "smtp.yourisp.com", "username", "password");