У меня есть cron-задание на сервере, которое запускается каждую пятницу в полдень. Это список получателей, который соответствует списку пользователей в экземпляре WordPress — список может постоянно меняться (адреса электронной почты могут удаляться и добавляться при каждом запуске задания). Функция для отправки фактического сообщения электронной почты wp_mail()
который использует встроенный PHP mail()
,
Задание работало отлично в течение нескольких недель до недавнего времени, где я получаю только следующую ошибку:
Delivery failed: unknown error
Я пытался запустить скрипт через командную строку, используя php
команда и выводит ту же ошибку. Я попытался отладить его, используя только мой адрес электронной почты в качестве единственного получателя, и он работает нормально, что наводит меня на мысль, что это проблема с одним из адресов электронной почты в списке адресов электронной почты.
Мои вопросы, как я могу отладить такое неоднозначное сообщение об ошибке? Во-вторых, как я могу найти адрес электронной почты «виновника», который может вызывать проблемы? Есть ли способ отключить постфикс так wp_mail
на самом деле не отправлять электронные письма?
Вот код, который рассылает электронные письма:
<?php
// Get all user emails
$user_query = new WP_User_Query( array( 'fields' => array( 'ID', 'user_email' ) ) );
if ( ! empty( $user_query->results ) ) {
$recipients = array();
$members = $user_query->results;
// sort according to last name
usort($members, create_function('$a, $b', 'return strnatcasecmp($a->last_name, $b->last_name);'));
foreach ( $members as $member ) {
if( get_the_author_meta( "active_user", $member->ID ) == "yes" ){
if ( filter_var($member->user_email, FILTER_VALIDATE_EMAIL) ) {
array_push( $recipients, $member->user_email );
}else{
echo $member->user_email . ' is an invalid email!' . PHP_EOL;
}
}
}
}
// Build and send the reminder email
if( !empty( $settings['weekly_email']) ){
add_filter( 'wp_mail_content_type', 'set_html_content_type' );
function set_html_content_type() {
return 'text/html';
}
$reminder_message = 'This is your reminder...'
$headers = 'From: Reminder bot <[email protected]>' . "\n";
$headers .= 'Bcc: ' . implode( ',', $recipients ) . "\r\n";
wp_mail( '[email protected]', 'Your reminder', $reminder_message, $headers );
// Reset content-type to avoid conflicts -- http://core.trac.wordpress.org/ticket/23578
remove_filter( 'wp_mail_content_type', 'set_html_content_type' );
}
Задача ещё не решена.
Других решений пока нет …