我在每周五中午运行的服务器上有一个cron-job。它是一个收件人列表,对应于WordPress实例中的用户列表 - 列表可能会不断变化(每次运行作业时都可以删除并添加电子邮件地址)。发送实际电子邮件的函数是wp_mail()
,它使用内置mail()
的php。
这项工作已经运行了好几周,直到最近我得到的是以下错误:
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 <reminderbot@somedomain.com>' . "\n";
$headers .= 'Bcc: ' . implode( ',', $recipients ) . "\r\n";
wp_mail( 'reminderbot@somedomain.com', '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' );
}