Блог веб разработки статьи | видеообзоры | исходный код

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

phpmailer php

phpmailer  php

Всем привет и сегодня мы рассмотрим отправку сообщений на почту с помощью php. Поехали!

Вообще для отправки сообщений в php существует специальная функция mail которая якобы позволяет отправлять сообщение на почту. Но она так скажем работает не всегда корректно, а то и вовсе не работает, поэтому мы ее рассматривать не будем.

Мы возьмем уже готовое решение в виде модуля(компонента) и будем отправлять сообщение используя его функционал. В качестве компонента мы воспользуемся phpMAiler. phpMAiler представляет собой класс с помощью функционала которого мы можем отправлять сообщения на почту. Найти его вы можете по адресу https://github.com/PHPMailer/PHPMailer(если ссылка не действительна просьба сообщить в комментарии) там к нему прилагается и документация.

Я буду устанавливать данный компонент через composer. Для этого создам файл composer.json в нем:

{
  "require": {
    "phpmailer/phpmailer": "~6.0"
  }
}

здесь мы говорим что хотим установить компонент phpmailer версии 6.0. Подробнее почитать об этом компоненте и его версиях вы можете на https://packagist.org/packages/phpmailer/phpmailer.

Далее нам необходимо через composer выполнить данный файл. Я работаю с composer через консоль openServer поэтому в консоли перехожу в корневую папку с файлом composer.json и выполняю команду:

composer install

Жду завершения загрузки. После, в нашем корневом каталоге должны появится папка vendor и файл composer.lock. Если появились значит все прошло успешно и мы продолжаем работу.

Теперь мы должны непосредственно подключить наш модуль в проект делается это очень просто:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';

Здесь мы с помощью use указываем доступы к пространствам имен и функции require прописываем путь к файлу autoload.php. Этого нам вполне будет достаточно. Если не выйдем ошибок значит все работает.

Далее для того чтобы нам начать работать с классом PHPMailer надо создать его объект.

$mail = new PHPMailer(true);

Все теперь мы создали объект $mail и можем через него работать со свойствами и методами класса PHPMailer.

Для начала давайте создадим перехватчик ошибок:

try {
 
echo 'Сообщение успешно отправлено';

} catch (Exception $e) {
    echo 'При отправке сообщения произошла следующая ошибка : ', $mail->ErrorInfo;
}

здесь мы воспользовались стандартным перехватчиком ошибок try catch.

Заметьте что мы в сообщении об ошибке воспользовались свойством ErrorInfo объекта mail которое выводит информацию об ошибке.

В самом try нам необходимо выставить настройки соединения smtp:

$mail->SMTPDebug = 2;         /*Оставляем как есть*/                       
$mail->isSMTP();              /*Запускаем настройку SMTP*/
$mail->Host = 'smtp.mail.ru'; /*Выбираем сервер SMTP*/
$mail->SMTPAuth = true;        /*Активируем авторизацию на своей почте*/
$mail->Username = 'andcdsrey-grcdibin';   /*Имя(логин) от аккаунта почты отправителя */
$mail->Password = 'password';        /*Пароль от аккаунта  почты отправителя */
$mail->SMTPSecure = 'ssl';            /*Указываем протокол*/
$mail->Port = 465;			/*Указываем порт*/
$mail->CharSet = 'UTF-8';/*Выставляем кодировку*/


$mail->setFrom('andcdsrey-grcdibin@mail.ru', 'Андрей Грибин');/*Указываем адрес почты отправителя */
/*Указываем перечень адресов почты куда отсылаем сообщение*/
$mail->addAddress('andcdsrey-grcdibin@mail.ru', 'Андрей Грибин');  
$mail->addAddress('andrcdscdseygribin1993@yandex.ru', 'Андрей Грибин');  
   
/*Указываем вложения, здесь к примеру я из корневой директории
отправляю по почте файл test.html*/
$mail->addAttachment(__DIR__.'/test.html','test.html');         



