不能,mailto链接仅触发默认邮件客户端并预填字段,无法自动发送;需严格url编码参数,不支持附件,多收件人用英文逗号分隔,且受客户端兼容性与用户环境限制。

mailto 链接能直接发邮件吗?不能,它只打开客户端
点击 mailto: 链接不会自动发送邮件,只会触发系统默认邮件客户端(如 Outlook、Mail.app 或 Thunderbird)并预填收件人、主题、正文等字段。是否发送、是否修改内容、甚至是否点击“发送”按钮,完全由用户控制——这是浏览器安全策略决定的,任何前端代码都无法绕过。
基础写法:收件人 + 主题 + 正文怎么拼?
URL 编码是关键。空格、中文、换行符都必须编码,否则客户端可能截断或乱码。常见字段用 ? 开头,多个参数用 & 连接:
mailto:test@example.com?subject=你好&body=这是一封%0A测试邮件
-
subject值需 URL 编码(中文用%E4%BD%A0%E5%A5%BD,换行用%0A) -
body中的%0A是换行符,%20是空格,%E5%86%85%E5%AE%B9是“内容”二字 - 不要在
body里用\n或未编码的回车,HTML 里换行符会被忽略 - 邮箱地址本身不用编码,但多个收件人要用英文逗号分隔:
mailto:a@b.com,c@d.com
支持哪些参数?bcc 和附件行不行?
标准支持的只有 to(隐式)、cc、bcc、subject、body。其他如附件、优先级、HTML 格式正文等,所有主流客户端都不支持。
-
cc和bcc可用,但部分客户端(如 iOS Mail)会忽略bcc -
body最大长度受限于客户端:Outlook 通常限制在 ~2000 字符内,超长会被截断 - 想加“回复到”,用
headers=Reply-To%3Axxx%40example.com(不推荐,兼容性极差) - 附件?不存在的。试图加
attachment=...参数会被完全忽略
实际部署时最容易踩的坑
不是写错语法,而是忽略了环境差异和用户行为:
- Mac 上 Safari 默认调用 Mail.app,但用户若把 Outlook 设为默认,链接就走 Outlook —— 你无法检测或干预
- Windows 用户没装桌面客户端?点开后可能弹出“选择应用”对话框,甚至直接失败(Chrome 有些版本会静默失败)
- 移动端点击
mailto:链接,iOS 会进 Mail,Android 则取决于默认应用,Gmail App 对body编码支持不稳定 - 别在
body里塞大量 HTML 标签,纯文本最稳妥;想换行就老实用%0A,别信<br>
真正麻烦的从来不是怎么写这个链接,而是你没法知道它在对方设备上到底能不能正常打开、字段有没有被吃掉、甚至会不会被当成垃圾邮件来源——这些都得靠真实设备测试,不能只看本地 Chrome。











