如何通过 HTML 链接预填短信正文内容

148
如何使用html链接打开短信应用并预填写内容?
我所看到的所有内容似乎都表明sms:18005555555?body=bodyTextHere应该可以工作,但在iPhone上无法工作。如果我去掉?body=bodyTextHere,只使用sms:phonenumber,它就可以工作。
我看到过几个二维码通过Safari链接实现此功能。他们是如何预先填充正文文本的?

我想知道这些QR扫描器是否直接打开了短信应用程序... - merlincam
我认为这是不可能的。请参考以下链接:https://dev59.com/Y3VD5IYBdhLWcg3wWKLc http://stackoverflow.com/questions/1517169/sending-pre-populated-sms-from-iphone-application - Jason Gennaro
这还是真的吗?没有方法? - tyler
这是完全可能的。请查看下面的答案获取信息。 - Brad Orego
24个回答

214

结果证明这是完全可行的,虽然有点欺骗性。

如果您想在Android上使用它,则需要使用以下格式:

<a href="sms:/*在此输入电话号码*/?body=/*在此输入正文*/">链接</a>

如果您想在iOS上使用它,则需要使用以下格式:

<a href="sms:/*在此输入电话号码*/;body=/*在此输入正文*/">链接</a>

演示请点击此处:http://bradorego.com/test/sms.html (注意,“Phone and ?body”和“Phone and ;body”应自动填充收件人和正文。有关更多信息,请查看源代码)

更新:

显然,iOS8必须对我们进行更改,所以感谢其他评论者/回复者,iOS现在有了新样式:

<a href="sms:/*在此输入电话号码*/&body=/*在此输入正文*/">链接</a>

(电话号码为可选项)


5
注意:我还没有在最新的操作系统版本(iOS7/ iPhone 5S/5C和Android 4.4)上测试过这些方法。有一些报告称它们可能不再起作用,特别是随着Android转向使用Hangouts而不是本机SMS应用程序。有机会时我会研究一下。 - Brad Orego
3
我现在看了一下,因为有时它能正常工作,有时却不能,这似乎很奇怪。我的发现是:如果你拨打一个之前至少发送过一条短信的号码,在使用“body”链接时可以正常工作。如果是全新的号码,那就没戏了,你只能得到这个号码。 - MMachinegun
9
重要提示:在安卓系统中,负责处理“sms” URI的应用程序可能会被更改,许多制造商都这样做。因此,尽管它在特定设备/应用上可以使用,但在另一个设备或升级后可能无法使用。我的建议是,在安卓系统上永远不要使用它,除非你只是设置电话号码;只在已经测试过的iOS版本和非安卓平台上使用它。 - fregante
2
所有的链接在iOS 11.1中似乎都无法与body一起工作。 - Toskan
1
通用链接 <a href="sms://+123456789&?body=text &+? - Shkur
显示剩余23条评论

73

我知道这是一个旧帖子,但是偶然发现有些部分已经不再相关。

我发现如果你只想预填文本而不添加电话号码,可以按照以下步骤进行:

sms:?&body=/* message body here */

2
这就是我一直在寻找的答案。感谢您的帮助! - Konrad G
1
工作得很好,但在MacOS上完成后,它会打开一个文本消息地址为?,你有什么办法使其显示为空白吗?我尝试了sms:?bodysms:;?body,第一个会尝试发送到?,第二个会尝试发送到; - Joshua Ohana
@JoshuaOhana 如果您尝试使用"sms:?0123456789&body=My Message"会发生什么?抱歉,我手头没有任何苹果设备。 - Ali
3
不适用于Android设备。只有一个?body=才能解决问题。 - Doodlemeat
在我的移动设备(安卓13和iOS 16)上,它在Safari和Chrome浏览器上运行良好。但是我发现在我的MIUI系统浏览器上运行不佳,短信正文最终会变成“=text”,而不是正确的“text”。 - undefined

41

尝试以下步骤来解决iOS 8的问题:

<a href="sms:/* phone number here */&body=/* body text here */">Link</a>

将";"替换为"&"对我起了作用。


3
就我所知,我刚在iOS 10上测试了这个,仍然有效 :)。 - Rob Dawson
如果短信应用程序已在后台打开,则此方法完美运行。如果没有打开,则只会在我的手机上打开该应用程序,而没有电话号码或消息正文。有什么想法吗? - DMEM

39

按照以下顺序放置所有符号(我只在此顺序下进行了测试,因为在代码方面对我来说最有意义)。

注意正文链接... 我只是放置了;?&body=。 另外,请注意,我发现需要使用%20来表示任何空格。

我已经在我的 iPhone(版本9.2)和另一台安卓手机上测试过,它的效果非常好。

这将解决必须针对不同设备进行黑客攻击的问题。 当我在短信中进行测试时,没有任何伪影。

<a href="sms:19131234567;?&body=Question%20from%20mywebsite.com.%20%20MY%20MESSAGE%20-%20" title="Click here to TEXT US gallery token needs updating!">Send me SMS</a>

