Menu

HTML 邮件链接:mailto 主题、正文、抄送与 tel

用 href="mailto:" 创建打开新邮件的链接,预填主题、正文、抄送和密送,并正确编码这些值,还可以用 tel: 和 sms: 创建一键拨号链接。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

如何创建邮件链接

让链接的 href 以 mailto: 加地址开头。点击它会在读者的邮件应用中新建一封发往该地址的邮件。

预览不会打开其他应用:在预览中点击这些链接,会显示它将要打开的地址。在真实页面上,第一个链接会新建一封邮件,第二个会在手机上拨打电话。

把地址本身用作链接文字。没有设置邮件应用的读者(在浏览器中使用网页邮箱的电脑上很常见)仍然可以复制它,而只写着“给我们发邮件”的链接会让他们无从下手。

主题、正文、抄送和密送

mailto 链接还可以预填邮件的更多内容。像 URL 查询字符串一样,在 ? 后面添加参数,并用 & 连接:

参数填写示例
subject主题?subject=Order%20question
body邮件正文&body=Hi%20there
cc抄送收件人&cc=sales@example.com
bcc密送收件人&bcc=log@example.com

多个收件人写在地址部分,用逗号分隔:mailto:ana@example.com,bob@example.com。

这些值必须经过 URL 编码:空格是 %20,换行是 %0D%0A,& 是 %26,? 是 %3F。这个示例中的脚本会解码每个链接,让你看到邮件应用收到的内容:

主题 Order #123 必须写成 Order%20%23123:直接写 # 会让 URL 在那里结束,正文就丢失了。也不要用 + 表示空格。在 mailto 链接中,+ 就是字面意义上的加号,很多邮件应用会把它显示为加号。

用 JavaScript 生成 mailto 链接

手动编码很容易出错。encodeURIComponent 可以帮你完成。在字段中输入内容,下面的链接会随之更新:

encodeURIComponent 把 & 转成 %26,把换行转成 %0A;replace 则把换行变成邮件所需要的 %0D%0A 组合。地址部分保持原样即可:@ 和 , 在那里不需要编码。

用 tel: 和 sms: 创建电话链接

tel: 用来创建一键拨号链接。href 中的号码要带国家代码,不加空格;显示的文字可以随意排版。

  • tel:+442079460958 在任何国家都能用。像 tel:02079460958 这样的本地号码只有在该国境内拨打才有效。
  • 可以用连字符作为分隔符(tel:+1-555-123-4567);空格不属于该格式,所以不要写进 href。
  • sms: 会打开短信应用。用 ?body= 预填短信内容在很多应用中都有效,但支持情况不一,所以不要依赖它。
  • 在电脑上,如果装有通话应用(比如 FaceTime 或软电话),tel: 会打开它,否则什么也不做。

iPhone 上的 Safari 会自动把纯文本中的电话号码变成链接。如果这会破坏订单号之类的内容,可以用 <meta name="format-detection" content="telephone=no"> 关闭它。

垃圾邮件与邮箱地址

mailto 链接中的地址,任何下载了页面的机器人都能读到。把地址写成 hello [at] example [dot] com 或用 JavaScript 拼接地址之类的技巧能挡住一些简单的爬虫,但也会让链接更难用。联系表单(参见 HTML 表单)则完全不会把地址放在页面上。对大多数网站来说,给收件箱配一个好的垃圾邮件过滤器是更简单的办法。

避免使用 <form action="mailto:...">。它依赖读者的邮件应用,发送的字段经过 URL 编码、难以阅读,而且你也无法确认是否真的发送了。

常见错误

  • 忘了写 mailto:。 href="hello@example.com" 是一个相对链接,指向以该地址命名的页面。
  • 主题或正文中有未编码的空格或 #。 用 %20、%23 或 encodeURIComponent 对值进行编码。
  • 用 + 表示空格。 它会显示为加号。
  • 用第二个 ? 代替 &。 只有第一个参数跟在 ? 后面;其余参数用 & 连接。
  • 链接文字只有“给我们发邮件”,使用网页邮箱的用户就没有可以复制的内容。
  • 在 tel: 中使用本地号码。 要加上国家代码。

常见问题

如何在 HTML 中创建邮件链接?

使用 href 以 mailto: 开头、后面跟着地址的链接:<a href="mailto:hello@example.com">hello@example.com</a>。点击它会在读者默认的邮件应用中新建一封邮件。

如何给 mailto 链接添加主题?

在 ? 后面以查询参数的形式添加:mailto:hello@example.com?subject=Order%20question。空格编码为 %20,多个参数用 & 连接,例如 ?subject=Hi&body=Hello。

如何让 mailto 链接发送给多个收件人?

用逗号分隔地址:mailto:ana@example.com,bob@example.com。抄送和密送使用 cc= 和 bcc= 参数:mailto:ana@example.com?cc=bob@example.com&bcc=cy@example.com。

如何在 HTML 中让电话号码可以点击?

使用 tel: 链接,号码采用国际格式:<a href="tel:+15551234567">+1 555 123 4567</a>。在手机上它会直接拨打电话;在电脑上,如果装有通话应用,就会打开它。

为什么我的 mailto 链接点了没反应?

这个链接只是把地址交给默认的邮件应用。如果读者没有设置邮件应用(在使用网页邮箱的电脑上很常见),就不会发生任何有用的事情。把地址直接作为链接文字显示,方便读者复制。

Coddy 编程语言插图

和 Coddy 一起学编程

开始