• 文章
  • 如何从应用程序发送短信
2014 年 8 月 11 日 (最后更新:2014 年 8 月 29 日)

如何从应用程序发送短信

评分:3.8/5 (141 票)
*****

如何从桌面应用程序(使用 C++ 编写)发送短信。

  • 下载源代码 - 45.7 KB


  • 简介

    本文介绍了如何为桌面应用程序添加发送文本(SMS)消息的功能。


    背景

    本文重点介绍使用 MFC / C++ 的实现。在寻找一种可靠且经济的方式来以编程方式发送短信时,我遇到了一家名为 CardBoardFish 的公司,该公司覆盖 150 个国家/地区,并提供易于使用但功能强大的 SDK,可用于与任何网站、手机或桌面应用程序进行接口,涵盖大多数平台和开发环境。不幸的是,在其网站的代码示例中,没有 C++ 示例,因此我决定开发我自己的 C++ 实现。

    以编程方式发送短信

    大多数应用程序和网站在发送短信时,都会将其作为其范围的一部分或作为其他功能之一(例如,发送警报等),它们通常使用以下方法之一:
    • HTTP Web 服务 - 要求使用 HTTP“GET”方法,通过 API 向给定的 Web 服务发送命令,该 API 包含凭据、参数和消息文本。

    • 电子邮件到短信 - 使用 SMTP 协议,允许以一种独特的格式发送电子邮件,该格式将所有必需的参数(凭据、发件人、接收者等)编码为电子邮件的一部分。
    本文重点介绍第一种方法,即使用 Web 服务。

    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
    10
    WinHttpClient 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_SendSMS.zip]