Main Start-up Screen
Introduction
This is a simple SMS application using free GSM Communication Library GSMComm for sending bulk SMS to multiple numbers of recipients using an Excel file for all our messages and recipients' numbers.
Background
It is very helpful for learning how to send SMS through C# using free GSM Communication Library with minimal efforts.
Using the Code
So now let's go on the actual code. The first step is that you need to get connected your GSM Phone / GSM Modem to your PC assuming that you have connected your device to PC and all the necessary drivers are loaded and it is connected successfully.
For connecting device using GSM COMMUNICATION LIBRARY, you have to download GSM COM LIb from http://www.scampers.org and reference it in your project. Then use it in your project:
using GsmComm.GsmCommunication;
using GsmComm.Interfaces;
using GsmComm.PduConverter;
using GsmComm.Server;
And construct the initial necessary information for connection and GSMComm
class.
public static Int16 Comm_Port = 0;
public static Int32 Comm_BaudRate = 0;
public static Int32 Comm_TimeOut = 0;
public static GsmCommMain comm;
Bingo! After connecting your device to your PC, run the project and the above shown main screen will appear, now press Get COM Port List button on main screen to get all Ports information in to the DataGrid
.
All the COM Port Lists in the System will appear in the Grid Box as shown above.
For getting the COM Port List and additional data of COM Ports, Microsoft has provided us a utility Called "WMI CODE CREATOR" which can easily create C# code for that purpose. Google it and download to your PC, it will give you thousands of classes / methods / properties to get the system information with minimal efforts of system programming.
Here is how I get all the COM Port Information with all the additional device information:
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_SerialPort");
foreach (ManagementObject queryObj in searcher.Get())
{
if (queryObj != null)
{
object captionObj = queryObj["DESCRIPTION"];
object capdeviceid = queryObj["DEVICEID"];
object MaxBaudRate = queryObj["MAXBAUDRATE"];
object connstatus = queryObj["STATUS"];
string timeoutsec = "100";
dataGridView3.Rows.Add(capdeviceid, captionObj,
MaxBaudRate, timeoutsec, connstatus);
}}}
var i = C#;
If you get all the COM Port Information from system without error, then the second step is to connect to the device, click on the Cell of Data Grid of your desired device to connect. As shown below, a Confirmation message will appear and Connected device information will also be shown and DataGrid
Cell will be highlighted green.
How to Connect to GSM Device / Phone
Try GSMComm connection with the values got from the DataGrid
when Cell is Clicked.
Comm_Port = Convert.ToInt16(dataGridView3.Rows[i].Cells[0].
Value.ToString().Substring(3));
Comm_BaudRate = Convert.ToInt32(dataGridView3.Rows[i].Cells[2].Value.ToString());
Comm_TimeOut = Convert.ToInt32(dataGridView3.Rows[i].Cells[3].Value.ToString());
comm = new GsmCommMain(Comm_Port, Comm_BaudRate, Comm_TimeOut);
try
{
comm.Open();
if (comm.IsConnected())
{
}
Getting Phone Information after successful connection:
try
{
Phone_Name.Text = comm.IdentifyDevice().Manufacturer.ToUpper().ToString();
Phone_Model.Text = comm.IdentifyDevice().Model.ToUpper().ToString();
Revision_Num.Text = comm.IdentifyDevice().Revision.ToUpper().ToString();
Serial_Num.Text = comm.IdentifyDevice().SerialNumber.ToUpper().ToString();
}
After successfully connecting with the device, now it's time to send a word out there. :-)
Let's Check Out Single SMS Sending TAB
string CELL_Number, SMS_Message;
SmsSubmitPdu pdu1;
CELL_Number = Cell_Num.Text.ToString();
SMS_Message = SMS_Text.Text.ToString();
try
{
pdu1 = new SmsSubmitPdu(SMS_Message, CELL_Number, "");
comm.SendMessage(pdu1);
MessageBox.Show("M E S S A G E - S E N T", "Information", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
For sending multiple SMS from Excel file, here's how you can achieve this:
private void button3_Click_1(object sender, EventArgs e)
{
int rows_counting, column_counting1 = 0;
OpenFileDialog dialog = new OpenFileDialog { };
dialog.Filter = "SMS Sending File(*.xlsx;*.xls)|*.xlsx;*.xls";
dialog.Title = "Select Excel File For SMS";
DialogResult dlgresult = dialog.ShowDialog();
if (dlgresult == DialogResult.Cancel)
{
MessageBox.Show("You Cancelled !!!");
}
else
{
string sms_filename = dialog.FileName;
if (System.IO.File.Exists(sms_filename))
{
try
{
Cursor.Current = Cursors.WaitCursor;
string connectionString = String.Format(
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};
Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""",
sms_filename);
string query = String.Format("select * from [{0}$]", "SMS");
OleDbDataAdapter dataAdapter = new OleDbDataAdapter
(query, connectionString);
dataSet = new DataSet();
dataAdapter.Fill(dataSet);
dataGridView1.DataSource = dataSet.Tables[0];
dataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells;
rows_counting = dataGridView1.RowCount - 1;
column_counting1 = dataGridView1.ColumnCount;
if (column_counting1 < 2 || column_counting1 > 2)
{
MessageBox.Show("Kindly Check Column Count
in Excel Sheet !!!\r\n\n
There Should Be Only Two Columns in Sheet Like Below\r\n\n
CELL NUMBER | MESSAGES", "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
if ( dataGridView1.Columns[0].Name.ToString().ToUpper() ==
"CELL NUMBER" &&
dataGridView1.Columns[1].Name.ToString().ToUpper() ==
"MESSAGES")
{
label25.Text = "Total SMS In Excel File " + rows_counting;
MessageBox.Show("Data Imported Successfully...!!!\r\n\n
Check Imported Values & SEND SMS.....!!!!",
"Information", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Column Names
Are Not In Specified Format !!!",
"Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
}
catch (Exception E6)
{
MessageBox.Show("Error Loading
Excel FIle\r\n\nKindly Check Worksheet Name",
"Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
}}}
After loading Excel file into the DataGrid
, we'll only use the For Loop function to get CELL NUMBER & MESSAGE one by one and send it using very simple code just like for sending a single SMS message.
string MSMS_Number, MMessage;
int i;
SmsSubmitPdu pdu3;
try
{
if (comm.IsConnected()==true)
{
try
{
for (i = 0; i < dataGridView1.RowCount - 1; i++)
{
MSMS_Number = dataGridView1.Rows[i].Cells[0].Value.ToString();
MMessage = dataGridView1.Rows[i].Cells[1].Value.ToString();
pdu3 = new SmsSubmitPdu(MMessage, MSMS_Number, "");
comm.SendMessage(pdu3);
System.Threading.Thread.Sleep(1000);
}
Cursor.Current = Cursors.Default;
MessageBox.Show("T O T A L - M E S S A G E - S E N T = " + i,
"Information", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Simple, isn't it? If not, send me a question and I will be glad to help you out.
And for extra spice, I have added simple checking when Excel File is loaded into DataGridView
when CHECK VALUES button is clicked, it will check for NULL
VALUES and Message text more than 160 Characters and highlighted cells to RED if an error is found, or else cells will be green if no error is found.
For achieving cell checking, a simple yet once again FOR LOOP will do the magic. ;-)
private void button7_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
for (int j = 0; j < dataGridView1.ColumnCount ; j++)
{
if ( dataGridView1.Rows[i].Cells[j].Value.ToString() == "" ||
dataGridView1.Rows[i].Cells[j].
Value.ToString().ToUpper() == "-" ||
dataGridView1.Rows[i].Cells[j].Value.ToString().Length > 160 )
dataGridView1.Rows[i].Cells[j].Style.BackColor = Color.Red;
else
dataGridView1.Rows[i].Cells[j].Style.BackColor = Color.Green;
button4.Enabled = true;
}}}
That's all folks... happy coding... Let the SMS begin !!! :-)
Points of Interest
You should try WMI CODE CREATOR. It will give lots of help to explore system information.
History
This is actually a much smaller version of code made for a much larger project for some specific purpose for sending bulk SMS to fellow Team Members. :-)
Bulk SMS SENDER Ver 1.0