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
Використання не знайдено.