如何从桌面应用程序(使用 C++ 编写)发送短信。
下载源代码 - 45.7 KB
简介
本文介绍了如何为桌面应用程序添加发送文本(SMS)消息的功能。
背景
本文重点介绍使用 MFC / C++ 的实现。在寻找一种可靠且经济的方式来以编程方式发送短信时,我遇到了一家名为 CardBoardFish 的公司,该公司覆盖 150 个国家/地区,并提供易于使用但功能强大的 SDK,可用于与任何网站、手机或桌面应用程序进行接口,涵盖大多数平台和开发环境。不幸的是,在其网站的代码示例中,没有 C++ 示例,因此我决定开发我自己的 C++ 实现。
以编程方式发送短信
大多数应用程序和网站在发送短信时,都会将其作为其范围的一部分或作为其他功能之一(例如,发送警报等),它们通常使用以下方法之一:
本文重点介绍第一种方法,即使用 Web 服务。
- HTTP Web 服务 - 要求使用 HTTP“GET”方法,通过 API 向给定的 Web 服务发送命令,该 API 包含凭据、参数和消息文本。
- 电子邮件到短信 - 使用 SMTP 协议,允许以一种独特的格式发送电子邮件,该格式将所有必需的参数(凭据、发件人、接收者等)编码为电子邮件的一部分。
API
下表列出了可以(或应该)发送到 Web 服务的所有参数。
![]()
使用代码
本文中的代码是在 MFC / C++ 中使用 Visual Studio 2010 Ultimate 开发的。我还使用了 Cheng Shi 的 HTTPClient(感谢 Cheng!)。
为了在您自己的应用程序中使用代码,建议您阅读名为 HTTPSMS 的 SDK 的规范。其次,您需要开立一个账户并获取您的用户名和密码,这些信息可以硬编码在源代码中,也可以在运行时输入。SendSMS 应用程序
![]()
我们应用程序的主要功能显然是发送短信,这在以下函数中完成:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30// SendSms - by Michael Haephrati BOOL SendSms(CString From, CString CountryCode, CString To,CString Message,CString *Status) // From - the ID or number you are sending from. This is what will appear at the recipient's cellphone. // CountyCode - the code of the country you are sending the SMS to (for example: 44 is for the UK // To - is the number you are texting to, which should not contain any leading zeros, spaces, commas, etc. // Message - is the message you are sending, which can be any multi lingual text // The status returned would be either a confirmation number along with the text "OK", which means that the message // was delivered, or an error code. { BOOL result=FALSE; wstring user=L"PLACE_YOUR_USERNAME_HERE",pass=L"PLACE_YOUR_PASSWORD_HERE",request=L""; // request=L"http://sms1.cardboardfish.com:9001/HTTPSMS?S=H&UN="; request+=user; // user name request+=L"&P="; request+=pass; // password request+=L"&DA="; request+=(wstring)(CountryCode+To); // country code request+=L"&SA="; request+=(wstring)From; // From (sender ID) request+=L"&M="; CString EncodedMessage; // Message CString ccc; EncodedMessage=ConvertHex(Message)+ConvertHex( L" here you can place your marketing piech, website, etc."); request+=(wstring)EncodedMessage; // Message to send request+=L"&DC=4"; // Indicating that this message is encoded as opposed to plain text
现在我们处理 HTTP“GET”请求。
1
2
3
4
5
6
7
8
9
10WinHttpClient client(request); client.SendHttpRequest(L"GET",true); // Get the response wstring httpResponseHeader = client.GetResponseHeader(); wstring httpResponseContent = client.GetResponseContent(); *Status=httpResponseContent.c_str(); return result; }
其他服务
我测试了 CardBoardFish 的服务,并在附加源代码中使用了它们。它们在此处提供了自己的代码示例,但其中不包含 c++,这就是我编写本文附加的测试应用程序的原因。
我找到了另一个备选服务提供商:http://www.clickatell.coml,因此有多种选择可供选择。
我最近测试了他们提供的另一项服务,即在发送短信之前验证手机号码。我没有包含此功能,因为我发现它太慢了,而且它也不涵盖某些国家/地区,其中包括……美国。
延伸阅读
请参阅我的另一篇文章,本文将解释如何使用 iOS(iPhone / iPad)完成同样的操作。
许可证
本文以及任何相关的源代码和文件,均根据 The Code Project Open License (CPOL) 获得许可。
关于作者
Michael N. Haephrati 是一位企业家、发明家和音乐家。Haephrati 曾参与过许多项目,包括 HarmonySoft,设计了 Rashumon,这是 Amiga 计算机上首个图形多语言文字处理器。在 1995-1996 年间,他作为合同工在 Apple 位于库比蒂诺的公司工作。在一家研究所工作,为以色列的信用评分领域迈出了第一步。他创立了 Target Scoring,并开发了一个名为 ThiS 的信用评分系统,该系统基于地理统计数据,参与了 VISA CAL、Isracard、Bank Leumi 和 Bank Discount(Target Scoring,是一家大型以色列机构的业务发展副总裁)。
2000 年,他创立了 Target Eye,并开发了第一个名为 Target Eye 的远程 PC 监控系统。
其他项目包括:数据清洗(作为 DataTune 系统的一部分,该系统已在许多组织中实施)。
关注 @haephrati
关注 Twitter、Google、LinkedIn。
文章顶部