PHP邮件程序不适用于wordpress 5.5



我在wordpress 5.4上有一个网站,最近它更新到了5.5版本,现在我无法使用PHPMailer发送电子邮件。我得到的错误是";你的网站上出现了一个严重错误。以下代码将完全适用于以前的wordpress版本。

include_once( ABSPATH . WPINC . '/class-phpmailer.php' );
include_once( ABSPATH . WPINC . '/includes/PHPMailer/PHPMailerAutoload.php' );
$mailserver_url   = "[mailserver_url]";
$mailserver_login =  "[mailserver_login]";
$mailserver_pass  =  '[mailserver_pass]';
$mailserver_port  =  '[mailserver_port]';
$email = '[email]';
$mail             = new PHPMailer;
$mail->ClearAttachments();
$mail->isSMTP();
$mail->SMTPAuth    = true;
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer'       => false,
'verify_peer_name'  => false,
'allow_self_signed' => false
)
);
$mail->Host        = $mailserver_url;
$mail->Port        = $mailserver_port;
$mail->Username    = $mailserver_login;
$mail->Password    = $mailserver_pass;
$mail->setFrom( $email );
$mail->addReplyTo( $mailserver_login );
$mail->addAddress( $email );
$mail->Subject = 'The Subject';
$mail->isHTML();
$mail->Body = '<p>Helloo</p>';
if ( $mail->Send() ) {
echo 'sent';
}

我看了下面的文章,但没能把它修好https://wordpress.org/support/topic/fatal-error-after-updating-to-wp-5-5/

如果你想在插件中使用它,并使PHP Mailer与旧的WordPress版本兼容,这是一个完整的解决方案。

global $wp_version;
if( $wp_version < '5.5') {
require_once(ABSPATH . WPINC . '/class-phpmailer.php');
require_once(ABSPATH . WPINC . '/class-smtp.php');
$mail = new PHPMailer( true );
}
else {
require_once(ABSPATH . WPINC . '/PHPMailer/PHPMailer.php');
require_once(ABSPATH . WPINC . '/PHPMailer/SMTP.php');
require_once(ABSPATH . WPINC . '/PHPMailer/Exception.php');
$mail = new PHPMailerPHPMailerPHPMailer( true );
}

这是因为您试图加载WordPress中不再存在的旧版本PHPMailer,结果出现了致命错误。你不应该自己加载PHPMailer,因为WordPress将其作为标准提供,所以请参阅他们的文档,了解如何发送消息,以及如何创建钩子来注入自定义配置。

你仍然可以自己加载它,但这样做可以绕过WP为你所做的一切,并对随之而来的一切负责,包括正确加载类。要帮助更新您的代码以使用PHPMailer6.x,请阅读升级指南或此问题。

随着WordPress升级到5.5版本,可能需要包含PHPMailer SMPT.php文件。

include_once (ABSPATH . WPINC . '/class-phpmailer.php');
include_once (ABSPATH . WPINC . '/PHPMailer/SMTP.php');
$mail = new PHPMailer ();

WordPress现在已经将PHP mailer移到了一个子目录中,您需要更新您的代码,如下所示:

在您的功能顶部添加:

use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
use PHPMailerPHPMailerSMTP;

将您的代码进一步更新为:

require_once(ABSPATH . WPINC . "/PHPMailer/PHPMailer.php");
require_once(ABSPATH . WPINC . "/PHPMailer/Exception.php");       
require_once(ABSPATH . WPINC . "/PHPMailer/SMTP.php");
$mail = new PHPMailer();

最新更新