mailto链接必须带subject参数才能预填主题,且参数名严格小写;中文、空格等需用encodeURIComponent编码;HTML中多个参数要用&连接;iOS和微信浏览器禁用mailto协议,需提供备选方案。

mailto链接必须带subject参数才能预填主题
不加?subject=xxx,点击链接后邮件客户端只会填收件人,主题栏空白。主题参数名严格区分大小写,写成Subject或SUBJECT会被忽略。
中文和空格必须用encodeURIComponent()编码
直接写href="mailto:user@example.com?subject=你好"会失败——浏览器把你好当乱码丢弃,Outlook 和 Apple Mail 尤其敏感。正确做法是先编码再拼接:
encodeURIComponent("反馈问题") → "反馈问题"
encodeURIComponent("请核对用户ID: 12345") → "请核对用户ID%3A%2012345"
常见错误包括:
- 手动替换空格为
%20但漏掉中文、冒号、括号等字符 - 在 HTML 中直接写
&而不是&,导致body参数无法解析 - 用
\n换行,实际需用%0D%0A(即encodeURIComponent("\r\n"))
多个参数要用&连接,不能用&
HTML 属性值里写&是转义后的实体,浏览器解析时会变成字面量&,导致body被截断。正确写法是直接用&符号:
✅ 正确:href="mailto:user@example.com?subject=%E5%8F%8D%E9%A6%88&body=%E8%AF%B7%E6%A0%B8%E5%AF%B9"
❌ 错误:href="mailto:user@example.com?subject=...&body=..."
如果用 JavaScript 动态生成,就不存在这个陷阱;纯 HTML 硬编码时,&必须原样保留。
iOS 和微信内置浏览器根本不会唤起邮件客户端
哪怕链接完全合法,在 iOS Safari 点击可能无响应;微信、QQ 浏览器直接禁用mailto:协议。这不是你写错了,而是平台限制。关键场景必须提供备选方案,比如隐藏的表单或客服二维码。
真正容易被忽略的是:邮件地址本身不能含未编码的全角字符、空格或中文@符号——哪怕主题和正文都对了,收件人字段出错也会让整个链接静默失效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











