Хотите правильно настроить отправку почты с Вашего сайта? Письма, отправляемые с помощью PHP-функции mail() не приходят? Давно пора использовать SMTP крупных сервисов типа Яндекса, Google или Mail.ru. И речь в данной статье идёт не про рассылку сообщений кому-либо. Мы говорим о нормальной работе форм обратной связи на нашем сайте. Я многократно сталкивался с ситуацией, когда владельцы сайта попросту не получали заявки от клиентов по той простой причине, что все заявки (работавшие через функцию mail()) просто отправлялись в спам!
И в данной статье я расскажу, как, используя Swift Mailer, настроить отправку писем.
После настройки Вам понадобится указать данные для входа в Ваш почтовый ящик. К примеру, так:
$transport = (new Swift_SmtpTransport('smtp.yandex.ru', 465)) ->setUsername('имя_пользователя') ->setPassword('пароль_пользователя') ->setEncryption('SSL') ;
И отправка почты будет работать! Всё гениальное просто :)
Swift Mailer требует PHP 7.0 или выше. Также, обязательно должны быть включены функции proc_* (proc_get_status, proc_open, proc_close, proc_terminate и proc_nice). Если данные функции у нас выключены - включаем их обратно. В случае, если у Вас стандартный хостинг - обратитесь в техподдержку. В случае, если у Вас свой сервер, откройте php.ini и проверьте, чтобы в строке, где указаны disable_functions не были указаны данные функции. Если указаны - удаляем их из данной строки.
Также Swift Mailer не работает, когда mbstring.func_overload имеет значение 2.
Для установки Swift Mailer нам понадобится SSH доступ к серверу, права на установку, прямые руки и Сomposer. Даже если у Вас стандартный хостинг, установка также возможна. Composer обычно уже стоит на многих современных хостингах, а если нет, то обычно включается после обращения в техподдержку.
Если у Вас есть root-доступ и Сomposer не установлен, то он устанавливается с помощью этих команд:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'baf1608c33254d00611ac1705c1d9958c817a1a33bce370c0595974b342601bd80b92a3f46067da89e3b06bff421f182') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"
Итак, начинаем установку Swift Mailer
❶Подключаемся к серверу по SSH. Выполняем команду:
composer require "swiftmailer/swiftmailer:^6.0"
При возникновении каких-либо ошибок - фиксим их. Если ошибок нет - продолжаем дальше.
❷Теперь нам нужно создать файл (давайте назовём его mail_settings.php) с настройками нашего почтового сервера. Файл рекомендую расположить выше уровня Вашего сайта. Т.е. таким образом, чтобы он не лежал в папке с Вашим сайтом. Содержимое файла:
<?php require_once '/путь_на_папку_внутри_которой_установлен_composer/vendor/autoload.php'; // Create the Transport $transport = (new Swift_SmtpTransport('smtp.yandex.ru', 465)) ->setUsername('имя_пользователя_без_знака_@_и_домена') ->setPassword('пароль_пользователя') ->setEncryption('SSL') ; // Create the Mailer using your created Transport $mailer = new Swift_Mailer($transport);
❸Теперь создаём файл, который будет обрабатывать Вашу форму обратной связи. В него через функцию require_once включаем наш файл с настройками почтового сервера. Пример содержимого файла:
<?php require_once 'путь_на_файл_с_настройками_почтового_сервера'; // здесь указываем адрес администратора, который получит заявку с сайта // если получателей несколько, указываем в формате: ['receiver@domain.org', 'other@domain.org' => 'A NAME'] // (там где 'A NAME' пишем любое имя, это ни на что не влияет) $to = ['email_адрес_администратора' => 'ADMIN']; // здесь указываем почтовый ящик, с помощью которого мы отсылаем почту // имя пользователя для этого ящика мы указывали с Вами в файле с конфигурацией $from = 'ваш_логин@домен_почтового_сервера_например_yandex.ru'; // допустим, наша форма связи получает данные с формы, в которой заполняются имя, телефон, e-mail $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); $tel = filter_var($_POST['tel'], FILTER_SANITIZE_STRING); $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); // формируем тело письма для отправки администратору сайта $adminText = <<<MESS <b>Имя клиента</b>: {$name}<br> <b>Телефон</b>: {$tel}<br> <b>E-mail</b>: {$email}<br> MESS; // формируем тело письма для отправки клиенту, что его заявка получена $clientText = <<<MESS <b>{$name}</b>, Ваша заявка принята в работу<br> Ожидайте звонок на номер телефона <b>{$tel}</b><br> Ожидайте письмо на e-mail: <b>{$email}</b><br> MESS; // готовим отправку письма для администратора сайта $messageToAdmin = (new Swift_Message("Заказ на обратный звонок")) ->setFrom([$from => $from]) ->setTo($to) ->setBody($adminText, 'text/html') ; // готовим отправку письма для клиента $messageToClient = (new Swift_Message("Ваш заказ принят в работу")) ->setFrom([$from => $from]) ->setTo([$email => $name]) ->setBody($clientText, 'text/html') ; // отправляем письмо администратору сайта и записываем результат в переменную $result $result = $mailer->send($messageToAdmin); // отправляем письмо клиенту $mailer->send($messageToClient); if($result === 1) { // если всё хорошо и письмо было отправлено echo '<h1>Спасибо! Ваша заявка была успешно отправлена! Ожидайте обратную связь по указанным контактным данным.</h1>'; } else { // если произошла ошибка и письмо не было отправлено echo '<h1>Произошла ошибка при отправке сообщения. Пожалуйста, свяжитесь с нами по телефону.</h1>'; }
Удачного использования!
Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
Web development blog!