如何让网站的Send Message按钮直接发送邮件至指定邮箱?
解决网站联系表单直接发送消息的问题
问题原因
你用mailto:的方式本质是调用用户本地邮件客户端(比如Outlook)发送,所以会弹出客户端;而且默认的表单提交格式是URL编码,导致邮件内容变成name=xxx&email=xxx这种混乱格式。要实现网站直接发送,需要借助后端服务或第三方表单工具,下面给几个适合新手的方案:
方案1:优化mailto格式(仍用客户端,但内容正常)
如果暂时不想折腾后端,至少可以让邮件内容格式清晰,修改form标签为:
<form method="get" action="mailto:my_email@gmail.com" enctype="text/plain">
- 改成
method="get"+enctype="text/plain"后,邮件内容会变成换行的规整格式:name=你的名字 email=你的邮箱 subject=主题 message=消息内容 - 缺点:还是会打开用户本地邮件客户端,无法完全在网站内完成发送。
方案2:用免费第三方表单服务(完全网站内发送)
适合没有后端基础的新手,这类服务会帮你处理邮件发送流程:
- 注册一个免费的邮件表单服务(比如EmailJS、Formspree)
- 按照服务指引创建邮件模板,对应表单里的
name、email、subject、message字段 - 复制服务生成的专属提交地址,替换form标签里的
action值,保持method="post":<form method="post" action="这里填服务给你的提交地址"> - 测试提交,消息会直接发送到你的邮箱,不会打开用户的邮件客户端。
方案3:用PHP后端脚本(自己搭建简单服务)
如果你的网站主机支持PHP,可以写一个简单的发送脚本:
- 在网站根目录新建一个
sendmail.php文件,粘贴以下代码(替换成你的邮箱):
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { // 获取表单数据 $name = trim($_POST['name']); $email = trim($_POST['email']); $subject = trim($_POST['subject']); $message = trim($_POST['message']); // 收件人邮箱 $to = "my_email@gmail.com"; // 邮件头信息 $headers = "From: {$name} <{$email}>\r\n" . "Reply-To: {$email}\r\n" . "Content-Type: text/plain; charset=UTF-8\r\n"; // 发送邮件 if (mail($to, $subject, $message, $headers)) { // 发送成功跳转到感谢页面(可自行创建简单html页面) header("Location: thank-you.html"); } else { echo "发送失败,请重试"; } exit; } ?>
- 修改form标签的
action为这个脚本的路径:
<form method="post" action="sendmail.php">
- 注意:部分主机需要配置邮件发送功能,若发送失败可联系主机商确认是否开启PHP mail函数。
内容的提问来源于stack exchange,提问作者Penguin
相关产品推荐
相关产品推荐

