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

关于自动回复邮件发送申请表及回收带附件申请表的技术问询

解决申请人申请表邮件发送与回传需求的代码修正

需求说明

需要实现以下流程:

  • 申请人填写姓名、邮箱后提交表单
  • 系统自动发送带申请表模板的邮件到申请人邮箱
  • 申请人填写申请表后,可附上相关文件通过原表单回传

原代码存在的问题

  1. HTML表单按钮为type="button",无法触发表单提交动作
  2. PHP中收件人$to错误使用了申请人姓名,应该是申请人邮箱
  3. 申请表模板的获取逻辑错误:原代码试图从用户上传的文件中读取模板,实际应该从服务器预存的模板文件读取
  4. 邮件内容拼接时$message .= $message会导致无限循环,覆盖原始提示内容
  5. 缺少输入验证(姓名、邮箱必填,邮箱格式校验)
  6. 文件类型、路径的变量取值完全错误,不符合$_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:13:17