Click here to Skip to main content
15,881,588 members
Articles / Mobile Apps

How to Send an SMS Message from a Desktop Application

Rate me:
Please Sign up or sign in to vote.
4.94/5 (89 votes)
26 Mar 2020CPOL2 min read 366.6K   18.2K   254   114
How to add the capability of sending text (SMS) messages from a desktop application
The article focuses on an implementation using MFC / C++ to explain how to add capability of sending SMS messages from a desktop application.

Sending WhatsApp Messages from a Win32 C++ Program - Part 1 - 56.7 KB

Background

The article focuses on an implementation using MFC / C++. While looking for a reliable and cheap solution for sending SMS messages programmatically, I came across a company named CardBoardFish which covers 150 countries and provides an easy to use, yet powerful SDK for interfacing from any web site, mobile phone, or desktop application, covering most platforms and development environments. Unfortunately, among the code samples in their web site, there aren't any C++ samples, so I decided to develop my own C++ implementation.

Sending SMS Messages Programmatically

Most applications and web sites used to send SMS messages as part of their scope or among other functionalities (i.e., sending alerts, etc.) use one of the following methods:

  • HTTP Web Service -  requires using HTTP "GET" method to send a given Web Service a command, using an API, which contains the credentials, parameters, and the text for this message.
  • Email to SMS  - uses the SMTP protocol to allow sending an email in a unique format, which encodes all required parameters (credentials, sender, receiver, etc.) as part of an email.

This article focuses on the first method, using a Web Service.

The API

The following table lists all parameters that can (or should) be sent to the Web Service:

Image 1

Using the Code

The code in this article was developed in MFC / C++ using Visual Studio 2010 Ultimate. I also used Cheng Shi's HTTPClient (thanks Cheng!).

In order to use the code for your own application, it is advised to read the specifications for the SDK named HTTPSMS. Secondly, you need to open an account and obtain your user name and password, which can be hardcoded in the source code, or entered during runtime.

The SendSMS Application  

SendSMS Screen

The main functionality of our application is obviously sending an SMS, which is done in the following function:

C++
// 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 

Now we handle the HTTP "GET" request:

C++
    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; 
} 

Other Services

I have tested the services of CardBoardFish, which I used for the attached source code. They provide their own code samples here, but these don't include C++, which I why I wrote the test application attached to this article.

I recently tested another service they provide which is verifying mobile numbers before sending the text messages. I didn't include this functionality because I found it to be too slow, and also it doesn't cover some countries, among them... USA.  

I found another alternative service provider, http://www.clickatell.com, so there are several options to choose from.  

Further Reading 

Please refer to another article of mine, this time explaining how to do the same using iOS (iPhone / iPad). 

History

  • 1st July, 2013: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
CEO Secured Globe, Inc.
United States United States
Michael Haephrati is a music composer, an inventor and an expert specializes in software development and information security, who has built a unique perspective which combines technology and the end user experience. He is the author of a the book Learning C++ , which teaches C++ 20, and was published in August 2022.

He is the CEO of Secured Globe, Inc., and also active at Stack Overflow.

Read our Corporate blog or read my Personal blog.





Comments and Discussions

 
GeneralMy vote of 5 Pin
JohnBergen24-Jul-12 23:40
JohnBergen24-Jul-12 23:40 
GeneralMy vote of 3 Pin
Alireza C5-Jul-12 10:57
Alireza C5-Jul-12 10:57 
AnswerRe: My vote of 3 Pin
Michael Haephrati21-Sep-17 9:46
professionalMichael Haephrati21-Sep-17 9:46 
QuestionAlways showing status message as ERR-10 Pin
Rohit_Vats14-Jun-12 21:20
Rohit_Vats14-Jun-12 21:20 
AnswerRe: Always showing status message as ERR-10 Pin
Michael Haephrati14-Jun-12 21:26
professionalMichael Haephrati14-Jun-12 21:26 
QuestionMisleading title :( Pin
PrafullaVedante10-Jun-12 8:25
PrafullaVedante10-Jun-12 8:25 
AnswerRe: Misleading title :( Pin
Michael Haephrati10-Jun-12 8:47
professionalMichael Haephrati10-Jun-12 8:47 
AnswerRe: Misleading title :( Pin
xawari11-Jun-12 2:30
xawari11-Jun-12 2:30 
GeneralRe: Misleading title :( Pin
Michael Haephrati11-Jun-12 10:48
professionalMichael Haephrati11-Jun-12 10:48 
GeneralRe: Misleading title :( Pin
xawari15-Jun-12 1:35
xawari15-Jun-12 1:35 
AnswerRe: Misleading title :( Pin
Michael Haephrati21-Sep-17 9:48
professionalMichael Haephrati21-Sep-17 9:48 
GeneralMy vote of 5 Pin
Vitaly Tomilov10-Jun-12 7:54
Vitaly Tomilov10-Jun-12 7:54 
GeneralMy vote of 5 Pin
Matan joice10-Jun-12 7:26
Matan joice10-Jun-12 7:26 
GeneralMy vote of 5 Pin
Member 43208448-Jun-12 10:12
Member 43208448-Jun-12 10:12 
SuggestionNot propper title? Pin
User 43300287-Jun-12 19:04
User 43300287-Jun-12 19:04 
QuestionGreat Article Pin
Ghazanfar_Ali6-Jun-12 6:10
Ghazanfar_Ali6-Jun-12 6:10 
Questiongreat Pin
anglesen11206-Jun-12 5:41
anglesen11206-Jun-12 5:41 
GeneralMy vote of 4 Pin
Madhan Mohan Reddy P5-Jun-12 22:54
professionalMadhan Mohan Reddy P5-Jun-12 22:54 
GeneralRe: My vote of 4 Pin
Michael Haephrati5-Jun-12 23:41
professionalMichael Haephrati5-Jun-12 23:41 
GeneralRe: My vote of 4 Pin
enhzflep6-Jun-12 1:36
enhzflep6-Jun-12 1:36 
GeneralRe: My vote of 4 Pin
Michael Haephrati6-Jun-12 4:55
professionalMichael Haephrati6-Jun-12 4:55 
GeneralRe: My vote of 4 Pin
enhzflep6-Jun-12 5:11
enhzflep6-Jun-12 5:11 
QuestionNeed new pic Pin
David Crow5-Jun-12 5:26
David Crow5-Jun-12 5:26 
AnswerRe: Need new pic Pin
Michael Haephrati5-Jun-12 6:22
professionalMichael Haephrati5-Jun-12 6:22 
GeneralRe: Need new pic Pin
enhzflep5-Jun-12 10:30
enhzflep5-Jun-12 10:30 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.