2.19.11. Перевірка роботи вихідної пошти через SMTP
mail.adm.tools
Для перевірки захищеного з’єднання у рядку 34 замініть
mail.adm.tools
на ssl://mail.adm.tools
та 25
на 465
.
flowchart LR
Хостинг-акаунт-->|Порт 25|mail.adm.tools
mail.adm.tools-->|Лист|Отримувач
- За допомогою файл-менеджера або будь-якого FTP-клієнта в кореневому каталозі сайту створіть файл
smtp_test.php
з таким кодом:- <?php
- $login = 'from@example.com'; // замість from@example.com вкажіть адресу створеної на хостингу поштової скриньки
- $password = 'password'; // замість password вкажіть пароль створеної на хостингу поштової скриньки
- $to = 'to@example.com'; // замість to@example.com вкажіть адресу отримувача
- $text = "Привіт, перевірка зв’язку з SMTP."; // вміст листа, що відправляється
- // функція отримання коду відповіді сервера
- function get_data($smtp_conn) {
- $data = "";
- $data .= $str;
- break;
- }
- }
- return $data;
- }
- // формування службового заголовка листа
- $header .= "From: =?UTF-8?Q?" . str_replace("+", "_", str_replace("%", "=", urlencode('Тестовий скрипт'))) . "?= <$login>\r\n";
- $header .= "X-Mailer: Test script hosting Ukraine.com.ua \r\n";
- $header .= "Reply-To: =?UTF-8?Q?" . str_replace("+", "_", str_replace("%", "=", urlencode('Тестовий скрипт'))) . "?= <$login>\r\n";
- $header .= "X-Priority: 3 (Normal)\r\n";
- $header .= "To: =?UTF-8?Q?" . str_replace("+", "_", str_replace("%", "=", urlencode('Отримувачу тестового листа'))) . "?= <$to>\r\n";
- $header .= "Subject: =?UTF-8?Q?" . str_replace("+", "_", str_replace("%", "=", urlencode('перевірка'))) . "?=\r\n";
- $header .= "MIME-Version: 1.0\r\n";
- $header .= "Content-Type: text/plain; charset=UTF-8\r\n";
- $header .= "Content-Transfer-Encoding: 8bit\r\n";
- $smtp_conn = fsockopen("mail.adm.tools", 25, $errno, $errstr, 10); // з’єднання з поштовим сервером mail.adm.tools через порт 25
- $data = get_data($smtp_conn);
- fputs($smtp_conn, base64_encode("$login") . "\r\n"); // відправка логіна від поштової скриньки (на хостингу він збігається з ім’ям поштової скриньки)
- if ($code == 250) { print "Лист відправлено успішно. Відповідь сервера $code"; }
- ?>
Увага! Обов’язково підставте в скрипт:
- Запустіть створений скрипт, звернувшись до нього через браузер за адресою виду
example.com/smtp_test.php
. - Перевірте наявність тестового листа у поштовій скриньці отримувача.
Gmail
Важливі моменти:
- Для підключення до поштової скриньки Gmail використовується пароль застосунку, не пароль акаунта Google.
- Скрипт і бібліотека з прикладу не збирають дані доступу та інформацію про акаунт Google.
flowchart LR
Хостинг-акаунт-->|Порт 587|Gmail
Gmail-->|Лист|Отримувач
- Підключіться до хостингу по SSH.
- Перейдіть до каталогу сайту, де розміщуватиметься тестовий скрипт (замість
example.com/www
вкажіть свої дані):cd ~/example.com/www/
- Встановіть бібліотеку PHPMailer:
composer require phpmailer/phpmailer
- Створіть пароль застосунку для доступу до поштової скриньки Gmail.
- За допомогою файл-менеджера або будь-якого FTP-клієнта в кореневому каталозі сайту створіть файл
gmail_test.php
з таким кодом:- <?php
- $login = 'from@gmail.com'; // замість from@gmail.com вкажіть адресу вашої поштової скриньки Gmail
- $password = 'app_password'; // замість app_password вкажіть створений пароль застосунку
- $to = 'to@example.com'; // замість to@example.com вкажіть адресу отримувача
- use PHPMailer\PHPMailer\PHPMailer;
- use PHPMailer\PHPMailer\SMTP;
- use PHPMailer\PHPMailer\Exception;
- require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/Exception.php';
- require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/PHPMailer.php';
- require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/SMTP.php';
- $mail = new PHPMailer(true);
- try {
- $mail->SMTPDebug = SMTP::DEBUG_SERVER;
- $mail->isSMTP();
- $mail->Host = 'smtp.gmail.com';
- $mail->SMTPAuth = true;
- $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
- $mail->Port = 587;
- $mail->Username = $login;
- $mail->Password = $password;
- $mail->setFrom($login, 'Hosting Ukraine user');
- $mail->addAddress($to, 'John Doe');
- $mail->addReplyTo($login, 'Hosting Ukraine user');
- $mail->Subject = "Gmail SMTP test";
- $mail->Body = 'Hi, test Gmail SMTP connection';
- $mail->send();
- echo "Email message sent.";
- } catch (Exception $e) {
- echo "Error in sending email. Mailer Error: {$mail->ErrorInfo}";
- } finally {
- $mail->smtpClose();
- }
- Запустіть створений скрипт, звернувшись до нього через браузер за адресою виду
example.com/gmail_test.php
. - Перевірте наявність тестового листа у поштовій скриньці отримувача.