Як надіслати електронну пошту WordPress за допомогою SMTP-сервера
Ви стикаєтесь із проблемами з надсиланням електронних листів у WordPress? Під капотом WordPress надсилає повідомлення електронної пошти за допомогою функції mail() PHP. Іноді веб-хостинг неправильно налаштовує параметри пошти. Як результат, з вашого веб-сайту WordPress не можна надсилати електронні листи.
Вирішити цю проблему можна за допомогою SMTP-сервера. Зазвичай веб-хостингові компанії надають власний SMTP-сервер, який ви можете використовувати для надсилання електронних листів веб-сайту.
Крім того, ви можете вибрати інші SMTP-сервери, такі як Gmail, Mailjet тощо. Для цього потрібні основні дані про SMTP-сервер, такі як хост, порт тощо.
З огляду на це, давайте подивимося, як використовувати SMTP-сервер для надсилання електронних листів WordPress.
PHPMailer у WordPress
WordPress по суті включає клас PHPMailer. Якщо ви хочете перевірити його, ви знайдете цей файл у wp-includes/PHPMailer/PHPMailer.php
.
Якщо ми налаштовуємо PHPMailer у WordPress, wp_mail
функція надсилає електронні листи через цей клас PHPMailer. У цьому випадку wp_mail
метод не залежить від налаштувань хостингу. Натомість вони використовують налаштування вашого SMTP-сервера.
Я збираюся використовувати цей клас PHPMailer для електронних листів. Оскільки цей клас уже включений у WordPress, нам не потрібно встановлювати бібліотеку PHPMailer окремо.
Можна використовувати плагін WP Mail SMTP, який також надсилає електронні листи за допомогою SMTP-серверів. Але я завжди рекомендую, якщо щось можна досягти, написавши невеликий фрагмент коду, тоді йдіть на це. Це хороша практика – використовувати якомога менше плагінів. Використання більшої кількості плагінів на веб-сайті збільшує додаткове навантаження на сервер. І іноді плагіни конфліктують між собою, що може потрапити на зламаний сайт.
Надішліть електронну пошту WordPress через SMTP-сервер
Перш ніж продовжувати, ви повинні бути готовими до своїх SMTP-даних, таких як хост, порт, ім’я користувача та пароль.
Якщо ви планували використовувати SMTP-сервер Gmail, то вам потрібно змінити деякі налаштування вашого облікового запису Google. Для цього увійдіть у свій обліковий запис Google і натисніть на обліковий запис. Опинившись на сторінці Обліковий запис, натисніть на Безпека. Прокрутіть униз, і ви знайдете налаштування "Менш безпечний доступ до програми". Встановіть його на ON.
Для налаштування PHPMailer у WordPress існує доступний хук, який називається phpmailer_init. За допомогою phpmailer_init
хука ми можемо отримати доступ до об’єкта PHPMailer і встановити для нього аргументи.
Відкрийте файл активної теми functions.php
та розмістіть наведений нижче код в кінці файлу.
add_action( 'phpmailer_init', 'set_phpmailer_details' );
function set_phpmailer_details( $phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'YOUR_SMTP HOST';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 'SMTP_PORT'; //25 or 465
$phpmailer->Username = 'SMTP_USERNAME';
$phpmailer->Password = 'SMTP_PASSWORD';
$phpmailer->SMTPSecure = 'ssl'; //ssl or tls
}
Обов’язково замініть заповнювачі фактичними значеннями. Скажімо, ми використовуємо SMTP-сервер Gmail, тоді наш код буде записаний наступним чином:
add_action( 'phpmailer_init', 'set_phpmailer_details' );
function set_phpmailer_details( $phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.googlemail.com'; //gmail smtp host
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 465;
$phpmailer->Username = 'GMAIL_USERNAME';
$phpmailer->Password = 'GMAIL_PASSWORD';
$phpmailer->SMTPSecure = 'ssl';
}
Вам потрібно вказати фактичне ім’я користувача та пароль свого облікового запису Gmail у наведеному вище коді. Тепер спробуйте надіслати електронний лист із веб-сайту WordPress, електронна пошта повинна запрацювати.
Налагодження проблеми електронної пошти
На даний момент, навіть після використання PHPMailer, ваші електронні листи не працюють, тоді, використовуючи wp_mail_failed
дію, ви можете виявити причину проблеми. Використовуйте наведений нижче код для налагодження проблеми.
add_action('wp_mail_failed', 'log_mailer_errors', 10, 1);
function log_mailer_errors( $wp_error ){
$fn = ABSPATH. '/mail.log'; // say you've got a mail.log file in your server root
$fp = fopen($fn, 'a');
fputs($fp, "Mailer Error: ". $wp_error->get_error_message() ."n");
fclose($fp);
}
Сподіваюся, ви розумієте, як надсилати електронні листи WordPress за допомогою SMTP-сервера. Будь ласка, поділіться своїми думками та пропозиціями в розділі коментарів нижче.
Статті, пов’язані з цим
- Надіслати електронну пошту за допомогою SMTP-сервера Gmail із PHP Script
- Відправка електронної пошти через сервер SMTP Gmail в Laravel
- Надіслати електронну пошту за допомогою Mailjet у PHP