wp_mail_failed
Спрацьовує при помилці надсилання листа функцією wp_mail() .
Використання
add_action( 'wp_mail_failed', 'wp_kama_mail_failed_action' );
/**
* Function for `wp_mail_failed` action-hook.
*
* @param .
*
* @return void
*/
function wp_kama_mail_failed_action( $error ){
// action...
}- $error
(WP_Error) - Об’єкт класу
WP_Error з вказаною помилкою та іншими даними.
Приклади
#1 Увімкнення SMTP для Beget та дебаг помилок
Нотатка для тих, хто має хостинг у Beget , має доменну пошту і хоче налаштувати відправку листів через SMTP.
У більшості випадків SMTP налаштовується в WordPress кодом, який ми публікували в нотатці дебаг WordPress (помилки писалися у файл /wp-content/debug.log ).
Отже, використовуваний код:
// Конфігуруємо підключення SMTP
add_action( 'phpmailer_init', 'beget_smtp_enable');
function beget_smtp_enable( PHPMailer $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->SMTPAuth = true;
$phpmailer->Host = 'smtp.beget.com';
$phpmailer->Port = '2525';
$phpmailer->Username = '[email protected]';
$phpmailer->Password = 'a2G&n60A';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = '[email protected]';
$phpmailer->FromName = get_bloginfo( 'name' );
}
add_action( 'wp_mail_failed', [$this, 'mail_failed']]);
function mail_failed( $wp_error ) {
error_log (print_r ($ wp_error, true));
}У потрібному місці використав відправку листа:
wp_mail( '[email protected]', 'Тестовий лист', 'Це тестовий лист!');
У результаті змінної $wp_error була така інформація:
WP_Error Object ( [errors] => Array ( [wp_mail_failed] => Array ( [0] => The following from address failed: [email protected] : MAIL FROM command failed, LTD BeGet: MAIL FROM мусить матч AUTHENTICATED USER (MAIL FROM: '[email protected]' != AUTH LOGIN: '[email protected]') ,550,SMTP server error: MAIL FROM Command failed Detail: LTD BeGet: MAIL FROM мусить матч AUTHENTICATED USER (MAIL FROM: '[email protected]' != AUTH LOGIN: '[email protected]') SMTP code: 550 ) ) [error_data] => Array ( [wp_mail_failed] => Array ( [to] => Array ( [0] => [email protected] ) [subject] => Тестовий лист [message] => Це тестовий лист! [headers] => Array() [attachments] => Array() [phpmailer_exception_code] => 2 ) ) [additional_data:protected] => Array() )
Помилка каже, що пошта користувача SMPT не збігається із зазначеною у параметрі From, хоча в коді вона збігається. Вивчаючи код класу PHPMailer , можна зустріти параметр Sender. Доповнивши код їм, проблему було вирішено.
Робочий варіант коду
// Конфігуруємо підключення SMTP
add_action( 'phpmailer_init', 'beget_smtp_enable');
function beget_smtp_enable( PHPMailer $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->SMTPAuth = true;
$phpmailer->Host = 'smtp.beget.com';
$phpmailer->Port = '2525';
$phpmailer->Username = '[email protected]';
$phpmailer->Password = 'a2G&n60A';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = '[email protected]';
$phpmailer->FromName = get_bloginfo( 'name' );
$phpmailer->Sender = '[email protected]';
}З такими параметрами пошта на gmail та інші приходять без проблем.
До речі, якщо з коду видалити параметри Fromі FromName, то gmail позначить ваш лист наступним чином:
Тому вказуйте всі параметри, щоб не було проблем.
список змін
| З версії 4.4.0 | Введено. |
Де викликається хук
Де використовується хук у WordPress
Використання не знайдено.
