mailto链接必须用完整协议格式href="mailto:user@example.com",参数需URL编码,多收件人用英文逗号分隔,移动端兼容性差,关键场景应提供表单降级方案。

mailto 链接必须带完整协议前缀
直接写 href="user@example.com" 不会打开邮件客户端,浏览器会当成相对路径尝试跳转,大概率 404。必须显式声明 mailto: 协议,这是唯一被广泛支持的方案。
正确写法是:href="mailto:user@example.com"。注意冒号紧跟 mailto,中间不能有空格;邮箱地址里也不能含中文、全角符号或未编码的特殊字符(如括号、空格)。
subject 和 body 参数必须 URL 编码
预填主题或正文时,subject 和 body 是标准参数名,大小写敏感,不能写成 Subject 或 BODY。所有值必须经过 URL 编码,否则 Outlook、Apple Mail 等客户端会截断或忽略。
- 空格要替换成
%20,不能留着空格 - 换行必须用
%0D%0A(即\r\n),不能直接敲回车或用\n - 中文需 UTF-8 编码,例如 “你好” →
%E4%BD%A0%E5%A5%BD;可用encodeURIComponent("你好")在控制台快速生成
错误示例:mailto:user@example.com?subject=反馈&body=你好\n请查收 —— 这个链接在多数客户端里根本不会生效。
立即学习“前端免费学习笔记(深入)”;
多收件人、cc、bcc 的分隔符只能用英文逗号
多个收件人之间用英文逗号分隔,不是分号、顿号或中文逗号。抄送(cc)和密送(bcc)也一样,且参数名小写。
正确示例:mailto:to1@example.com,to2@example.com?cc=cc1@example.com,cc2@example.com&bcc=bcc@example.com
注意:iOS Mail 对 bcc 支持不稳定,部分版本会忽略;Android 原生邮件 App 多数支持,但 Gmail App 等第三方客户端可能不处理 cc/bcc。
移动端和微信等环境大概率失效
mailto: 行为完全依赖用户设备配置:没装邮件客户端、默认应用未设置、系统禁用协议跳转,都会导致点击无反应。iOS Safari、Android Chrome 有时唤不起 App;微信内置浏览器、QQ 浏览器直接禁用 mailto:,点下去毫无反馈。
关键联系入口别只靠它。降级方案建议:
- 检测是否在微信内(通过
navigator.userAgent),是则显示纯文本邮箱 + 复制按钮 - 用
try/catch包裹window.location.href = "mailto:...",再监听blur判断是否跳走(不完美但比没有强) - 真正重要的场景,后端提供表单接口,前端只做异步提交
mailto 没有回调机制,也不是 Web API——这点最容易被忽略,写完就以为“用户点了就会发”,实际链路完全不可控。



















