关于自动回复邮件发送申请表及回收带附件申请表的技术问询
解决申请人申请表邮件发送与回传需求的代码修正
需求说明
需要实现以下流程:
- 申请人填写姓名、邮箱后提交表单
- 系统自动发送带申请表模板的邮件到申请人邮箱
- 申请人填写申请表后,可附上相关文件通过原表单回传
原代码存在的问题
- HTML表单按钮为
type="button",无法触发表单提交动作 - PHP中收件人
$to错误使用了申请人姓名,应该是申请人邮箱 - 申请表模板的获取逻辑错误:原代码试图从用户上传的文件中读取模板,实际应该从服务器预存的模板文件读取
- 邮件内容拼接时
$message .= $message会导致无限循环,覆盖原始提示内容 - 缺少输入验证(姓名、邮箱必填,邮箱格式校验)
- 文件类型、路径的变量取值完全错误,不符合
$_FILES数组的结构
修正后的代码
HTML代码
<form action="application.php" method="POST" enctype="multipart/form-data"> <input type="text" name="name" placeholder="你的姓名" required><br><br> <input type="email" name="email" placeholder="你的邮箱" required><br><br> <p>填写完成后,请上传此申请表及相关文件,然后点击下方按钮提交</p> <input type="file" name="application_docs" multiple><br><br> <button class="btn btn-green" type="submit">提交申请</button> </form>
PHP代码
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 输入验证 $name = trim($_POST['name'] ?? ''); $email = trim($_POST['email'] ?? ''); if (empty($name) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { die("请填写有效的姓名和邮箱!"); } // 服务器预存的申请表模板路径(请根据实际路径修改) $template_path = 'assets/img/SF 02A APPLICATION FORM.docx'; $template_name = 'SF 02A 申请表.docx'; $template_mime = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; // 检查模板文件是否存在 if (!file_exists($template_path)) { die("申请表模板文件不存在,请检查路径!"); } // 发送自动回复邮件 $to = $email; $subject = '申请确认:请填写并回传申请表'; $original_message = "感谢你加入我们团队的意向!附件是申请表模板,请仔细填写。完成后请将申请表及相关证明文件通过原表单回传。如有任何问题,请随时联系我们。"; $headers = 'From: 管理员 <your.domain@website.co.uk>' . "\r\n"; // 处理邮件附件和MIME格式 $boundary = md5(time()); $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\n"; // 组装邮件内容 $message = "--{$boundary}\r\n"; $message .= "Content-Type: text/plain; charset=\"UTF-8\"\r\n"; $message .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $message .= $original_message . "\r\n\r\n"; // 添加申请表附件 $file_content = file_get_contents($template_path); $base64_content = base64_encode($file_content); $message .= "--{$boundary}\r\n"; $message .= "Content-Type: {$template_mime}; name=\"{$template_name}\"\r\n"; $message .= "Content-Disposition: attachment; filename=\"{$template_name}\"\r\n"; $message .= "Content-Transfer-Encoding: base64\r\n\r\n"; $message .= chunk_split($base64_content) . "\r\n"; $message .= "--{$boundary}--\r\n"; // 发送邮件 if (mail($to, $subject, $message, $headers)) { echo "邮件发送成功!请查收你的邮箱获取申请表。"; } else { echo "邮件发送失败,请检查服务器邮件配置!"; } // (可选)处理用户回传的文件,比如保存到服务器或转发到管理员邮箱 if (!empty($_FILES['application_docs']['name'][0])) { // 这里添加文件处理逻辑,比如保存到指定目录 $upload_dir = 'uploads/'; if (!is_dir($upload_dir)) mkdir($upload_dir, 0755); foreach ($_FILES['application_docs']['tmp_name'] as $key => $tmp_name) { $file_name = basename($_FILES['application_docs']['name'][$key]); move_uploaded_file($tmp_name, $upload_dir . $file_name); } echo "<br>你上传的文件已成功保存!"; } } ?>
关键说明
- 请确保服务器上存在预存的申请表模板,并且路径
$template_path配置正确 - 邮件发送依赖服务器的
mail()函数配置,如果发送失败,建议检查PHP的邮件配置或使用PHPMailer等第三方库 - 文件上传部分添加了
multiple属性,支持上传多个文件,同时添加了基本的文件保存逻辑(可根据需求调整)
内容的提问来源于stack exchange,提问作者Dave Crouch
相关产品推荐
相关产品推荐

