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/

解决方法

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

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

这是因为您正在尝试加载WordPress中不再存在的旧版本的PHPMailer,从而导致致命错误。您不必自己加载PHPMailer,因为WordPress是标准提供的,因此请参考their docs for how to send messages,以及如何创建a hook to inject a custom configuration

您仍然可以自己加载它,但是这样做可以绕开WP为您所做的所有工作,并对它所伴随的一切负责,包括正确加载类。为了帮助更新代码以使其与PHPMailer 6.x一起使用,请阅读the upgrade guidethis question

,

WordPress现在已将PHP邮件程序移至subdirecotry,您需要按以下方式更新代码:

在函数顶部添加:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

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

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

,

如果您想在插件中使用它,并保持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 PHPMailer\PHPMailer\PHPMailer( true );
}