mailto链接仅启动默认邮件客户端并预填字段,无法自动发送;需严格url编码参数,不支持附件,多收件人用逗号分隔,注意大小写及平台兼容性。

mailto 链接不是“发邮件的 API”,它只是告诉操作系统:“请用默认邮件客户端,打开一封预填好字段的新邮件”。能不能发、填得对不对、用户点不点发送——全在客户端和用户手上。
mailto 基本写法与常见失效原因
最简形式就是 @#@#@#@#@#@#@#@#@#@0。但实际一粘就坏,往往因为:
- 链接里混入了未编码的空格、中文、换行符或符号(如
!、?、@)——浏览器直接截断或错解参数 - 用户设备没设默认邮件客户端(尤其 Windows 新装系统、某些 Android 平板、企业锁控环境)
- 在网页内嵌 iframe 或 PWA 环境中,部分浏览器会静默拦截 mailto 调用
-
body参数在 iOS Mail 和 Outlook for Mac 上可能被忽略(协议支持但实现不一致)
subject 和 body 必须 URL 编码,且不能手拼
别手动把空格替换成 %20、中文替换成 %E4%BD%A0——容易漏、难维护、一改就崩。直接用语言原生编码函数:
- JavaScript:用
encodeURIComponent()分别处理每个参数值,再拼接
例如:`mailto:${encodeURIComponent("a@b.com")}?subject=${encodeURIComponent("反馈问题")}&body=${encodeURIComponent("你好,这里有个bug…")}` - PHP:
rawurlencode()(比urlencode()更严格,推荐) - Python:
urllib.parse.quote(),传参safe=""保证所有非字母数字都编码
特别注意:@、/、?、=、& 在参数值里必须编码;但在 mailto: 协议头和 ? 分隔符位置,绝对不能编码。
多收件人、cc、bcc 的写法与陷阱
多个邮箱地址必须用英文逗号分隔,且**不能加空格**:
- ✅ 正确:
mailto:one@example.com,two@example.com?cc=copy@example.com&bcc=secret@example.com - ❌ 错误:
mailto:one@example.com, two@example.com(空格导致第二个地址被丢弃) - ❌ 错误:
mailto:?to=a@b.com&to=c@d.com(to多次出现不被标准支持,仅第一个生效)
bcc 字段虽被 RFC 6068 定义,但 Outlook 桌面版和 Apple Mail 会显示密送栏,而 Gmail 网页版和移动端完全不识别——别依赖它做隐私保护。
移动端和邮件客户端兼容性差异大
点击 mailto 链接后行为千差万别:
- iOS:Safari 唤起 Mail.app,
body通常有效;Chrome for iOS 则常跳转失败或清空body - Android:Gmail App 支持完整参数,但 Samsung Mail 和某些厂商定制客户端会忽略
cc和body - Outlook for Windows:支持全部参数,但若用户登录的是 Microsoft 帐户(非本地 Outlook 配置),可能回退到网页版,此时 mailto 无效
- 网页端 Gmail:根本不响应 mailto 链接(设计如此)
真正能指望的只有 to 和 subject ——其他字段一律视为“尽力而为”。如果业务强依赖预填内容,就得换方案:比如弹表单 + 后端发信,或集成 SMTP JS SDK(如 EmailJS)。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











