PHPMailer运行报Parse error: unexpected token "if"(第23行)如何解决?
问题修复方案
语法错误修复(直接解决unexpected "if"报错)
你代码第13行的属性调用存在标识符冲突:
你当前写的是$mail->SMTP = "true";,而你已经通过use PHPMailer\PHPMailer\SMTP;导入了SMTP类,PHP解析此处时会将SMTP识别为类名而非属性名,导致语句解析异常,后续的if语句被判定为非法标记。
PHPMailer中开启SMTP认证的正确属性为SMTPAuth,直接赋值布尔值即可,不需要用字符串包裹:
$mail->SMTPAuth = true;
其他运行错误修复
如果只改语法问题,代码还是无法正常发信,还需要修正以下几处错误:
- SMTP服务器地址拼写错误:原代码
smtp.gamil.com改为smtp.gmail.com - 密码属性大小写错误:原代码
$mail->password改为$mail->Password(PHPMailer属性严格区分大小写) - 发件人设置方法名大小写错误:原代码
$mail->setfrom改为$mail->setFrom - 端口号无需加引号,直接赋值数字即可:
$mail->Port = 587;
完整修复后代码
<?php require 'includes/PHPMailer.php'; require 'includes/SMTP.php'; require 'includes/Exception.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; $mail = new PHPMailer(); $mail->isSMTP(); $mail->Host = "smtp.gmail.com"; $mail->SMTPAuth = true; $mail->SMTPSecure = "tls"; $mail->Port = 587; $mail->Username = "astaquag@gmail.com"; $mail->Password = "*******"; $mail->Subject = "Mail from Astaqua.com"; $mail->setFrom("astaquag@gmail.com"); $mail->Body = "A.J Dep is the best "; $mail->addAddress("astaquag@gmail.com"); if ($mail->send()) { echo "Email Sent..!"; } else { echo "Error..!"; } $mail->smtpClose(); ?>
可选排查手段
如果修复后仍发送失败,可以在$mail->send()前添加一行$mail->SMTPDebug = SMTP::DEBUG_SERVER;,即可输出详细的SMTP交互日志,快速定位发送环节的问题。
内容的提问来源于stack exchange,提问作者Anjana Dep
相关产品推荐
相关产品推荐

