Отправка писем с помощью Javascript - PullRequest
101 голосов
/ 07 ноября 2008

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

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

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

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

Ответы [ 8 ]

126 голосов
/ 07 ноября 2008

То, как я делаю это сейчас, в основном так:

HTML:

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

Javascript:

function sendMail() {
    var link = "mailto:me@example.com"
             + "?cc=myCCaddress@example.com"
             + "&subject=" + escape("This is my subject")
             + "&body=" + escape(document.getElementById('myText').value)
    ;

    window.location.href = link;
}

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

17 голосов
/ 20 февраля 2012

Вот способ сделать это, используя jQuery и «элемент» для нажатия:

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

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

10 голосов
/ 07 ноября 2008

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

<a href="mailto:me@me.com">email me here!</a>
5 голосов
/ 21 января 2018

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

  1. Включите скрипт:

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

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

    Email.send("from@you.com", "to@them.com", "This is a subject", "this is the body", "smtp.yourisp.com", "username", "password");

5 голосов
/ 07 ноября 2008

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

На что я бы

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

и jQuery это в вашем onDomReady

$('.launchEmailClientLink').bind('click',sendMail);
2 голосов
/ 07 ноября 2008

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

1 голос
/ 09 октября 2015

Отправить запрос на 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]=mail@7995.by&message[to][0][email]=zdanevich.vitaly@yaa.ru&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();
1 голос
/ 22 сентября 2015

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

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

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

...