首页  编辑  

手机发送短讯的程序

Tags: /超级猛料/Network.网络通讯/BP短讯和手机短消息/   Date Created:

:tanglu 时间:00-10-29 9:00:19 ID:379828  

最好可能还是给www.139.com.cn的那个发短消息的wriete1.asp作个接口。

然后生成一个Http的串,用ICS的TCliHttp控件发过去。

我大概看了一下,它的用户名输入框的名字是:My_Name

你自己研究一下其他的吧

:suhaiyun 时间:00-10-31 1:12:41 ID:381207  

tanglu言之有理,可以用delphi的THttp组件把信息post过去,(看dellphi例子),至于要post的

数据分析一下www.139.com.cn页面就可以知道,其格式应类似:name=zhang&phone=013901012345...

:yysun 时间:00-10-31 23:26:02 ID:382165  

WAP! Delphi Does Wireless - Developing WML Applications

http://www.delphizine.com/features/2000/04/di200004jj_f/di200004jj_f.asp

(With Source Code!)

---------------------------------------

以下是通过串口和AT指令发送短消息的代码

unit uSendSms;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;

type

 TFrmSendSms = class(TForm)

   Label1: TLabel;

   Edit1: TEdit;

   Label2: TLabel;

   Memo1: TMemo;

   Button1: TButton;

   Button2: TButton;

   MSComm: TMSComm;

   Label3: TLabel;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Memo1Change(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

   function  OpenPort() : Boolean;

//    procedure SendSMS(lst : TList; Mobile : string); // 将 lst 中的邮件编辑短信发送到手机

   procedure SendSMS(Mobile : string;SmsMsg:WideString); // 将 lst 中的邮件编辑短信发送到手机

   procedure IniSMS(); // 初始化短消息

   procedure SendInEncodeText(sms : string; mobile : string);  // Text mode

   procedure SendInEncodePdu(sms : string; mobile : string);   // pdu mode

   function EncodeGb(var s: WideString): String;

   function ExchangeCode(src: string): string;

 end;

var

 FrmSendSms: TFrmSendSms;

implementation

uses Config;

{$R *.dfm}

procedure TFrmSendSms.Button1Click(Sender: TObject);

begin

  Application.CreateForm(TfrmConfig,frmConfig);

  frmConfig.ShowModal;

  frmConfig.Free;

  MSComm.CommPort := Config.m_Com.m_ComPort;

  MSComm.Settings := Config.m_Com.m_BaudRate + ',' + Copy(Config.m_Com.m_Parity, 0, 1) + ',' + Config.m_Com.m_DataBits + Config.m_Com.m_StopBits;

end;

// 将中文GB2312编码转换为代码页为CP936的Unicode编码

function TFrmSendSms.EncodeGb(var s: WideString): String;

var

       i,len:Integer;

       cur:Integer;

       t:String;

begin

       Result:='';

       len:=Length(s);

       i:=1;

       while i<=len do

       begin

               cur:=ord(s[i]);

               //BCD转换

               FmtStr(t,'%4.4X',[cur]);

               Result:=Result+t;

               inc(i);

       end;

end;

// 用来交换移位

function TFrmSendSms.ExchangeCode(src: string): string;

var

       Len, i : integer;

       tmp : string;

begin

       Len := length(src);

       if (len <> 11) and (len <> 13) then

       begin

               ExchangeCode := '';

               exit;

       end;

       src := src + 'F';

       i := 1;

       while i<=len do

       begin

               tmp := tmp + src[i + 1] + src[i];

               inc(i, 2);

       end;

       ExchangeCode := tmp;

end;

procedure TFrmSendSms.IniSMS;

var

       SendData : string;

begin

       // 先判断串口是否打开

       if not MSComm.PortOpen then

               exit;

       // 设置编码模式,其中Text=1, pdu = 0

       if Config.m_Config.m_SMSMode = 'Text' then

               SendData := 'AT+CMGF=1' + chr(13)  // Text

       else

               SendData := 'AT+CMGF=0' + chr(13); // Pdu

       MSComm.Output := SendData;

       // 设置短信中心号码

 //      SendData := 'AT+CSCA="' + Config.m_Config.m_SMSCenter + '"' + chr(13); //2004-05-01

       SendData := 'AT+CSCA' +chr(13);

//        Showmessage(SendData);

       MSComm.Output := SendData;

end;

function TFrmSendSms.OpenPort: Boolean;

begin

       // 更新MSComm的设置

       try

               MSComm.CommPort := Config.m_Com.m_ComPort;

               MSComm.Settings := Config.m_Com.m_BaudRate + ',' + Copy(Config.m_Com.m_Parity, 0, 1) + ',' + Config.m_Com.m_DataBits + Config.m_Com.m_StopBits;

               MSComm.InBufferSize := 1024;            // 指定接收缓冲区大小

               MSComm.InBufferCount := 0;              // 清空接收缓冲区

               MSComm.InputMode := 1;                  // 设置数据获取方式

               MSComm.InputLen := 0;                   // 设置读取方式

               MSComm.PortOpen := True;                // 打开指定的串口

               OpenPort := MSComm.PortOpen;            // 反回值

       except

               OpenPort := False;

               MessageBox(self.Handle, PChar('串口' + PChar(IntToStr(Mscomm.CommPort)) + '打开失败!,请更换其它串口'),'串口打开失败',MB_OK);

       end;

end;

// Pdu模式编码

procedure TFrmSendSms.SendInEncodePdu(sms, mobile: string);

var

       Widesms : WideString;  // 定义成WideString型,每个字符占两上字节

       SendData : string;

       tmp : string;

       len : integer;

begin

       // 参考pdu串   08 91 683108701305F0 11 00 0B 91 3176378290F9 00 00 00 02 C834

       SendData := 'AT+CMGS="';

       SendData := SendData + '0891';

       // 每两位交换构造短信中心串

  //     tmp := ExchangeCode(Config.m_Config.m_SMSCenter); 2004-05-01

       SendData := SendData + tmp;

       SendData := SendData + '11000B91';

       // 每两位交换构造接收手机号码串

       tmp := ExchangeCode(mobile);

       SendData := SendData + tmp;

       SendData := Senddata + '0000A7';

       // 将中文GB2312编码转换为代码页为CP936的Unicode编码

       Widesms := WideString(sms);

       tmp := EncodeGb(Widesms);

       // 此处为Widesms 的长度,不是sms的长度!

       len := length(Widesms);

       SendData := SendData + IntToStr(len) + tmp;

       SendData := SendData + '"' + chr(13);

       // Pdu串构造完毕,发送

       MSComm.Output := SendData;

end;

// Text模式编码

procedure TFrmSendSms.SendInEncodeText(sms, mobile: string);

var

       strOut : string;        // 定义成string型,一个字符用一个字节来表示

begin

       strOut := 'AT+CMGS="' + mobile + '"' + chr(13);  // chr(13)是回车

       MSComm.Output := strOut;

       strOut := sms + chr(26);        // chr(26) 是 ctrl + z

       MSComm.Output := strOut;

end;

procedure TFrmSendSms.SendSMS(Mobile:string;SmsMsg:WideString);

var

       i : integer;

       strSMS : string;

begin

       // 加入发送短消息日志

       if length(Mobile) <> 11 then

       begin

               ShowMessage('目标手机号不正确,发送短信失败!');

               exit;

       end;

       if length(Config.m_Config.m_SMSCenter) <> 13 then

       begin

               ShowMessage('短信中心地址不正确,发送短信失败!');

               exit;

       end;

       // 打开端口

       if not OpenPort() then

               exit;

       // 初始化短消息,指定编码模式和短消息中心地址

       IniSMS();

      // for i := 0 to lst.Count - 1 do

       begin

               if Config.m_Config.m_SMSMode = 'Text' then

               begin

                       strSMS :=SmsMsg;//Memo1.Lines.Text;

                       SendInEncodeText(strSMS, Mobile);

               end

               else

               begin

                       strSMS :=SmsMsg;//Memo1.Lines.Text;

                       SendInEncodePdu(strSMS, Mobile);

               end;

       end;

       // 关闭串口

       MSComm.PortOpen := False;

end;

procedure TFrmSendSms.Button2Click(Sender: TObject);

begin

  if Trim(edit1.Text)='' then

  begin

      Application.MessageBox('手机号码不能为空,请重新输入!','提示信息',$40);

      edit1.SetFocus;

      Abort;

  end;

 if Trim(Memo1.Text)='' then

  begin

      Application.MessageBox('没有可发送的短信内容,请重新输入!','提示信息',$40);

      Memo1.SetFocus;

      Abort;

  end;

  SendSMS(edit1.Text,Memo1.Text);

end;

procedure TFrmSendSms.Memo1Change(Sender: TObject);

var

  strMemo:WideString;

begin

  StrMemo:=Memo1.Text;

  Label3.Caption:='字符数:'+IntToStr(Length(StrMemo));

end;

end.