От автора: отправка почты с сайта на email – это довольно обыденная и несложная задача. Для этого в PHP предусмотрена функция mail(), которой достаточно передать несколько параметров, и ваше письмо уйдет на указанную электронную почту. Но вот дойдет ли?
Именно на этот вопрос мы и попробуем найти ответ в этом уроке.
Причина, по которой отправленное письмо может быть не получено адресатом – это антиспамовые фильтры. Почтовые сервисы, как могут, пытаются бороться с получением спама. Также антиспамовые фильтры не очень «любят» письма, отправленные функцией mail(). В результате этого письмо попадет в папку Спам, в лучшем случае, или же попросту будет удалено антиспамовым фильтром.

Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля
Получить курс сейчас!Как же здесь быть? Выход прост: можно отправлять почту через SMTP популярных почтовых сервисов. Например, через gmail.com. Для этого всего-то нужно иметь почтовый ящик того почтового сервиса, протокол которого будем использовать. В уроке я буду использовать сервис mail.ru, поскольку там гораздо проще завести тестовый почтовый ящик. Однако, если вы захотите использовать сервис gmail.com, то порядок действий будет одним и тем же.
Для того, чтобы не писать весь код с нуля, мы воспользуемся популярной библиотекой PHPMailer, позволяющей выполнить, пожалуй, любую задачу, связанную с отправкой почты.
В видео версии урока вы найдете подробное комментирование процесса отправки почты. Для примера мы отправим 2 типа писем на различные почтовые сервисы: это будет письмо формата HTML и письмо с вложением. Как вы увидите, процесс использования библиотеки PHPMailer предельно прост.
На этом я с вами прощаюсь. Удачи и до новых встреч!