1
只需删除号码并保留分号 (sms:;?&body=Questi..),在我不想要预填号码的情况下,这在Android 7原生短信应用程序上有效。 - ibex
1
2017年11月17日:在Aquaris BQ、Nexus、iPhone 7和LPhone上尝试过,效果非常好。使用了各种浏览器(Chrome、Firefox、Opera、本地浏览器)进行测试。非常感谢! - Urosh T.
在Android上,这取决于使用的短信应用程序。例如,在Android 9上使用QKSMS应用程序时,它会尝试向“;?”发送消息,但不包括正文。(QKSMS不是默认应用程序,但可能被一些人使用,他们不希望短信在达到一定大小后变成MMS。)不幸的是,HTML页面无法确定将使用哪个短信应用程序。因此,如果检测到Android,我将省略SMS链接。 - Silas S. Brown

33

没有必要为Android和iOS分别使用两个不同的锚点标签。这会有所帮助。

// 没有联系电话
<a href="sms:?&body=message">短信</a>

// 有联系电话
<a href="sms:1234567890;?&body=message">短信</a>

// 在Android和iOS上都可以使用


2
谢谢,这在iOS和Android上运行得很好!但是要注意,在MacOS上的“没有联系电话”版本会将短信的“to”设置为“?” - Ollie Khakwani

29

仅限于 Android 和 iOS 平台:

<a href="sms://;?&body=Hello%20World">Only body</a>

只有一个收件人的 Android 和 iOS 邮件体:

<a href="sms://+15552345678;?&body=Hello%20World">one recipient only with body</a>

仅适用于Android,可以使用多个收件人,同时包含正文:

<a href="sms://+15552345678, +15552345679;?&body=Hello%20World">Android multiple recipients with body</a>

仅限iOS 可以发送带有多个收件人的电子邮件:

<a href="sms://open?addresses=+15552345678,+15552345679;?&body=Hello%20World">iOS multiple recipients with body</a>

请注意,正文应进行URI编码。


1
你在这里做得很出色。感谢现代化的更新。我的HTML验证器在处理“;?&”组合时出了问题,这让我觉得它可能有问题,但是目前我手头有一个短期使用案例。 - Dom Ramirez
能否通过短信填充iOS的可选主题字段? - Vincent
1
2022年,href="sms:?&body=...." 对我来说在IOS和Android上都有效。 - AwesomeUserName
你的解决方案已经包含在答案中,并且即使在2022年之前也可以使用。@AwesomeUserName - MahMoos

11

我们发现了一种提议的方法并进行了测试:

<a href="sms:12345678?body=Hello my friend">Send SMS</a>

以下是结果:

  • iPhone4 - 故障(空的短信主体);
  • Nokia N8 - 正常(短信主体 - "Hello my friend",发送到“12345678”);
  • HTC Mozart - 故障(点击“发送短信”链接后出现“不支持的页面”消息);
  • HTC Desire - 故障(点击“发送短信”链接后出现“无效的收件人:
    <12345678?body=Hellomyfriend>”消息)。

因此我得出结论:至少通过这种方法它并不能真正地工作。


对于iPhone4,请查看我在下面的答案 https://dev59.com/92w15IYBdhLWcg3wpNUB#33451189 - paaacman

9

对于那些希望在2022年使用的解决方案,我建立了一个小型Web应用程序,它可以自动使用iOS、macOS和Android的正确格式。

https://copy.gives/18005555555?body=Body+text+here

2022年的问题在于,在iOS上您必须使用双斜杠以及/&

因此,相应的工作URL如下:

sms://18005555555/&body=Body%20text%20here - iOS and macOS
sms://18005555555/?body=Body%20text%20here - Android

请注意,针对苹果设备使用/&,而针对安卓设备使用/?
您可以在此处尝试一些有效的示例(嵌入式无效): https://jsfiddle.net/thatguysam/swLtjh0q/

3
我刚刚测试了一个通用URL:sms:18005555555?&body=Body。在Android 10+、iOS 15和macOS 11.6+上都可以使用。 - Peter Knut
1
@SamCarlton,我们可以在短信的正文内容中传递任何图片吗?我的意思是像网站图标或页面标志这样的东西可以和短信一起分享给其他人,就像下面的屏幕截图一样 https://screenrec.com/share/Qbgd9nDl8o。 - Rik Patel
@NayanBaraiya 我相信iOS不允许通过短信URL嵌入图像;但是,有两个替代方案可以尝试。1)设置一个带有所需图像的链接:https://www.raywenderlich.com/7565482-visually-rich-links-tutorial-for-ios-image-thumbnails 2)使用Web Share API,如下所示:https://codepen.io/ThatGuySam/pen/mdLQLRJ?editors=0010 - Sam Carlton

6
为了让 iPhone 和 Android 上的 sms: 和 mailto: 链接能够正常工作,不需要任何 JavaScript,可以尝试以下方法:
<a href="sms:321-555-1111?&body=This is what I want to sent">click to text</a>


<a href="mailto:someone@sample.com?&subject=My subject&body=This is what I want to sent">click to email</a>

我在Android和iPhone的Chrome浏览器以及iPhone的Safari浏览器上进行了测试。
它们都按预期工作。 即使没有电话号码或电子邮件地址,它们也可以正常工作。


5

如果您要使用Android,则可以使用以下代码

<a href="sms:+32665?body=reg fb1>Send SMS</a>

针对iOS平台,您可以使用以下代码:

<a href="sms:+32665&body=reg fb1>Send SMS</a>

以下代码适用于iOS和Android系统。
<a href="sms:+32665?&body=reg fb1>Send SMS</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接