Библиотека PHPMailer. Отправка писем средствами AJAX

Библиотека PHPMailer. Отправка писем средствами AJAX

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

скачать исходникискачать урок

В видео версии урока вы найдете подробное комментирование процесса получения данных из формы с помощью jQuery и асинхронная отправка формы. Само письмо, как и прежде, мы будем отправлять через SMTP популярных почтовых сервисов с помощью библиотеки PHPMailer.

На этом я с вами прощаюсь. Удачи и до новых встреч!

Курс по программированию на языке PHP

Изучите PHP с нуля до результата!

Смотреть курс

Метки: , ,

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (42)

  1. Iryna

    Андрей, спасибо Вам огромное за урок, как всегда отличное объяснение.
    И отдельная благодарность за помощь на форуме)

  2. Григорий

    Спасибо Андрей, за отличный урок!
    Подскажите пожалуйста, как вместо текста «Отправляю» выводить картинку, например колесико загрузки в gif?

    • Андрей Кудлай

      Пожалуйста, Григорий.
      Для того, чтобы выводить картинку, можно вместо метода text() использовать метод html() и выводить нужную картинку, используя тег img. Также можно заранее поместить картинку в верстку, скрыть ее свойством display:none, а в нужный момент показать эту картинку. Если возникнут дополнительные вопросы, тогда предлагаю задать их на нашем форуме, где удобнее решать вопросы, связанные с кодом.

  3. Август

    Не хочет отправлять ни в какую….все перепробовал

  4. Алексей

    Подскажите, а как сделать такую форму с возможностью прикрепления файла?
    У меня получилось только используя formData для передачи данных через Ajax, но данный способ реализации не работает в IE9 и ниже.

    Спасибо!

    • Андрей Кудлай

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

      • Алексей

        Быть может сможете подсказать как бы вы сделали форму обратной связи с возможностью прикрепления файла!?
        Буду вам очень благодарен!
        Спасибо!

        • Андрей Кудлай

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

          • Алексей

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

          • Андрей Кудлай

            Ок, понял.

  5. Алексей

    Точнее сказать, как передать данные в php обработчик посредством ajax!

  6. Александр

    Здравствуйте, Андрей! Подскажите пожалуйста, как поставить картинку на аватар для почтового ящика, который осуществляет рассылку на моём сайте.
    Я попробовал авторизоваться на сервисе https://e.mail.ru с учётными данными своего почтового ящика. Поменял там аватарку. Но она всё равно не отображается в приходящих письмах: просто по умолчанию показывает в аватарке первую букву названия моего почтового ящика.

    • Андрей Кудлай

      Здравствуйте, Александр.
      Не совсем понял суть вопроса. Вы хотите прикрепить картинку к письму? Если так, то в уроке я показал, как это сделать. Если хотите сделать что-то другое, тогда, наверное, будет лучше, если Вы проиллюстрируете это скриншотом, например на нашем форуме.

  7. Александр

    Ну вот когда мне приходят письма на электронную почту с вашего сайта, то отображается в поле аватарки логотип вашей компании, как на этом скриншоте (слева): http://i75.fastpic.ru/big/2015/1204/f0/9b3f308eccf66023522e48fa6b394ff0.png.
    А когда приходят письма с моего сайта, то только отображается первая буква отправителя в поле аватарки: как на скриншоте здесь: http://i75.fastpic.ru/big/2015/1204/7f/686252a25c05cd8824748011e96a467f.png
    Как мне поставить свою картинку на аватарку для почтового ящика, который отправляет письма с моего сайта?

  8. Александр

    нашёл как это делается здесь
    help.mail.ru/mail-help/postmaster/work/add_avatar

    • Андрей Кудлай

      Ага, отлично. Я на этот вопрос не знал ответа, поэтому вряд ли бы смог Вам помочь без гугления))

  9. Руслан

    Ошибка «Подтвердите действия на able.ru». В чем проблема? able.ru это папка в OpenServer>Domains

    • Андрей Кудлай

      Скрипт не может возвращать такую ошибку, насколько я понимаю. Где именно эта «ошибка» возникает?

  10. Михаил

    Не отправляется форма почта правильная пароль тоже. Отправляю с локального сервера.

    SMTP connect() failed.0

  11. Михаил

    Короче это был денвер виноват. Включил в php.ini «extension=php_openssl.dll».
    В денвере файла php_openssl.dll не оказалось. Скачал здесь http://hardmandev.com/article/nastroyka-openssl-dlya-denwer/

    Урок очень подробный давно хотел научиться, Спасибо.

  12. Михаил

    Кстати Gmail блокирует отправку. Присылает сообщение «Заблокирована попытка входа в аккаунт». Решается включением «Непроверенных приложений» вот здесь — https://www.google.com/settings/security/lesssecureapps

  13. Михаил

    Вопрос есть: Как сделать редирект на какую-нибудь страницу после успешной отправки? Подскажите пожалуйста.

    • Андрей Кудлай

      Если речь о клиентской стороне (Javascript), тогда это можно сделать через объект window.location:
      window.location = 'http://google.com';
      Можно сделать и задержку перед редиректом, например, здесь редирект произойдет через 3 секунды:
      setTimeout("window.location='http://google.com'", 3000);

  14. Алексей

    Ребят, у меня ошибка: ‘Ошибка отправки’ на этапе
    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.

  15. Андрій

    Здравствуйте а как подключить две формы ?

    • Андрей Кудлай

      Здравствуйте.
      Вместо id для формы и полей используйте везде класс. Соответственно, обработчик в коде jQuery также привязываете к элементу с классом и в коде jQuery вместо ID используйте класс. Собственно, примерно так.

  16. Абай

    Здраствуйте! Как это сделать автоматический, например в функции 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′;
            }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree