От автора: В данном уроке мы продолжим использование библиотеки PHPMailer для отправки писем. В предыдущем уроке мы просто рассмотрели использование библиотеки без ее привязки к форме. В этом уроке мы добавим форму, из которой будем получать данные и отправлять их на email. Однако мы не просто будем делать стандартную синхронную отправку формы с перезагрузкой страницы. Форма будет отправляться асинхронно, т.е. средствами AJAX, без перезагрузки страницы.
В видео версии урока вы найдете подробное комментирование процесса получения данных из формы с помощью jQuery и асинхронная отправка формы. Само письмо, как и прежде, мы будем отправлять через SMTP популярных почтовых сервисов с помощью библиотеки PHPMailer.
На этом я с вами прощаюсь. Удачи и до новых встреч!

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
Разработка веб-приложения на PHP
Скачайте видеокурс и узнайте, как создать веб-приложение на PHP
Скачать
Андрей, спасибо Вам огромное за урок, как всегда отличное объяснение.
И отдельная благодарность за помощь на форуме)
Пожалуйста, Ирина
Спасибо Андрей, за отличный урок!
Подскажите пожалуйста, как вместо текста «Отправляю» выводить картинку, например колесико загрузки в gif?
Пожалуйста, Григорий.
Для того, чтобы выводить картинку, можно вместо метода text() использовать метод html() и выводить нужную картинку, используя тег img. Также можно заранее поместить картинку в верстку, скрыть ее свойством display:none, а в нужный момент показать эту картинку. Если возникнут дополнительные вопросы, тогда предлагаю задать их на нашем форуме, где удобнее решать вопросы, связанные с кодом.
Понял, большое спасибо!
Пожалуйста)
Не хочет отправлять ни в какую….все перепробовал
Подскажите, а как сделать такую форму с возможностью прикрепления файла?
У меня получилось только используя formData для передачи данных через Ajax, но данный способ реализации не работает в IE9 и ниже.
Спасибо!
Никогда не задавался такой целью, так что ничего конкретного подсказать не смогу, нужно пробовать.
Быть может сможете подсказать как бы вы сделали форму обратной связи с возможностью прикрепления файла!?
Буду вам очень благодарен!
Спасибо!
Как я и говорил, здесь нужно только пробовать. К сожалению, у меня сейчас просто нет на это времени. Возможно в будущем использую идею для записи урока.
Понял, спасибо!
Если пригодится для урока — могу скинуть код, как я это реализовал. Все работает, за исключением старых браузеров (IE9 и ниже).
Ок, понял.
Присоединяюсь к данному вопросу. Очень нужна возможность отправлять форму обратной связи одновременно с картинкой на почту именно средствами ajax. Промучался 2 дня так ничего и не смог реализовать. Если у кого получилось, будьте так добры помогите, кому не сложно.
Привет Алексей, тоже хотел бы к этой форме прекрипить файл,как ты это сделал??? Выручи!!!
Приветствую! Кому интересно как сделать полнофункциональную форму — заходите на форум forum.getsimplecms.ru/viewtopic.php?id=607
У меня там разработан целый плагин для GetSimple CMS (с подробным мануалом по настройке и установке).
Скачивайте, изучайте. Думаю, кто захочет — разберется как реализовать под свои нужды! Пример реализации можно посмотреть на моем тестовом сайте fortest.infobizar.ru/obratnaya-svyaz-new
Точнее сказать, как передать данные в php обработчик посредством ajax!
Здравствуйте, Андрей! Подскажите пожалуйста, как поставить картинку на аватар для почтового ящика, который осуществляет рассылку на моём сайте.https://e.mail.ru с учётными данными своего почтового ящика. Поменял там аватарку. Но она всё равно не отображается в приходящих письмах: просто по умолчанию показывает в аватарке первую букву названия моего почтового ящика.
Я попробовал авторизоваться на сервисе
Здравствуйте, Александр.
Не совсем понял суть вопроса. Вы хотите прикрепить картинку к письму? Если так, то в уроке я показал, как это сделать. Если хотите сделать что-то другое, тогда, наверное, будет лучше, если Вы проиллюстрируете это скриншотом, например на нашем форуме.
Ну вот когда мне приходят письма на электронную почту с вашего сайта, то отображается в поле аватарки логотип вашей компании, как на этом скриншоте (слева):http://i75.fastpic.ru/big/2015/1204/f0/9b3f308eccf66023522e48fa6b394ff0.png .http://i75.fastpic.ru/big/2015/1204/7f/686252a25c05cd8824748011e96a467f.png
А когда приходят письма с моего сайта, то только отображается первая буква отправителя в поле аватарки: как на скриншоте здесь:
Как мне поставить свою картинку на аватарку для почтового ящика, который отправляет письма с моего сайта?
нашёл как это делается здесь
help.mail.ru/mail-help/postmaster/work/add_avatar
Ага, отлично. Я на этот вопрос не знал ответа, поэтому вряд ли бы смог Вам помочь без гугления))
Ошибка «Подтвердите действия на able.ru». В чем проблема? able.ru это папка в OpenServer>Domains
Скрипт не может возвращать такую ошибку, насколько я понимаю. Где именно эта «ошибка» возникает?
Не отправляется форма почта правильная пароль тоже. Отправляю с локального сервера.
SMTP connect() failed.0
Включите расширенный режим отладки и посмотрите ошибку.
Короче это был денвер виноват. Включил в php.ini «extension=php_openssl.dll».http://hardmandev.com/article/nastroyka-openssl-dlya-denwer/
В денвере файла php_openssl.dll не оказалось. Скачал здесь
Урок очень подробный давно хотел научиться, Спасибо.
Кстати Gmail блокирует отправку. Присылает сообщение «Заблокирована попытка входа в аккаунт». Решается включением «Непроверенных приложений» вот здесь —https://www.google.com/settings/security/lesssecureapps
Вопрос есть: Как сделать редирект на какую-нибудь страницу после успешной отправки? Подскажите пожалуйста.
Если речь о клиентской стороне (Javascript), тогда это можно сделать через объект window.location:
window.location = 'http://google.com';
Можно сделать и задержку перед редиректом, например, здесь редирект произойдет через 3 секунды:
setTimeout("window.location='http://google.com'", 3000);
Спасибо получилось. Вместо alert(‘Письмо отправлено’); поставил.
Ребят, у меня ошибка: ‘Ошибка отправки’ на этапе
success: function(res) {
if ( res == 1 ) {
alert(‘Письмо отправлено’);
} else {
alert(‘Ошибка отправки’);
Не могу понять, откуда берётся этот параметр res и как понять, почему он не возвращает единицу.
res — это переменная, в которую приходит ответ от сервера. Назвал я эту переменную res (сокращение от result), Вы можете назвать ее как угодно, суть от этого не изменится — именно в эту переменную, которая приходит параметром функции success, и получаем ответ от сервера.
Ну а почему в ответ приходит не 1 — это уже нужно проводить отладку кода, скорее всего, ошибка в серверном коде.
Спасибо, вроде разобрался. Ошибка, действительно, была в моём mail.php файле. Но хочу ещё прояснить для себя — мы получаем ответ от сервера в эту переменную по той причине, что вводим в php файле переменную $answer и ловим в неё результат отправки из условия if? То бишь, по сути, вводим «$answer» в php и потом получаем её же в виде «result» для метода success?
В переменную res получаем ответ от сервера, как ответ на AJAX запрос. Ответом считается любой вывод в браузер. В качестве примера можете полностью очистить файл, куда идет запрос, на сервере и написать в нем любой текст, например «Привет, мир!». В результате, в переменную res придет именно эта строка. В нашем случае функция die завершает выполнение скрипта и выводит содержимое переменной $answer (1 или 0) на экран. Собственно, эту 1 или 0 мы и принимаем в параметре success.
Теперь всё стало на свои места. Благодарность!
Пожалуйста
Здравствуйте а как подключить две формы ?
Здравствуйте.
Вместо id для формы и полей используйте везде класс. Соответственно, обработчик в коде jQuery также привязываете к элементу с классом и в коде jQuery вместо ID используйте класс. Собственно, примерно так.
Здраствуйте! Как это сделать автоматический, например в функции Mail нужно прописать только одну адрес. На хостинге отключили функцию mail, мне нужно сделать через SMTP точно такое же. Пользователь сам смог бы прописать имю, емайл, сообщение и это отправился на мою почту.
Здравствуйте.
Только один адрес прописать вряд ли Вам будет интересно, поскольку нужно ведь указать текст письма, его тему. А так: отдельно прописываете настройки SMTP соединения, они всегда постоянны, а пользователю останется вызывать методы addAddress и send, а также заполнить свойства Subject и Body
$mail->Username = ‘мой_логин’; $mail->Password = ‘мой пароль’; А как прописать здесь переменные: $mail->From = $email; // адрес почты, с которой идет отправка, $mail->FromName = $name; // имя отправителя. Письмо сам к себе отправляет, а мне нужно чтобы на сайте пользователей мне отправляли письмо?
Еще раз повторю: настройки соединения отдельно прописываются, а все остальное — отдельно. И мешать их в кучу не нужно. Если нужно отправить письмо, тогда подключаете файл, в котором настройки уже описаны, а пользователю остается лишь отправить письмо, заполнив тему и текст.
Спасибо!
Спасибо большое вам! Теперь работает, вот так сделал $to = «login@mail.ru»; $mail->addAddress($to);
if( $mail->send($to) ){
$answer = ’1′;
}
Благодарю, Андрей, за прекрасный урок!
Все — как обычно — четко, понятно и без лишней «воды». Удачи Вам и процветания.
Пожалуйста