using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Text.RegularExpressions; //紅色命名空間引用是必須的,分别是端口、線程和正規表達式
/// <summary>
///SMS 的摘要說明
/// </summary>
public class SMS
{
public SMS()
{
//
//TODO: 在此處添加構造函數邏輯
//
}
/// <summary>
/// 将漢字轉換為Unicode
/// </summary>
/// <param name="text">要轉換的字元串</param>
/// <returns></returns>
public static string GBToUnicode(string text)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
string lowCode = "", temp = "";
for (int i = 0; i < bytes.Length; i++)
{
if (i % 2 == 0)
{
temp = System.Convert.ToString(bytes[i], 16);//取出元素4編碼内容(兩位16進制)
if (temp.Length < 2) temp = "0" + temp;
}
else
string mytemp = Convert.ToString(bytes[i], 16);
if (mytemp.Length < 2) mytemp = "0" + mytemp; lowCode = lowCode + mytemp + temp;//取出元素4編碼内容(兩位16進制)
}
return lowCode;
#region 發送短息
/// <summary>
/// SendMessage函數用于發送短信.參數strMobileNumber設定手機号碼,strMsgContent指
/// 定要發送的内容
/// </summary>
/// <param name="strMobileNumber">手機号碼</param>
/// <param name="strMsgContent">要發送的内容</param>
/// <returns> 傳回訓示發送是否成功</returns>
public bool SendMessage(string strMobileNumber,string strMsgContent)
//檢視機器可用的COM端口,如果COM1已經被占用的話,請選擇其他端口
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); //端口的一些參數
serialPort.WriteTimeout = 2000;
try
serialPort.ReadBufferSize = 900000;
if (serialPort.IsOpen) serialPort.Close();
serialPort.Open();
serialPort.WriteLine("ATZ/r");
Thread.Sleep(500);
serialPort.ReadExisting();
serialPort.WriteLine("AT+CSMP=1,167,0,8" + "/r"); //短息消息格式
serialPort.Write("AT+CMGS=" + strMobileNumber + "/r"); //發送短信AT指令
Thread.Sleep(1000);
string content = GBToUnicode(strMsgContent);
serialPort.Write(content + Convert.ToChar(26).ToString()); //Ctrl+Z的ASCII編碼值
Thread.Sleep(2000);
string msg = serialPort.ReadExisting();
serialPort.Close();
return true;
catch (Exception ex)
Console.WriteLine(ex.Message);
return false;
finally
//保證操作完成以後關閉端口,避免占用
if (serialPort.IsOpen)
serialPort.Close();
#endregion
}
前台頁面aspx:
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="30" align="right" bgcolor="#f2f2f2" class="left_txt2">
手機号碼:
</td>
<td height="30" bgcolor="#f2f2f2">
<asp:TextBox ID="tbPhoneNum" runat="server"></asp:TextBox>
&nbsp;
<td height="30" bgcolor="#f2f2f2" class="left_txt">
</tr>
短信内容:
<asp:TextBox ID="tbContent" runat="server" Height="69px" TextMode="MultiLine" Width="303px"></asp:TextBox>
<td colspan="3" align="center">
<table width="100%" height="31" border="0" cellpadding="0" cellspacing="0" class="nowtable">
<tr>
<td class="left_bt2">
<asp:Button ID="btnDX" runat="server" Text="發送短信" OnClick="btnDX_Click" />
</td>
</tr>
</table>
</table>
#region 發送短信
protected void btnSend_Click(object sender, EventArgs e)
{
//擷取手機号碼與短信内容
string cSendPhoneNum = tbPhoneNum.Text.Trim();
string cSendContent = tbContent.Text.Trim();
#region 利用短信貓發送短信
SMS sms = new SMS();
try
//正規表達式驗證,驗證手機号碼是否格式正确
string code = @"^(13[0-9]|15[0|3|6|7|8|9]|18[8|9])/d{8}$";
if (Regex.IsMatch(cSendPhoneNum, code))
//對短信的長度進行控制
if (cSendContent.Length == 0||cSendContent.Length > 200)
{
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('短信内容為空或太長!')</script>");
return ;
}
//手機号碼格式正确
if (sms.SendMessage(cSendPhoneNum, cSendContent))
//短信發送成功
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('短信發送成功...'); </script>");
else
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('短信發送失敗...'); </script>");
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('手機号碼格式錯誤,請檢查...')</script>");
catch (Exception ex)
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('"+ex.Message+"')</script>");
#endregion
以上就是全部可用代碼,并加以适當注釋。
以下附注常用的AT指令表:
FUNCTIONS
AT COMMANDS
DETAILS
選擇短消息服務
AT+CSMS
選擇是否打開短消息服務以及廣播服務
短消息存儲
AT+CPMS
選擇短消息優先存儲區域
短消息格式
AT+CMGF
選擇短消息支援格式(TEXT or PDU)
儲存設定
AT+CSAS
儲存+CSCA and +CSMP參數設定
恢複設定
AT+CRES
恢複+CSCA and +CSMP參數設定
顯示TEXT參數
AT+CSDH
顯示目前TEXT模式下結果代碼
新消息提示
AT+CNMI
選擇當有新的短消息來時系統提示方式
讀短消息
AT+CMGR
讀取短消息
列短消息
AT+CMGL
将存儲的短消息清單
發送短消息
AT+CMGS
寫短消息
AT+CMGW
寫短消息并儲存在存儲器中
從記憶體中發短消息
AT+CMSS
發送在存儲器中儲存的短消息
設定TEXT參數
AT+CSMP
設定在TEXT模式下條件參數
删除短消息
AT+CMGD
删除儲存的短消息
服務中心位址
AT+CSCA
提供短消息服務中心的号碼
選擇廣播類型
AT+CSCB
選擇系統廣播短消息的類型
廣播辨別符
AT+WCBM
讀取SIM卡中系統廣播辨別符
短消息位置修改
AT+WMSC
修改短消息位置
短消息覆寫
AT+WMGO
寫一條短消息放在第一個空位