PHPMailer SMTP联系表单报错:Undefined property求助
错误原因分析:Undefined property: PHPMailer\PHPMailer\Exception::$getMessage
问题描述
开发基于SMTP的联系表单时,提交数据触发如下错误:
Undefined property: PHPMailer\PHPMailer\Exception::$getMessage in C:\xampp\htdocs\contact\mail.php on line 32
关联PHP代码
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once 'PHPMailer/src/Exception.php'; require_once 'PHPMailer/src/PHPMailer.php'; require_once 'PHPMailer/src/SMTP.php'; $mail = new PHPMailer (true); $alert = ''; if (isset($_POST['submit'])) { $name = $_POST['name']; $email = $_POST['email']; $subject = $_POST['subject']; $message = $_POST['message']; try{ $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'myEmail@gmail.com'; $mail ->Password = 'appPassword'; $mail->SMTPSecure = "tls"; $mail->Port = '587'; $mail->setFrom( 'myEmail@gmail.com'); $mail->addAddress('myEmail@gmail.com'); $mail->isHTML (true); $mail->Subject = 'Message Received from Contact: ' . $name; $mail->Body = "Name: $name <br>Email: $email<br>Subject: $subject<br>Message: $message"; $mail->send(); $alert= "<div class='alert-success'><span>Message Sent! Thanks for contact us.</span></div>"; } catch (Exception $e) { $alert = "<div class='alert-error'><span>' . $e->getMessage().'</span></div>"; } } ?>
关联表单代码
<form name="form1" method="post"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <input type="text" class="form-control input-lg" name="name" id="name" placeholder="Enter name" required="required" /> </div> </div> <div class="col-md-6"> <div class="form-group"> <input type="email" class="form-control input-lg" name="email" id="email" placeholder="Enter email" required="required" /> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="form-group"> <input type="text" class="form-control input-lg" name="subject" id="subject" placeholder="Subject" required="required" /> </div> </div> </div> <div class="col-md-12"><?php echo $alert; ?></div> <div class="row"> <div class="col-md-12"> <div class="form-group"> <textarea name="message" id="message" class="form-control" rows="4" cols="25" required="required" placeholder="Message" style="height: 170px"></textarea> </div> <button type="submit" class="btn btn-skin btn-block" name="submit" id="submitcontact">Submit</button> </div> </div> </form>
错误原因及修复方案
核心错误原因
catch块的字符串拼接存在语法混乱:你用双引号包裹整个字符串,但内部错误混入了单引号和拼接符号,导致PHP解析时忽略了getMessage()的方法调用括号,将$e->getMessage误判为访问不存在的属性,从而触发错误。
修复代码
将catch块代码修改为以下任意一种正确写法:
写法1:双引号正确拼接
catch (Exception $e) { $alert = "<div class='alert-error'><span>" . $e->getMessage() . "</span></div>"; }
写法2:单引号包裹拼接
catch (Exception $e) { $alert = '<div class="alert-error"><span>' . $e->getMessage() . '</span></div>'; }
额外优化点
修正$mail ->Password中的多余空格,改为$mail->Password,避免潜在的语法解析问题。
内容的提问来源于stack exchange,提问作者Juman Bw
相关产品推荐
相关产品推荐

