你是只要发送模块吗?
好的,下面是我参考他人写的发送模块
发送 TXT文件的时候 直接使用这个就OK了
procedure TForm1.SendBtnTxtClick(Sender: TObject);
var
RMobile:string;
begin
if length(sendMemo.Text)>100 then
begin
application.MessageBox('请将信息控制在50字以内!','提示',mb_iconinformation);
sendMemo.SetFocus;
exit;
end
else
begin
RMobile := trim(recedit.Text);//接收人的手机号。
if copy(RMobile,1,2)='13' then
RMobile :='86'+RMobile;
//手机号前面加86
Comport1.WriteStr('AT+CSCA="+8613800592500"'+char(13));//这个是厦门地区的短信中心号码,你要修改成你那边的短信中心号码。
sleep(300);
Comport1.WriteStr('AT+CSCS="GSM"'+#13);//AT指令自己去查看吧
sleep(100);
Comport1.WriteStr('AT+CMGF=1'+#13#10);
sleep(300);
Comport1.WriteStr('AT'+#13#10);
sleep(300);
Comport1.WriteStr('AT+CMGS="'+ RMobile+'"'+#13);
sleep(500);
Comport1.WriteStr(sendMemo.Text+Char(26));
sleep(100);
end;
end;
//-----------------------------------------------
OK 下面是发送PDU格式的短信模块 会用到两个函数
//---该函数用来将PDU编码
function TForm1.encodePDUSMS(Mess : Widestring):String;
var
sLen,cur,i:integer;
strTmp:string;
begin
result := '';
sLen := length(Mess);
i := 1;
while i <= sLendo
begin
cur := ord(Mess);
//先返回序数值
FmtStr(strTmp,'%4.4X',[cur]);
//格式化序数值(BCD转换)
result := result + strTmp;
inc(i);
end;
end;
//-------------------------------------------------------
function TForm1.StrtoPDU(CentreNO,RcvNO: string): string;
var
StrTemp,PDURcvNo:String;
i,m,StrLen:integer;
begin
StrTemp:='';
PDURcvNo:='';
//解析短消息中中心号码
StrLen:=Length(CentreNO);
if (StrLen mod 2)<>0 then
//如果是奇数
begin
CentreNO:=CentreNO+'F';
StrLen:=StrLen+1;
end;
i:=1;
while i<=Strlendo
begin
StrTemp:=StrTemp+CentreNO[i+1]+CentreNO;
// 交换奇数位和偶数位
inc(i,2);
end;
StrTemp:='91'+StrTemp;
//将短信息中心号码前面加上字符91,91是国际化的意思
StrLen:=Length(StrTemp);
m:=(StrLen div 2);
StrTemp:=inttohex(m,2)+StrTemp;
//解析完短消息中中心号码
//解析收信人号码
if copy(RcvNo,1,2)='13' then
RcvNo:='86'+RcvNo;
//手机号前面加13
if copy(RcvNo,1,1)='0' then
RcvNo:='106'+RcvNo;
//小灵通前面加106
if copy(RcvNo,1,2)='86' then
StrTemp := StrTemp + '11000D91';
//手机91, 0D表示电话长度(13位),用16进制表示。
if copy(RcvNo,1,3)='106' then
begin
if Length(RcvNo)=15 then
StrTemp := StrTemp + '11000F81';
//小灵通81, 0F表示电话长度(15位),用16进制表示。
if Length(RcvNo)=14 then
StrTemp := StrTemp + '11000E81';
end;
StrLen:=Length(RcvNO);
if (StrLen mod 2)<>0 then
//如果是奇数
begin
RcvNO:=RcvNO+'F';
StrLen:=StrLen+1;
end;
i:=1;
while i<=Strlendo
begin
PDURcvNo:=PDURcvNo+RcvNO[i+1]+RcvNO;
// 交换奇数位和偶数位
inc(i,2);
end;
PDURcvNo:=PDURcvNO+'0008A7';
Result:=StrTemp+PDURcvNo;
end;
//----------------------------------------------------------
procedure TForm1.btnsendClick(Sender: TObject);
var
RMobile:string;
begin
if length(sendpdu.Text)>100 then
begin
application.MessageBox('请将信息控制在50字以内!','提示',mb_iconinformation);
sendpdu.SetFocus;
exit;
end
else
begin
PDUMess :=encodePDUSMS(Widestring(sendpdu.Text));
encodepdu.Text :=PDUMess;
PDULength :=InttoHex(length(PDUMess) div 2,2) ;
PDUText :=StrtoPDU(trim(cenedit.Text),Trim(recedit.Text))+PDULength+PDUMess;
decodepdu.Clear;
{用PDU方式发送短信不用AT指令设置短消息中心号码也可以发送成功,设置短信中心,返加Error,也能发送成功}
// MSComm1.Output :='AT+CSCA="+8613800311500"'+char(13);
//设置短信中心号码
// sleep(300);
RMobile := trim(recedit.Text);//接收人的手机号。
{if copy(RMobile,1,2)='13' then
RMobile :='86'+RMobile;
//手机号前面加86
Comport1.WriteStr('AT+CSCA="+8613800592500"'+char(13));
sleep(300);
}
Comport1.WriteStr('AT+CMGF=0'+#13);
sleep(300);
Comport1.WriteStr('AT+CSCS="HEX"'+#13);
//设置短消息中心时应使用PDU的UCS2编码方式,WaveCom是HEX,否则ERROR!
sleep(300);
Comport1.WriteStr('AT'+#13);
sleep(300);
Comport1.WriteStr('AT+CMGS='+inttostr((length(PDUText)-18) div 2)+#13);
sleep(300);
Comport1.WriteStr(PDUText+char(26));
sleep(300);
end;
end;
//上面就可以实现你的短信发送功能了 中英文都OK,不过使用前你要确保自己安装了CPORT控件,因为本程序使用的CPORT 使用其他控件想实现该功能 可以参考一下 基本上没有多大变化