PHPmailer未检查HTTP错误500,语法似乎正常
我必须向更多的用户发送邮件,我正在使用for循环,在我将此代码放入循环之前,一切似乎都正常工作,我得到了HTTP错误500,但我不知道为什么PHPmailer未检查HTTP错误500,语法似乎正常,php,phpmailer,Php,Phpmailer,我必须向更多的用户发送邮件,我正在使用for循环,在我将此代码放入循环之前,一切似乎都正常工作,我得到了HTTP错误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.n
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错误500消失了,但我结束了for循环。
你能告诉我怎么了吗?(我看不到日志sry)将
使用语句放在文件顶部。它们实际上不像普通代码,更像是编译时指令。如果您使用的是一个非常旧的PHP版本,那么use
语句本身可能会出错–您现在应该运行PHP7.4,很快就会运行8.0
如果从循环内部运行此代码,则致命错误非常简单–如果调用require
多次加载同一类文件,则第二次将出现致命错误
您通过将true
传递给构造函数来启用异常,但是您没有try/catch块,因此可能会得到一个致命的未捕获异常
导致500错误的原因将出现在web服务器的错误日志中。如果看不到日志,请使用ini\u集启用错误消息显示('display\u errors',true)代码>
禁用TLS验证是一个非常糟糕的主意。这样做并不能解决任何问题,它只是隐藏了问题并破坏了系统的安全性。通过阅读该主题的详细信息来正确修复它。500错误是一条通用的错误消息,几乎涵盖了PHP脚本可能出现的每一个错误。检查服务器错误日志以了解确切的错误消息。首先,请包括for循环。我在你的帖子里看不到。第二,为什么要设置$indirizzo_destinatario='thevar'代码>thevar
不是电子邮件地址?您的代码是否在函数中?谢谢!这就解决了问题。这与此无关,但我想问一下,为什么在php中,当我回显一个数组时,结果会是“array”?因为它的empity?这就是PHP将数组转换为字符串的方式。在数组上执行echo
时,会有一个从数组到字符串的隐式类型转换,这是没有定义好的。如果您想在调试时查看数组中的内容,最好使用var_dump()
或print_r()
。当我使用命令print_r()时,我得到的是数组([0]=>array()),这意味着您传入的数组包含一个空数组元素,如果您说:$a=[[]]代码>