基于PHPMailer实现表单双收件人邮件发送及基础PHP验证兜底
没问题,我帮你梳理一个符合需求的PHPMailer实现方案——先搞定PHP兜底验证和双邮箱发送逻辑,后续加jQuery和Ajax也能无缝衔接。
基础PHP表单验证 + PHPMailer双邮箱实现
第一步:HTML表单基础结构
先给你一个包含必填字段的基础表单,方便对应PHP验证逻辑:
<form method="POST" action="send-mail.php"> <div> <label for="name">姓名:</label> <input type="text" id="name" name="name"> </div> <div> <label for="email">你的邮箱:</label> <input type="email" id="email" name="email"> </div> <div> <label for="message">留言内容:</label> <textarea id="message" name="message" rows="5"></textarea> </div> <button type="submit">提交</button> <?php if (isset($error)) echo "<p style='color:red;'>$error</p>"; ?> </form>
第二步:PHP核心逻辑(send-mail.php)
这里包含服务器端兜底验证、PHPMailer配置和双邮箱差异化发送三个核心部分,代码里加了详细注释:
<?php // 引入PHPMailer(如果用Composer安装,记得引入自动加载文件) require 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; $error = ''; // 处理表单提交 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 1. 服务器端兜底验证(必须加,防止前端验证被绕过) $name = trim($_POST['name']); $userEmail = trim($_POST['email']); $message = trim($_POST['message']); if (empty($name) || empty($userEmail) || empty($message)) { $error = '请填写所有必填字段!'; } elseif (!filter_var($userEmail, FILTER_VALIDATE_EMAIL)) { $error = '请输入有效的邮箱地址!'; } else { // 2. 初始化并配置PHPMailer $mail = new PHPMailer(true); try { // 替换成你的邮件服务商SMTP配置(比如Gmail/企业邮箱) $mail->isSMTP(); $mail->Host = 'smtp.yourdomain.com'; $mail->SMTPAuth = true; $mail->Username = 'your-email@yourdomain.com'; // 你的发件邮箱 $mail->Password = 'your-email-password'; // 邮箱密码或应用专用密码 $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; // --- 第一封:发送给你的管理员邮箱 --- $mail->setFrom('your-email@yourdomain.com', '网站联系表单'); $mail->addAddress('your-admin-email@yourdomain.com', '管理员'); // 替换成你的邮箱 $mail->isHTML(true); $mail->Subject = '新的联系表单提交'; $mail->Body = " <h3>收到新留言</h3> <p><strong>提交人:</strong> $name</p> <p><strong>联系邮箱:</strong> $userEmail</p> <p><strong>留言内容:</strong><br>$message</p> "; $mail->AltBody = "收到新留言\n提交人: $name\n联系邮箱: $userEmail\n留言内容:\n$message"; $mail->send(); // --- 重置PHPMailer,准备发送给用户的确认邮件 --- $mail->clearAddresses(); // 清空之前的收件人 $mail->clearAttachments(); // --- 第二封:发送给提交用户的确认邮件(内容差异化) --- $mail->addAddress($userEmail, $name); $mail->Subject = '感谢你的留言!'; $mail->Body = " <h3>亲爱的 $name,</h3> <p>我们已经收到你的留言,会尽快回复你。</p> <p>你的留言内容如下:</p> <p>$message</p> <p>祝好,<br>网站团队</p> "; $mail->AltBody = "亲爱的 $name,\n我们已经收到你的留言,会尽快回复你。\n你的留言内容如下:\n$message\n祝好,\n网站团队"; $mail->send(); // 发送成功提示(后续可以改成Ajax返回JSON,现在先做基础版) echo "<p style='color:green;'>提交成功!确认邮件已发送到你的邮箱。</p>"; } catch (Exception $e) { $error = "邮件发送失败: {$mail->ErrorInfo}"; } } } ?>
关键注意事项
- SMTP配置替换:一定要把代码里的
Host、Username、Password换成你自己的邮件服务商信息(比如Gmail需要开启SMTP并使用应用专用密码) - 服务器端验证:哪怕前端加了
required,服务器端验证也不能少——防止恶意用户绕过前端直接提交空数据 - 异常捕获:用
try-catch包裹PHPMailer操作,方便排查发送失败的原因
后续扩展提示
等你加jQuery验证和Ajax的时候,只需要:
- 前端阻止表单默认提交,用Ajax把数据POST到
send-mail.php - 把PHP的输出改成JSON格式(比如
echo json_encode(['status' => 'success', 'msg' => '提交成功'])) - 前端根据返回的JSON结果显示对应提示,不用刷新页面
内容的提问来源于stack exchange,提问作者SyberKnight
相关产品推荐
相关产品推荐

