Smtp отправка письма. Отправка писем (SMTP vs
Настройки отправки почты через SMTP
Встречаются случаи, когда сайтостроители сталкиваются с проблемой работы электронной почты сайта на CMS Joomla. Например, при отправки письма через форму обратной связи могут появляться ошибки следующего типа: "Could not instantiate mail function" или "Не удалось вызвать функцию mail" . Также возможен вариант отправления письма без появления ошибок, однако в результате оно все равно не доходит до адресата.
Почему же происходят данные проблемы с почтой? Чтобы ответить на данный вопрос необходимо в панели управления пройти по следующему пути: "Система" - "Общие настройки" - вкладка "Сервер" - раздел "Настройка почты".
В CMS Joomla предусмотрено три механизма отправки писем: PHP Mail, Sendmail и SMTP. По умолчанию используется PHP Mail с которым зачастую и происходят проблемы, которые, в основном, связаны с настройками используемого хостинга.
Исходя из вышеизложенного делаем вывод: либо обращаемся за помощью к хостинг провайдеру, либо используем способ отправки писем Sendmail или SMTP. Остановимся на использовании SMTP.
Настройки отправки почты при помощи SMTP
SMTP (англ. Simple Mail Transfer Protocol) - сетевой протокол, используемый для передачи электронной почты. Для использования SMTP необходимо корректно выставить настройки определенного почтового сервера, который будет использоваться.
Чтобы увидеть настройки SMTP, необходимо в "Способе отправки" выбрать "SMTP". Рассмотрим каждую настройку популярных почтовых серверов: Yandex, Mail, Gmail, Rambler и Yahoo.
Настройки SMTP для Yandex
- E-mail сайта: почтовый ящик на yandex.ru, например: [email protected]
- Защита SMTP: SSL
- Порт SMTP-сервера: 465
- Имя пользователя SMTP: логин ящика на yandex.ru, например: khasanov (без @yandex.ru)
- SMTP-сервер: smtp.yandex.ru
Настройки SMTP для Mail
- E-mail сайта: почтовый ящик на mail.ru, например: [email protected]
- Отправитель письма: запись, которая будет отображаться у адресата в поле "Отправитель"
- Отключить рассылку: вкл/откл. функции массовой рассылки писем
- Авторизация на SMTP-сервере: Да
- Защита SMTP: SSL
- Порт SMTP-сервера: 465
- Имя пользователя SMTP: почтовый ящик на mail.ru, например: [email protected]
- Пароль для SMTP: пароль от почтового ящика
- SMTP-сервер: smtp.mail.ru
Настройки SMTP для Gmail
- E-mail сайта: почтовый ящик на gmail.com, например: [email protected]
- Отправитель письма: запись, которая будет отображаться у адресата в поле "Отправитель"
- Отключить рассылку: вкл/откл. функции массовой рассылки писем
- Авторизация на SMTP-сервере: Да
- Защита SMTP: SSL
- Порт SMTP-сервера: 465
- Имя пользователя SMTP: почтовый ящик на gmail.com, например: [email protected]
- Пароль для SMTP: пароль от почтового ящика
- SMTP-сервер: smtp.gmail.com
Настройки SMTP для Rambler
- E-mail сайта: почтовый ящик на rambler.ru, например: [email protected]
- Отправитель письма: запись, которая будет отображаться у адресата в поле "Отправитель"
В PHP достаточно популярно использовать скрипты которые автоматизируют процесс отправки писем. В данной статье мы рассмотрим простой скрипт который выполняем отправку писем на почту получателей по средствам SMTP(Simple Mail Transfer Protocol ). Было бы слишком просто ограничится только этим функционалом, скрипт поддерживает и вложения то есть, вы сможете прикрепить pdf, txt или doc файл в своем письме.
Настройка скрипта довольно проста, от вас требуется только данные отправителя логин, пароль от электронной почты с которого будут отправляться письма.
Скрипт работает с классом km_smtp_class.php, класс хорош тем, что поддерживает разные протоколы SSL и TLS которые предоставляют защищенную передачу данных.
Вот и сам скрипт:
.11.11
*/
// Подключаем SMTP класс для работы с почтой
include_once("km_smtp_class.php");
// Конфигурационный массив
$SenderConfig = array("SMTP_server" => "smtp.mail.ru",
"SMTP_port" => "25",
"SMTP_email" => "[email protected]",
"SMTP_pass" => "1111111",
"SMTP_type" => "null");
// Email получателя
$Receiver = "[email protected]";
// Тема сообщения
$Subject = "Отправляем письмо из PHP";
// Текст сообщения (в HTML)
$Text = "Привет!
Сообщение отправлено из скрипта Mowshon
Сайт: http://сайт";
// Вложение в письме - адрес к файлу
$Attachment = "";
/* $mail = new KM_Mailer(сервер, порт, пользователь, пароль, тип); */
/* Тип может быть: null, tls или ssl */
$mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $SenderConfig["SMTP_type"]);
if($mail->isLogin) {
// Прикрепить файл
if($Attachment) {$mail->addAttachment($Attachment);}
// Добавить ещё получателей
$mail->addRecipient("[email protected]");
$mail->addRecipient("[email protected]");
/* $mail->send(От, Для, Тема, Текст, Заголовок = опционально) */
$SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text);
// Очищаем список получателей
$mail->clearRecipients();
$mail->clearCC();
$mail->clearBCC();
$mail->clearAttachments();
}
else {
echo "Возникла ошибка во время подключения к SMTP-серверу";
}
?>
Настройка скрипта лежим в основном на массиве $SenderConfig , тут мы должны указать SMTP:сервер, порт, логин и пароль от электронной почты. Опишем каждый ключ массива:
SMTP_server - адрес SMTP сервера (индивидуальный адрес для разных почт)
Почта Mail.ru : smtp.mail.ru порт: 25, 587 и 465 (с шифрованием SSL)
Почта Yandex : smtp.yandex.ru порт: 25, 587 465 (SSL порт)
Почта Rambler : mail.rambler.ru порт: 25, 587 465 (SSL порт)
Почта Yahoo : smtp.mail.yahoo.com SSL-порт: 465
(Если понадобится адрес smtp серверов которые нет в списке - пишите в комментариях)
SMTP_port - Мы его сверху уже описали для каждого smtp сервера.
SMTP_email - точнее было бы user но для ясности написал email, указываем адрес электронной почты.
SMTP_pass - Пароль от электронной почты которая была указана как значение в ключе SMTP_email
SMTP_type
- По умолчанию NULL. Протокол по которому будут отправлены письма. Протоколы: SSL и TLS
Вложения в письмо можно добавить просо указывая полный адрес к файлу в переменную $Attachment (/var/patch/to/file/File.pdf)
Если будут вопросы пишите их в комментариях ниже.
2019-08-05
Здравствуйте, уважаемый посетитель!
Прошу извинить меня за задержку в обновлении блога. Но этому есть вполне понятное объяснение. Как-никак, лето, дача, гости, лес, вода и много другое, что не позволило мне заняться вопросами создания сайта. Но вот сейчас немного освободился, гости разъехались, и думаю, что теперь точно смогу этому уделить должное внимание.
Итак, после того, как в последней статье мы подключили почту своего домена к одному из почтовых сервисов, теперь посмотрим, как можно отправлять email с сайта. Причем так, чтобы наши письма не попадали в СПАМ, а надежно, с высокой степенью вероятности, доставлялись до наших адресатов.
Вообще, для отправки писем в PHP существует встроенная функция mail(). Но следует отметить, что несмотря на простоту такого способа (в этом случае для отправки писем достаточно указать всего одну строку кода с определенными параметрами), применение такого варианта имеет существенный недостаток, связанный с проблемой СПАМа.
Дело в том, что фильтры антиСПАМа почтовых серверов на стороне получателя не очень жалуют письма, отправленные через функцию mail(). И в большинстве случаев такие сообщения фильтруются, либо вообще удаляться, не доходя до адресата.
И для того, чтобы максимально исключить такие случаи, обычно применяют другой вариант, при котором отправка писем осуществляется, как будто это делается сторонним почтовым сервисом.
Такой способ называется отправкой почты через SMTP с авторизацией. Который мы сегодня и рассмотрим на примере отправки формы обратной связи. Причем для этого будем использовать довольно известную и популярную библиотеку PHPMailer, позволяющую достаточно просто организовать отправку писем через SMTP.
- Как мы будем отправлять письма обратной связи
- Создаем форму обратной связи
- Устанавливаем библиотеку PHPMailer
- Формируем скрипт отправки почты через SMTP
- Проверяем отправку email
- Исходные файлы сайта
Как мы будем отправлять письма обратной связи
Перед тем, как приступить к практической работе по отправке писем обратной связи, сначала определимся, как мы это будем это делать.
Форма обратной связи предназначена для того, чтобы пользователь для связи с администратором сайта мог передать свое сообщение. Обычно, такая форма состоит из нескольких полей и кнопки "Отправить".
В принципе, для отправки email достаточно использовать всего лишь несколько полей, которые дают достаточную информацию о пользователе и содержании сообщения, такие как:
- "Имя" - для ввода имени отправителя сообщения;
- "E-mail" - для адреса электронной почты отправителя;
- "Тема сообщения";
- "Текст сообщения".
Хотя можно добавить и другие. Например, номер телефона, если, действительно, в этом есть необходимость.
В нашем случае такие письма будут отправляться на адрес администратора сайта с реального почтового ящика с авторизацией на том почтовом сервисе, к которому подключен наш домен.
Так как в предыдущей статье мы остановились на проверке подключения доменной почты к сервису Яндекс.Почта, то и оправлять почту будем для этого варианта. Хотя это не принципиально. Ниже будут отмечены те опции, при изменении которых можно будет отправлять email через почтовый сервер Mail.ru.
В качестве реального почтового ящика, с которого будут отправляться письма, будем использовать аккаунт вновь созданного пользователя доменной почты, скажем с адресом [email protected]. А отправлять эти письма будем на почтовый ящик администратора [email protected], который ранее мы создали в предыдущей статье.
Таким образом отправителем письма из формы обратной связи будет являться почтовый ящик [email protected]., а получателем - [email protected]. При этом вся информация о пользователе, отправившем сообщение с его содержанием будет передаваться в теле отправленного письма.
Создаем форму обратной связи
После того, как мы определились с самим порядком отправки писем, теперь создадим форму обратной связи, с помощью которой будем это делать.
Ниже показан HTML-код такой формы, который мы разместим на странице "Контакты" (файл kontakty.php в каталоге articles).