Керування файлами cookie, які використовуються для реклами, таких як персоналізація реклами, ремаркетинг і аналіз ефективності реклами.
4.9.3. Перевірка роботи вихідної пошти через 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 = ""; while ($str = fgets($smtp_conn, 515)) { $data .= $str; if (substr($str, 3, 1) == " ") { break; } } return $data; } // формування службового заголовка листа $header = "Date: " . date("D, j M Y G:i:s") . " +0300\r\n"; $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 .= "Message-ID: <12345654321." . date("YmjHis") . "@ukraine.com.ua>\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 if (!$smtp_conn) { print "З'єднання з сервером не пройшло"; fclose($smtp_conn); exit; } $data = get_data($smtp_conn); fputs($smtp_conn, "EHLO ukraine.com.ua\r\n"); // початок привітання $code = substr(get_data($smtp_conn), 0, 3); // перевірка, чи не повернув сервер помилку if ($code != 250) { print "Помилка привітання EHLO"; fclose($smtp_conn); exit; } fputs($smtp_conn, "AUTH LOGIN\r\n"); // початок процедури авторизації $code = substr(get_data($smtp_conn), 0, 3); if ($code != 334) { print "Сервер не дозволив почати авторизацію"; fclose($smtp_conn); exit; } fputs($smtp_conn, base64_encode("$login") . "\r\n"); // надсилання логіна від поштової скриньки (на хостингу він збігається з ім'ям поштової скриньки) $code = substr(get_data($smtp_conn), 0, 3); if ($code != 334) { print "Помилка доступу до такого користувача"; fclose($smtp_conn); exit; } fputs($smtp_conn, base64_encode("$password") . "\r\n"); // надсилання пароля $code = substr(get_data($smtp_conn), 0, 3); if ($code != 235) { print "Неправильний пароль"; fclose($smtp_conn); exit; } fputs($smtp_conn, "MAIL FROM:$login\r\n"); // надсилання значення MAIL FROM $code = substr(get_data($smtp_conn), 0, 3); if ($code != 250) { print "Сервер відмовив у команді MAIL FROM"; fclose($smtp_conn); exit; } fputs($smtp_conn, "RCPT TO:$to\r\n"); // надсилання адреси одержувача $code = substr(get_data($smtp_conn), 0, 3); if ($code != 250 AND $code != 251) { print "Сервер не прийняв команду RCPT TO"; fclose($smtp_conn); exit; } fputs($smtp_conn, "DATA\r\n"); // надсилання команди DATA $code = substr(get_data($smtp_conn), 0, 3); if ($code != 354) { print "Сервер не прийняв DATA"; fclose($smtp_conn); exit; } fputs($smtp_conn, $header . "\r\n" . $text . "\r\n.\r\n"); // надсилання тіла листа $code = substr(get_data($smtp_conn), 0, 3); if ($code != 250) { print "Помилка надсилання листа"; fclose($smtp_conn); exit; } if ($code == 250) { print "Лист надіслано успішно. Відповідь сервера $code"; } fputs($smtp_conn, "QUIT\r\n"); // завершення надсилання командою QUIT fclose($smtp_conn); // закриття з'єднання ?>⚠️ Обов'язково підставте в скрипт:
- Запустіть створений скрипт, звернувшись до нього через браузер за адресою виду
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. - Перевірте наявність тестового листа в поштовій скриньці одержувача.