$mail->isHTML(true);      /*формируем html сообщение*/
$mail->Subject = 'Мое первое сообщение далеко'; /*Заголовок сообщения*/
$mail->Body    = 'Мое сообщение о новых';/* Текст сообщения */
$mail->AltBody = 'Новое сообщение через mailer';/*Описание сообщения */

Здесь мы выставили общие настройки для SMTP, а именно в качестве сервера SMTP мы выбрали smtp.mail.ru

Данный smtp сервер позволяет отправлять сообщения на такие почты как(mail.ru, yandex.ru и т.п.)

Указали логин и пароль($mail->Username, $mail->Password) от аккаунта почты с которого будем отправлять письмо, для того чтобы авторизоваться. Также мы выставили доступный порт данного smtp сервера 465. С помощью метода setFrom() указали адрес почты с которого будет приходить письмо, а addAddress() адреса куда мы будем отправлять письма. В само сообщение мы вложили файл test.html который взяли из корневой папки. Заголовок, описание и текст сообщения мы указали с помощью следующих свойств(Subject, AltBody, Body).

Теперь чтобы запустить отправку нашего сообщения нам воспользоваться методом send();

$mail->send();

Но перед этим давайте рассмотрим еще два метода которые мы должны использовать в нашем коде.

$mail->clearAddresses();
$mail->clearAttachments();
Данные методы очищают стек наших вложений и адресатов.
Все, теперь мы можем запускать наш файл на выполнение, вот весь код разобранный выше
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
    $mail->SMTPDebug = 2;
    $mail->isSMTP();
    $mail->Host = 'smtp.mail.ru';
    $mail->SMTPAuth = true;
    $mail->Username = 'andcdsrey-grcdibin';
    $mail->Password = 'password';
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;
    $mail->CharSet = 'UTF-8';
    //Отправитель
    $mail->setFrom('andcdsrey-grcdibin@mail.ru', 'Андрей Грибин');
    // Получатели
    $mail->addAddress('andcdsrey-grcdibin@mail.ru', 'Андрей Грибин');
    $mail->addAddress('andrcdscdseygribin1993@yandex.ru', 'Андрей Грибин');
    //Вложения
    $mail->addAttachment(__DIR__.'/test.html','test.html');
    //Контент сообщения
    $mail->isHTML(true);
    $mail->Subject = 'Мое первое сообщение далеко';
    $mail->Body    = 'Мое сообщение о новых';
    $mail->AltBody = 'Новое сообщение через mailer';
    $mail->send();
echo 'Сообщение успешно отправлено';
    } catch (Exception $e) {
        echo 'При отправке сообщения произошла следующая ошибка : ', $mail->ErrorInfo;
}
$mail->clearAddresses();
$mail->clearAttachments();

После выполнения данного кода мне на почту с адресами andcdsrey-grcdibin@mail.ru и andrcdscdseygribin1993@yandex.ru придет сообщение от отправителя andcdsrey-grcdibin@mail.ru. То есть по сути мы на почтовом ящике andcdsrey-grcdibin@mail.ru самому себе отправим сообщение.

Если письма не пришло ни на одну из указанных почт посмотрите сообщение об ошибке которое должно вывестись в случае возникновения ошибок. Возможно вы ошиблись в логине или пароле, может в адресе, также порте или smtp сервере. Проблемы могут еще быть с google почтой. Там авторизация с помощью стороних программ и сервисом запрещена. Требуется разрешение, которое можно настроить в своей аккаунте gmail. Мы этот процесс рассматривать не будем. Если в вам выведется сообщение о том что оно отправлено, но сообщения не пришли на почту.Проверьте еще раз на коректность адреса почты тех кому отправляете сообщение.

В общем все в ваших руках.

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

Поэтому тестите, внедряйте, пользуйтесь!

А я с вами прощаюсь. Желаю удачи и успехов! Пока!

Оцените статью:

Статьи

Комментарии

Внимание!!! Комментарий теперь перед публикацией проходит модерацию

Все комментарии отправлены на модерацию

Реклама

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm