PHPmailer unspected HTTP ERROR 500,语法似乎没问题
PHPmailer unespected HTTP ERROR 500, syntax seems ok
我必须向更多用户发送邮件,并且我正在使用 for 循环,一切似乎都正常,直到我将这段代码置于我的循环中,我得到了 HTTP ERROR 500,但我不知道为什么。
if (isset($riga_inscad[$y])) {
//PHPMAILER: inizio variabili da modificare:
$server_smtp = 'xxx';
$username_smtp= 'xxx';
$password_smtp ='xxx';
$indirizzo_mittente = 'xxx.net@xx.net';
$descrizione_mittente = 'xxxx';
$indirizzo_destinatario = 'thevar';
//fine variabili da modificare
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require "src/Exception.php";
require "src/PHPMailer.php";
require "src/SMTP.php";
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->SMTPAuth = true;
$mail->Host = $server_smtp;
$mail->Port = 587;
$mail->SMTPSecure = "tls";
$mail->Username = $username_smtp;
$mail->Password = $password_smtp;
$mail->setFrom($indirizzo_mittente, $descrizione_mittente);
$mail->addAddress($indirizzo_destinatario);
$mail->Subject = "Scadenze SEA – Riepilogo mensile";
$mail->Body = '';
$mail->IsHTML(true);
if (!$mail->send())
echo $mail->ErrorInfo;
else
echo "ok!";
$mail->clearAllRecipients();
}
我注意到如果我删除这些行:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
HTTP ERROR 500 消失了,但我结束了 for 循环。
你能告诉我有什么问题吗? (我看不到日志 sry)
将 use
语句放在文件的顶部。它们并不像普通代码,更像是 compile-time 指令。如果您使用的是 PHP 的真正旧版本,它可能会在 use
语句本身上出错 – 您现在应该是 运行 PHP 7.4,很快就会是 8.0。
如果您 运行 这段代码来自循环内部,那么致命错误非常简单——如果您调用 require
多次加载同一个 class 文件, 你第二次会遇到致命错误。
您通过将 true
传递给构造函数来启用异常,但您没有 try/catch 块,因此您可能会遇到致命的未捕获异常。
导致 500 错误的任何原因都会出现在您的网络服务器的错误日志中。如果看不到日志,请使用 ini_set('display_errors', true);
.
启用错误消息显示
禁用 TLS 验证是一个非常糟糕的主意。这样做并不能解决任何问题,它只会隐藏问题并破坏系统的安全性。通过阅读 the PHPMailer troubleshooting guide 来正确修复它,其中详细介绍了该对象。
我必须向更多用户发送邮件,并且我正在使用 for 循环,一切似乎都正常,直到我将这段代码置于我的循环中,我得到了 HTTP ERROR 500,但我不知道为什么。
if (isset($riga_inscad[$y])) {
//PHPMAILER: inizio variabili da modificare:
$server_smtp = 'xxx';
$username_smtp= 'xxx';
$password_smtp ='xxx';
$indirizzo_mittente = 'xxx.net@xx.net';
$descrizione_mittente = 'xxxx';
$indirizzo_destinatario = 'thevar';
//fine variabili da modificare
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require "src/Exception.php";
require "src/PHPMailer.php";
require "src/SMTP.php";
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->SMTPAuth = true;
$mail->Host = $server_smtp;
$mail->Port = 587;
$mail->SMTPSecure = "tls";
$mail->Username = $username_smtp;
$mail->Password = $password_smtp;
$mail->setFrom($indirizzo_mittente, $descrizione_mittente);
$mail->addAddress($indirizzo_destinatario);
$mail->Subject = "Scadenze SEA – Riepilogo mensile";
$mail->Body = '';
$mail->IsHTML(true);
if (!$mail->send())
echo $mail->ErrorInfo;
else
echo "ok!";
$mail->clearAllRecipients();
}
我注意到如果我删除这些行:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
HTTP ERROR 500 消失了,但我结束了 for 循环。 你能告诉我有什么问题吗? (我看不到日志 sry)
将 use
语句放在文件的顶部。它们并不像普通代码,更像是 compile-time 指令。如果您使用的是 PHP 的真正旧版本,它可能会在 use
语句本身上出错 – 您现在应该是 运行 PHP 7.4,很快就会是 8.0。
如果您 运行 这段代码来自循环内部,那么致命错误非常简单——如果您调用 require
多次加载同一个 class 文件, 你第二次会遇到致命错误。
您通过将 true
传递给构造函数来启用异常,但您没有 try/catch 块,因此您可能会遇到致命的未捕获异常。
导致 500 错误的任何原因都会出现在您的网络服务器的错误日志中。如果看不到日志,请使用 ini_set('display_errors', true);
.
禁用 TLS 验证是一个非常糟糕的主意。这样做并不能解决任何问题,它只会隐藏问题并破坏系统的安全性。通过阅读 the PHPMailer troubleshooting guide 来正确修复它,其中详细介绍了该对象。