mailto链接需用?开头、&连接参数,subject和body值必须encodeURIComponent编码,换行用%0D%0A;多收件人用英文逗号分隔;依赖本地邮件客户端,存在兼容性限制,不支持附件和敏感信息传输。

mailto 链接里怎么加 subject 和 body
直接在 href 值里拼 URL 查询参数就行,但必须用 ? 开头、& 连接多个参数,且所有值都要 encodeURIComponent() 编码 —— 否则空格、中文、符号都会出错或被截断。
常见错误是把空格写成 或 +,或者没编码中文,结果点开邮件客户端只显示乱码或空白主题/内容。
-
subject参数控制邮件主题,比如subject=反馈问题 -
body参数控制正文,支持换行(用%0D%0A表示回车换行) - 多个收件人用英文逗号分隔,如
mailto:a@example.com,b@example.com - 参数顺序无所谓,但
?必须紧接在邮箱地址后,不能有空格
实际 HTML 写法示例(含中文和换行)
这是能真正跑起来的写法:
<a href="mailto:help@example.com?subject=%E6%84%8F%E8%A7%81%E5%8F%8D%E9%A6%88&body=%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0%EF%BC%9A%0D%0A1.%20%E5%93%AA%E9%87%8C%E4%B8%8D%E6%AD%A3%E5%B8%B8%3F%0D%0A2.%20%E6%88%AA%E5%9B%BE%E9%99%84%E5%90%8E%EF%BC%9A">发送反馈</a>
注意:& 是 HTML 实体,不是 &;%0D%0A 是换行;所有中文都经过 encodeURIComponent() 处理。手动编码容易错,建议用浏览器控制台跑一句:encodeURIComponent("意见反馈") 拿结果。
立即学习“前端免费学习笔记(深入)”;
mailto 的兼容性和限制
它依赖本地默认邮件客户端,不是所有客户端都支持全部参数,尤其 cc、bcc、body 在某些 iOS 邮件 App 或 Outlook Web 中可能被忽略。
-
subject和body在 macOS Mail、Windows Outlook 桌面版基本可用 -
body里的换行在移动端邮件 App 中可能显示为空格,别指望格式完全一致 - URL 总长度别超过 2000 字符,否则部分浏览器会截断 —— 太长的
body建议引导用户复制粘贴 - 不要用
mailto传敏感信息,链接本身可见,且无加密
替代方案:什么时候不该用 mailto
如果需要可靠提交、附件、表单校验或防止爬虫收集邮箱,mailto 就不合适了。
- 用户填完表单后想自动带入主题/内容 → 改用后端 API 提交,再由服务端发邮件
- 要支持上传文件 → 必须走表单 + 后端,
mailto不支持附件 - 担心邮箱被爬虫抓取 → 至少把邮箱字符串拆开拼接,或用 JS 动态生成
href,但依然不防高级爬取
mailto 是最轻量的触发方式,但它的“简单”背后全是边界情况 —— 编码、客户端差异、长度、字符集,每一步都容易漏掉。



















