如何连接HTML消息发送表单与PHP 实现表单消息直达Gmail邮箱
联系表单对接PHP发信到Gmail实现方案
你的现有HTML表单已经正确配置了action="action.php"和method="post",只需要少量调整表单字段、编写对应的PHP后端处理逻辑即可实现需求,具体步骤如下:
1. 调整表单字段的不规范配置
你现有表单的部分name属性存在语义不清、带空格的问题,会提升后端参数解析的出错概率,建议做如下修改:
- 姓名输入框的
name="text"修改为name="fullname",语义明确便于后端接收 - 提交按钮的
name="send message"修改为name="submit_msg",去掉属性值里的空格,兼容所有服务器环境
其余表单代码不需要改动。
2. 后端action.php实现逻辑
注意:PHP原生自带的mail()函数直接发信到Gmail的成功率极低,绝大多数情况会被Gmail反垃圾系统拦截,推荐使用SMTP协议配合Gmail应用专用密码发信,稳定性可达99%以上。
前置准备
- 给你的Gmail账号开启两步验证,在账号安全设置里生成16位长度的应用专用密码,这个密码仅用于SMTP发信,不会泄露你的主账号密码
- 将PHPMailer核心库文件上传到网站根目录,无需额外安装其他服务
不要在代码里硬编码Gmail主账号登录密码,必须使用应用专用密码,避免账号泄露风险。
完整代码
<?php // 拦截非POST方式的访问 if ($_SERVER['REQUEST_METHOD'] !== 'POST') { exit("非法访问"); } // 引入PHPMailer核心文件 use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'PHPMailer/src/Exception.php'; require 'PHPMailer/src/PHPMailer.php'; require 'PHPMailer/src/SMTP.php'; // 接收并过滤表单提交的参数 $fullname = trim(strip_tags($_POST['fullname'])); $user_email = trim(strip_tags($_POST['email'])); $msg_content = trim(strip_tags($_POST['message'])); // 基础参数校验 if (empty($fullname) || empty($user_email) || empty($msg_content)) { exit("<script>alert('请填写所有必填字段');history.back();</script>"); } if (!filter_var($user_email, FILTER_VALIDATE_EMAIL)) { exit("<script>alert('请输入有效的邮箱地址');history.back();</script>"); } $mail = new PHPMailer(true); try { // SMTP连接配置 $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = '替换为你自己的Gmail地址@gmail.com'; $mail->Password = '替换为你生成的16位Gmail应用专用密码'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; $mail->CharSet = 'UTF-8'; // 收发件人配置 $mail->setFrom('替换为你自己的Gmail地址@gmail.com', '网站联系表单'); $mail->addAddress('替换为你自己的Gmail地址@gmail.com'); // 收件箱为你自己的Gmail $mail->addReplyTo($user_email, $fullname); // 配置回复地址为访客填写的邮箱,直接点回复即可给访客回信 // 邮件内容配置 $mail->isHTML(false); // 纯文本格式发信,降低被判定为垃圾邮件的概率 $mail->Subject = "网站新联系消息 - 来自".$fullname; $mail->Body = "你收到一条来自网站联系表单的新消息:\n". "访客姓名:".$fullname."\n". "访客邮箱:".$user_email."\n". "消息内容:\n".$msg_content; $mail->send(); echo "<script>alert('消息发送成功,我们会尽快与你联系');history.back();</script>"; } catch (Exception $e) { echo "<script>alert('消息发送失败,请稍后重试');history.back();</script>"; } ?>
3. 上线前注意事项
- 网站必须部署支持HTTPS的服务器环境,Gmail SMTP服务会拒绝非加密来源的发信请求
- 建议给表单增加一层简单的图形验证码或人机验证,避免被爬虫批量提交垃圾消息
- 首次测试发信如果没在收件箱找到邮件,先检查Gmail的垃圾邮件文件夹,确认没有被拦截后再正式上线
- 不推荐使用Gmail API方式发信,配置流程比SMTP复杂3倍以上,普通企业站、个人站用SMTP方案完全足够
内容的提问来源于stack exchange,提问作者Ani Narzullo
相关产品推荐
相关产品推荐

