Могу ли я использовать HTML5 для отправки клиентской электронной почты? - PullRequest
7 голосов
/ 29 марта 2011

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

Кстати, есть ли способ сделать это в JavaScript?Я знаю, что это, вероятно, невозможно, просто интересно, есть ли какие-нибудь хитрые способы осуществить это, пройдя полностью через клиента.

Ответы [ 6 ]

13 голосов
/ 29 марта 2011

Короче говоря, НЕТ, не напрямую от клиента (исключая хаки).

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

проблема с выполнением этого с клиентаи не использовать почтовый клиент сложно.Например, большинство интернет-провайдеров-потребителей имеют собственный SMTP-ретранслятор, через который должна быть передана вся исходящая почта через порт 25.У вашего сайта будут проблемы с получением необходимой информации для этого.Во-вторых, веб-браузер не понимает SMTP-протокол и объект XMLHttpRequest.

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

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

8 голосов
/ 29 марта 2011

Да, это возможно. Но не практично ** См. Редактировать 2

Некоторые реализации HTML5 включают поддержку веб-сокетов, по сути, соединение по tcp с сервером. Наложите некоторый код send / recv, и вы сможете создать SMTP-клиент.

На самом деле похоже, что для реализации клиента smtp была использована поддержка nodejs и websocket ... см. Здесь ...

Вам все равно понадобится smtp-сервер, имя пользователя, пароль и т. Д., Как и для стандартного smtp-клиента, чтобы он работал.

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

=== РЕДАКТИРОВАТЬ ===

На самом деле вы можете создать версию без сервера, для поиска mx-записей потребуется также выполнить поиск на сервере имен. Однако есть вероятность, что любые приличные SMTP-серверы поддерживают таблицы черного списка спам-листов, и при подключении со случайного IP-адреса электронная почта обычно помечается как спам.

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

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

=== РЕДАКТИРОВАТЬ 2 ===

Как отметил Марк В Ramp51, рукопожатие требуется с веб-сокетами. Это было то, о чем я не знал. Вам придется взломать реализацию websocket, чтобы обойти рукопожатие.

Правильный способ - пересылать электронную почту веб-серверу.

2 голосов
/ 29 марта 2011

Это невозможно.

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

1 голос
/ 08 августа 2017

Отправить письмо напрямую из Javascript

С официального ресурса:

Как это работает?

  1. Подключите службу электронной почты. Выберите из широкого спектра услуг электронной почты.Мы поддерживаем как транзакционные почтовые сервисы (Mailgun, Mailjet, Mandrill, SendGrid, Amazon SES и Postmark), так и персональные почтовые сервисы (AOL, Gmail, FastMail, iCloud, Mail.ru, Outlook, Yahoo, Yandex и Zoho).

  2. Создание шаблонов электронной почты Выберите из списка наших шаблонов дизайна или просто создайте свой собственный.Шаблоны параметризованы, так что вы можете дополнительно настроить их с помощью Javascript.

  3. Отправка электронной почты с помощью нашего Javascript API Добавьте наш Javscript SDK и начните отправлять электронные письма!

Вот как выглядит типичный вызов:

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

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

1 голос
/ 29 марта 2011

Вы не можете отправить электронное письмо, используя только JavaScript. Вам понадобится некоторая форма обработки на стороне сервера (PHP, ASP и т. Д.) Для отправки фактического электронного письма.

Здесь есть хорошее руководство по настройке формы ajax: http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/

Он не включает в себя PHP (или ASP и т. Д.) Для отправки электронной почты, но существует множество учебных пособий по отправке электронной почты с использованием PHP.

0 голосов
/ 29 марта 2011

Вы не можете сделать это только через код на стороне клиента.

Вы можете сделать это с помощью обратного вызова сервера, AJAX.

...