Sometimes, we want to send text messages from our application. Whether it’s for sending out a secret code for two-tiered authentication, or sending out messages to subscribed members, it’s a feature that is occasionally needed, and one that I’ve recently needed. There are many services out there that charge a fee, either monthly or per message, but the services are out there. I’ve also seen several open-source applications that act as an instant messaging type service, in that they have a GUI and do not provide an API. What I was unable to find was an API that handled all carriers, and was free. So I built one, and here is how to use it.
Your first step is to download the single DLL, which is needed to use the API. It’s open source, so you can get the code and make any changes you want and compile the DLL yourself, if you so desire. You can get the DLL here, and the code here.
After adding the DLL as a reference to your project, it’s actually quite simple to use. First, add the appropriate using:
using SMSOverEmail;
After the using statement is added, we are ready to start using the API. The first step is to instantiate a new SMSOverEmail object.
SMSOverEmail.SMSOverEmail sms = new SMSOverEmail.SMSOverEmail
With our object instantiated, we need to set up the “From” part of our text message. We are using SMTP to send the actual text message, so this is similar to setting up a SMTP client.
sms.EnableSsl = true; sms.SMTPUserName = "userName@gmail.com"; sms.SMTPPassword = "password"; sms.Host = "smtp.gmail.com"; sms.Port = 587; sms.From = new System.Net.Mail.MailAddress("userName@gmail.com");
These settings are correct if you are using Gmail, but you can use any email provider you wish, as long as you know the settings
Once the “From” part is set up, we can set up the “To” part. This is a text message, so we are delivering to a mobile device. So, for the purpose of this API, you just need to know the 10 digit phone number, and the carrier it belongs to. The API does the rest.
sms.PhoneNumber = "2345678901"; //a ten digit phone number sms.RecipientCarrier = Carrier.SprintPCS;
The phone number is a string, and must be the 10 digit phone number belonging to the phone. The Carrier enumerator has over 60 carriers to choose from. In our example, we are sending a text message to (234)567-8901 which is held by a Sprint customer.
Now that the recipient and the sender are setup, we can send our text message.
sms.SendTextMessage("test message");
The SendTextMessage function has many different overloads, they are all documented inline, but you can see the full list on the projects CodePlex documentation page.
No tutorial would be complete without showing all of the code put together in a complete console application:
namespace SSMSTest { using System; using SMSOverEmail; class Program { static void Main(string[] args) { SMSOverEmail.SMSOverEmail sms = new SMSOverEmail.SMSOverEmail(); sms.EnableSsl = true; sms.SMTPUserName = "userName@gmail.com"; sms.SMTPPassword = "password"; sms.Host = "smtp.gmail.com"; sms.Port = 587; sms.From = new System.Net.Mail.MailAddress("userName@gmail.com"); sms.PhoneNumber = "2345678901"; //a ten digit phone number sms.RecipientCarrier = Carrier.SprintPCS; sms.SendTextMessage("test message"); } } }
The API also comes with a dictionary containing the actual carrier name, along with the enumerator. For example, Carrier.ATT is AT&T. Each enumerator is simple to understand, but I threw it in in case you needed a user-friendly list of carriers. Assuming sms is the name of your SMSOverEmail object, then sms.CarrierNames is the dictionary. It’s in the form of Dictionary, where Carrier is the enumerator, and string is the user-friendly name.
As always, I would love to hear from you. Please leave your thoughts about this post below, especially if this post has helped you If you have any questions, I’ll be sure to do my best to answer those as well.