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

网站联系表单提交跳转404且无法收信,求修复方案

修复表单邮件发送问题:解决404错误与无法接收邮件的问题

首先看你代码里的几个关键问题,这直接导致了当前的错误:

1. 表单Action的冲突与语法错误

你的代码里存在两个核心问题:

  • 错误地将<form action="mailto:pedroccoutinho@hotmail.com" method="post" enctype="text/plain">写在了<style>标签内部,这是完全的语法错误——form标签不能放在样式标签里,这部分配置根本不会生效。
  • 页面实际渲染的表单使用了<form action="/action_page.php">,但你的服务器上并没有这个action_page.php文件,所以提交时自然跳转到404页面。

2. 两种可行的修复方案

方案一:正确使用mailto:(依赖用户本地邮件客户端)

如果你想继续用mailto方式,需要修正代码,把正确的form属性放到页面的form标签上,同时注意这种方式的局限性:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {font-family: Roboto, sans-serif;}
        input[type=text], select, textarea {
            width: 100%;
            padding: 19px;
            border: 1px solid #ccc;
            border-radius: 4px;
            box-sizing: border-box;
            margin-top: 6px;
            margin-bottom: 1px;
            resize: vertical;
        }
        input[type=submit] {
            background-color: #f57c00;
            color: white;
            padding: 16px 90px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        input[type=submit]:hover {
            background-color: #ffad42;
        }
        .container {
            border-radius: 5px;
            background-color: #ffffff;
            padding: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <!-- 修正后的form标签 -->
        <form action="mailto:pedroccoutinho@hotmail.com" method="post" enctype="text/plain">
            <label for="fname">Seu nome</label>
            <input type="text" id="fname" name="firstname" placeholder="Seu nome">
            
            <label for="subject">Mensagem</label>
            <textarea id="subject" name="subject" placeholder="Deixe sua mensagem aqui" style="height:200px"></textarea>
            
            <input type="submit" value="Enviar">
        </form>
    </div>
</body>
</html>

⚠️ 注意:这种方式的局限性很大:

  • 用户必须在本地安装并配置好邮件客户端(比如Outlook、Thunderbird)才能使用。
  • 很多浏览器会拦截这种mailto请求,或者用户可能没有设置默认邮件客户端,导致发送失败。
  • 你无法确认用户是否真的发送了邮件,也没有错误反馈机制。

方案二:使用服务器端脚本处理(推荐,稳定可靠)

要真正可靠地接收邮件,必须用服务器端语言(比如PHP)来处理表单提交,这样邮件是从你的服务器发送出去的,不依赖用户本地环境。

步骤如下:

  1. 在你的服务器上创建一个send_email.php文件,内容如下:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 获取表单数据并去除多余空格
    $name = trim($_POST["firstname"]);
    $message = trim($_POST["subject"]);
    
    // 收件人邮箱
    $to = "pedroccoutinho@hotmail.com";
    $subject = "Nova mensagem do site: " . $name;
    
    // 组装邮件内容
    $email_content = "Nome: $name\n\n";
    $email_content .= "Mensagem:\n$message\n";
    
    // 设置邮件头,替换noreply@seusite.com为你的域名邮箱
    $email_headers = "From: $name <noreply@seusite.com>";
    
    // 发送邮件
    if (mail($to, $subject, $email_content, $email_headers)) {
        // 发送成功,跳转到感谢页面
        header("Location: thank-you.html");
        exit;
    } else {
        // 发送失败,显示错误提示
        echo "Oops! Houve um erro ao enviar sua mensagem. Por favor, tente novamente mais tarde.";
    }
}
?>
  1. 修改你的HTML表单,指向这个PHP文件:
<form action="send_email.php" method="post">
    <label for="fname">Seu nome</label>
    <input type="text" id="fname" name="firstname" placeholder="Seu nome" required>
    
    <label for="subject">Mensagem</label>
    <textarea id="subject" name="subject" placeholder="Deixe sua mensagem aqui" style="height:200px" required></textarea>
    
    <input type="submit" value="Enviar">
</form>
  1. (可选)创建一个thank-you.html页面,作为发送成功后的跳转页面,提升用户体验。

这种方式的优势:

  • 不依赖用户本地邮件客户端,所有用户都能正常使用。
  • 你可以控制邮件发送的逻辑,添加输入验证、垃圾邮件过滤等功能。
  • 能给用户明确的成功/失败反馈。

另外,还要确保你的服务器支持PHP的mail()函数,或者可以使用更可靠的邮件库(比如PHPMailer)来降低邮件被标记为垃圾邮件的概率。


内容的提问来源于stack exchange,提问作者Pedro Coutinho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:54:11