mailto链接仅预填信息,需用户手动发送;必须对subject和body进行URL编码(如encodeURIComponent),多收件人用英文逗号分隔,表单需设method="post"和enctype="text/plain"。

mailto 链接能打开邮件客户端,但不能“一键发送”——它只预填信息,最终发送必须用户手动点击。 这是根本前提,绕不开。所有“自动发送”宣传都是误导,浏览器无权替用户发邮件。
mailto 链接写法与参数编码
直接写 href="mailto:admin@example.com?subject=反馈&body=内容" 是错的:中文、空格、换行都会导致截断或解析失败。必须对 subject 和 body 值做 URL 编码。
- JavaScript 中用
encodeURIComponent(),例如:encodeURIComponent("你好,订单#123")→%E4%BD%A0%E5%A5%BD%EF%BC%8C%E8%AE%A2%E5%8D%95%23123 - body 里换行要用
%0A(不是\n或<br>
),否则所有内容会挤成一行 - 多个收件人用英文逗号分隔:
mailto:a@example.com,b@example.com,不要加空格 -
cc和bcc参数支持,但 iOS Mail 会忽略bcc,别依赖它保密
表单中用 action="mailto:" 的关键配置
把 mailto 当作表单 action 看似方便,但比纯链接更易出错。核心就三点:
-
method必须为post(不是get),否则长表单内容可能被截断 -
enctype必须为text/plain(不是默认的application/x-www-form-urlencoded),否则邮件正文显示为name1=value1&name2=value2而非可读格式 - 表单字段的
name属性会直接变成邮件正文里的标签,例如name="电话"→ 正文中出现电话: 138xxxx
常见点击没反应的原因
不是代码写错了,大概率是环境问题:
立即学习“前端免费学习笔记(深入)”;
- 用户没装邮件客户端(如纯用 Gmail 网页版),或系统未设默认程序 —— Windows/macOS 设置里要确认“邮件”应用已关联
mailto:协议 - 链接里用了未编码的中文、空格、引号、问号等字符,浏览器直接丢弃整个 URI
- 在某些 iOS WebView 或微信内置浏览器中,
mailto:完全不触发,连提示都没有 -
target="_blank"可加可不加,但加了能避免页面跳转白屏,建议加上
真正容易被忽略的是:mailto 不提供任何反馈路径。用户关掉邮件客户端、删掉正文、甚至根本没点发送——你完全不知道。如果业务需要确认送达或防止漏发,必须换 Ajax + 后端接口方案。



















