我正在使用PHP、HTML、SMTP 服务器和 PHPmailer创建一个带有用户输入验证的联系我们表单。但是按“提交”按钮后,它给了我一个错误:
无效地址:(发件人): 致命错误:未捕获 PHPMailer\PHPMailer\Exception:无效地址:(来自):在 C:\xampp\htdocs\RESPONSIVE 中 SITE3_2\供应商\phpmailer\phpmailer\src\PHPMailer.php:1324 堆栈跟踪: #0 C:\xampp\htdocs\RESPONSIVE SITE3_2\send-email.php(74): PHPMailer\PHPMailer\PHPMailer->setFrom('', '') #1 {main} 抛出在 C:\xampp\htdocs\RESPONSIVE SITE3_2\vendor\phpmailer\phpmailer\src\PHPMailer.php 第 1324 行
PHP 代码:
SMTPDebug = SMTP::DEBUG_SERVER; $mail->isSMTP(); $mail->SMTPAuth = true; $mail->Host = "smtp.gmail.com"; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; require_once 'config.php'; $mail->Username = SMTP_USERNAME; $mail->Password = SMTP_PASSWORD; $mail->setFrom($email, $name); $mail->addAddress("myemail@gmail.com", "Ads"); $mail->Subject = $subject; $mail->Body = "Name: $name\nEmail: $email\n\n$message"; $mail->send(); header("Location: sent.html"); ?>
HTML 代码
我尝试了不同的教程 - 不成功。 我需要此表格
我对此很陌生,请用非常简单的语言解释一下:)
诊断
如果任一验证
if
语句为 true,则将设置一个字符串变量$emailErr
。然后代码再次退出
if
块,脚本继续其愉快的方式并尝试发送电子邮件。代码中没有任何逻辑可以阻止这种情况。最后,
$emailErr
永远不会被使用,因为代码将用户重定向到另一个不能涉及该变量的 HTML 页面。解决方案
如果任何验证失败,您需要一些额外的逻辑来告诉代码跳过电子邮件发送部分。巧妙地实现此目的的一种方法非常简单,即使用“标志”变量。
例如:
附注顺便说一句,您的正则表达式限制太多 - 请参阅允许使用哪些字符在电子邮件地址中?。由于您已经在使用
FILTER_VALIDATE_EMAIL
,因此在任何情况下您都不需要它。