Блог веб разработки

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

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. Мы этот процесс рассматривать не будем. Если в вам выведется сообщение о том что оно отправлено, но сообщения не пришли на почту.Проверьте еще раз на коректность адреса почты тех кому отправляете сообщение.

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

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

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

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

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

Еще статьи

contenteditable HTML

window location JavaScript

Переменные окружения PHP

Метки GIT

CSS валидация

Модальные окна python

marquee html

out of range

code html

Комментарии

Проверочный код

LadeauStizodo

Hello. And Bye.

16:53 17-05-2019

Jamesmoist

Оригинальный парфюм.Доставка по России. https://youla.ru/user/581382d904559fdd2fd4a004

12:34 12-05-2019

История

    ПОДПИСКА

    • Подпишись и получай информацию о выходе новых статей на почту! Просто введите свою почту, нажмите кнопку подписаться. На почту должно будет прийти сообщение с потверждением подписки. Если сообщение не пришло проверьте раздел спам или попробуйте другую почту. Также по всем техническим проблемам вы можете написать в поддержку

    НОВОСТИ

    • Всем привет! Запустил новый сервис для поиска и бесплатного скачивания, прослушивания аудиокниг. Здесь вы можете найти множество литературы и прослушать ее. Вскоре возобновлю написание статей.