天天看點

利用短信貓發送短信

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>

                                             

                                        <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

寫一條短消息放在第一個空位