Разработка веб-приложения на PHP
Скачайте видеокурс и узнайте, как создать веб-приложение на PHP
Скачать
Великолепный урок! Спасибо вам большое!
Пожалуйста)
Хороший урок, благодарю!
Пожалуйста
у меня все правда но дает ошибку — Письмо не может быть отправлено. Ошибка: SMTP connect() failed.
Опишите конкретнее проблему на нашем форуме: на каком сервере пробуете, приложите исходный код.
Сделайте пжлст продолжение этого урока, только как дополнение — отправка через SMTP, с прикруткой своего домена (что бы в отправителе был не сервер SMTP, а напримерuser@mydomain.ru ) и желательно с подтверждением домена по DKIM, что бы с спам не кидало.
Спасибо.
Здравствуйте, не от рабатывается проверка условия вот в этой часть кода(уведомления об отправки песьма):
function(res){
if( res == 1 )….
……..}
alert (res)
Вы даёт:
CLIENT -> SERVER: ……..
CLIENT -> SERVER: ……..
CLIENT -> SERVER: ……..
……
…..
CLIENT -> SERVER: ……..
CLIENT -> SERVER: ……..
CLIENT -> SERVER: ……..
1
Единица идёт последней строкой.
Как мне правельно праверить ответ сервера if( res == 1 )
Здравствуйте, Андрей.Библиотека PHPMailer. Отправка писем средствами AJAX . Если все же делаете что-то другое, тогда создайте тему на нашем форуме, там удобнее решать вопросы, связанные с кодом.
Что-то я ничего из выложенного кода не понял… судя по наличию кода на JS, подозреваю, что хотите прикрутить асинхронную отправку писем. Если я прав, то посмотрите этот урок —
Здравствуйте, ошибся уроком хотел задать вопрос здесь: Библиотека PHPMailer. Отправка писем средствами AJAX.
Ошибка была в том что в PHP-части не убрал вот это $mail->SMTPDebug = 1;
Здравствуйте, Андрей! Подскажите пожалуйста, а как можно сделать функцию уведомления о новом комментарие на @mail к определённой статье на сайте?
Как сделать это в целом по логике понятно: например в БД хранить конфиг для каждого пользователя о том, отправлять ли ему на @mail сообщение о новом комментарии к статье на сайте или нет.
Но как сделать, например, если пользователь хочет получать уведомления только к конкретной статье? Например, только к статье №1, а новые комменты к статье №2 ему уже не нужны. Хранить в БД настройку конфига по каждой статье, думаю не совсем рационально! Что если на сайте тысячи статей, а пользователь хочет получать уведомления только, скажем для десяти из них?!
Подскажите логику! Так, как сделано у Вас на сайте: мне приходят на почту письма о новых комментариях к статьям, только по тем, напротив которых я отмечал галочку «Уведомить меня об ответах на мой комментарий по e-mail.».
Здравствуйте, Александр.
Как вариант, можно создать таблицу подписки, в которой будут храниться ID статей и ID пользователей, подписанных на статью. При добавлении нового комментария из этой таблицы получаем всех пользователей, оформивших подписку к этой статье, и отправляем им уведомления.
Спасибо за ответ, Андрей! А как бы Вы посоветовали тогда лучше хранить данные id пользователей?
1) для каждого пользователя отдельная строка в таблице, например id статьи(4) — id_user (5), id статьи (4) -id_user(6) и т.д. с типом поля id_user(«int»);
2) id статьи(4) — ячейка таблицы в виде строки id пользователей через разделитель, с типом поля id_user(«text»);
3) id статьи(4) — ячейка таблицы в виде массива (сериализованные данные) id пользователей в массиве, с типом поля id_user(«BLOB»);
Первый вариант и по ID статьи получаем всех пользователей. Что-то вроде такого: SELECT user_id FROM subscription WHERE article_id = $article_id. В итоге получим ID всех юзеров, которым нужно отправить письма. Ну а объединив с таблицей пользователей, можем обойтись одним запросом, примерно такого вида:
SELECT subscription.user_id, users.email FROM subscription LEFT JOIN users ON subscription.user_id = users.user_id WHERE article_id = $article_id
Спасибо за ответы и за советы! Всегда всё чётко, быстро и по существу! Буду действовать!
Пожалуйста)
Спасибо за прекрасный урок и библиотеку, Андрей.http://www.google.com/accounts/DisplayUnlockCaptcha и выполните вход с именем пользователя и паролем Gmail. Если необходимо, введите буквы, изображенные на искаженной картинке.
В уроке был описан способ для MAIL.RU, но вот с GMAIL возникла ошибка SMTP connect() failed. Дело в том что google блокирует доступ новым устройствам и приложениям. Чтобы исправить данную проблему откройте страницу
Доступ предоставлен
Теперь вы можете войти в свой аккаунт Google с помощью нового устройства или приложения.
PhpMailer больше ошибки не выдает и письмо отправляются с gmail-a
Пожалуйста)
Спасибо!!! Все работает!!! Три дня тщетных поисков нормального варианта и наконец-то ВЫ !!! А-а-а-а-а-а ))))
Хочу выразить всем участникам WebForMySelf огромное человеческое спасибо за труд, за выдержку, за понимание. Отдельное спасибо — для Андрея Кудлай. Помните, по вашим стопам идут много новичков! Вы в ответе за тех, кого приручили. )))
P.S. Пожелание (наблюдение). Рассмотрите возможность увеличения списка доступных к бесплатному просмотру/скачиванию уроков представленных курсов, которые раньше были на платной основе, сверх списка «заманушных» уроков. Обоснование — моральное устаревание материала, нахождение материала на других ресурсах в открытом доступе и т.д. Например: курс состоит из 52 уроков, из которых 4 «заманушных», остальные — платные. Даже если каждый месяц открывать по одному платному уроку, то это будет происходить в течение (52-4)/12=4 года. Я просто указываю направление, а вы подумайте.
Еще раз — огромное спасибо!
Пожалуйста, Сергей)
Относительно пожелания-наблюдения… уже думаем
Здравствуйте! У при отправке не выдает никаких ошибок, но страница грузится бесконечно, т.е. не может загрузиться. Постоянно вращается загрузка
Здравствуйте. Возможно не удается получить ответ от почтового сервиса. Возможно что-то не так с настройками Вашего сервера. Сложно сказать что не так, не работая с Вашим кодом на Вашем сервере. Попробуйте поменять почтовый сервер (google, yandex, mail). Если не поможет, тогда нужно смотреть, скорее всего что-то с сервером.
Здравствуйте. в связи с чем может быть такая ошибка?
Письмо не может быть отправлено. Ошибка: SMTP connect() failed.
Все делалось по данному уроку, но, увы, не работает.
Здравствуйте. В ошибке говорится об ошибке соединения. Проверьте настройки соединения, а также убедитесь, что в PHP включено расширение php_openssl и на сервере включен OpenSSL. Все это возможные причины.
Да, Вы совершенно правы, большое спасибо, все работает!
Пожалуйста.
Здраствуйте! В майл ру выдает такое сообщение: Ваше сообщение не доставлено. Mail failure, не отправляется письмо.
Здравствуйте.
Включите расширенную отладку и посмотрите подробное сообщение об ошибке.
Спасибо! Через этот урок сделал Библиотека PHPMailer. Отправка писем средствами AJAX. Теперь письмо отправляется.
Пожалуйста)
у меня проблема
при загрузке сайта письмо сразу отправляется. на сайт не входит
помогите пожалуйста
Задайте вопрос на нашемфоруме , покажите код. Только увидев код, можно что-то попробовать подсказать.