You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:41:50