wp_mail_failed хук-подіяWP 4.4.0

Спрацьовує при помилці надсилання листа функцією 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 з вказаною помилкою та іншими даними.

Приклади

0

#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

Використання не знайдено.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *