想做个发送短信的程序,硬件设备:手机Modem、SIM卡 软件:自己写程序
小弟也是初次涉及短信问题,从来没有做过,不知道怎么弄,请大家给点意见,我的邮箱:zhangjing1979666@sohu.com,还有我能借来一个NEC的手机,支持彩信,去年买的,3000 多块呀,能不能写个程序先测试一下呢,具体用到什么控件、哪些技术指标,请大家互相交流 问题点数:20、回复次数:32Top
1 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2005-07-18 16:35:16 得分 0
AT指令
COM编程
还需要最难找到的,手机AT协议规范文件,说白了,就是手机连接PC的SDK文档
一般手机厂商是不公开的
http://lysoft.7u7.netTop
2 楼hzq99(kuei)回复于 2005-07-18 16:39:28 得分 0
在串口编程,用AT指令Top
3 楼zhangjing1979666(好小子)回复于 2005-07-18 16:45:26 得分 0
谢谢ly_liuyang(Liu Yang), hzq99(kuei),你说用 AT 指令,我也知道,怎么用?能不能说的详细点,具体的操作步骤之类的Top
4 楼chenylin(陈SIR)回复于 2005-07-18 17:55:21 得分 1
先在超级终端时试一下就清楚了。Top
5 楼cjf1009(农民程序员)回复于 2005-07-18 21:48:09 得分 0
利用手机模块实现短消息
上海市粤秀路46号76楼302室 童瑞华
全球定位系统(GPS)系统由于性能优异,在民用上应用范围很广。其可以用于空中交通管理、大地精密测量、摄影测量、监测地壳运动、火山活动、野外调查和勘探的定位、地面沉降、土地塌方,甚至于用于民用如建筑、汽车、旅行探险、狩猎等方面。但是如何将GPS定位数据传递到监控中心一直是相应系统关注的焦点。目前,移动子系统和监控中心子系统之间往往通过短消息方式传送数据。这种方式采用通常的无线GSM发送接收设备就能实现短消息的传送,实现简单,具有通信成本低、频谱利用率高、系统容量大、业务种类多、保密性能好、抗干扰能力强、通话质量高、国际自动漫游等优点,它利用信令信道传输,不用拨号建立连接,直接把要发的信息加上目的地址发送到短消息服务中心,由短消息服务中心在发给最终的信宿,是目前应用最广泛的通信方案。
目前,在相关的系统中往往使用手机模块(摩托罗拉、西门子等均有相应的产品)来实现与短消息中心的联系。主要原因在于:使用手机模块利于系统集成,成本较低,而使用手机虽然也可以实现相应功能,但是需要外加数据线,成本相当高。本文主要介绍与短消息开发相关的GSM AT指令。
1.相关的GSM AT指令
与SMS有关的GSM AT指令(from GSM07.05)如表1所示:
表1 相关的GSM AT指令
AT 指令
功 能
AT+CMGC
Send an SMS command(发出一条短消息命令)
AT+CMGD
Delete SMS message(删除SIM卡内存的短消息)
AT+CMGF
Select SMS message formate(选择短消息信息格式:0-PDU;1-文本)
AT+CMGL
List SMS message from preferred store(列出SIM卡中的短消息PDU/text: 0/“REC UNREAD”-未读,1/“REC READ”-已读,2/“STO UNSENT”-待发,3/“STO SENT”-已发,4/“ALL”-全部的)
AT+CMGR
Read SMS message(读短消息)
AT+CMGS
Send SMS message(发送短消息)
AT+CMGW
Write SMS message to memory(向SIM内存中写入待发的短消息)
AT+CMSS
Send SMS message from storage(从SIN|M内存中发送短消息)
AT+CNMI
New SMS message indications(显示新收到的短消息)
AT+CPMS
Preferred SMS message storage(选择短消息内存)
AT+CSCA
SMS service center address(短消息中心地址)
AT+CSCB
Select cell broadcast messages(选择蜂窝广播消息)
AT+CSMP
Set SMS text mode parameters(设置短消息文本模式参数)
AT+CSMS
Select Message Service(选择短消息服务)
对短消息的控制共有三种模式:
Block Mode
基于AT命令的PDU Mode
基于AT命令的Text Mode
使用Block模式需要手机生产厂家提供驱动支持,目前,PDU Mode 已取代 Block Mode, Text Mode比较简单,本文重点介绍模式PDU Mode,以西门子公司的产品TC35T为例。
2.计算机与TC35T的通信
(1)RS232串口连接
由于TC35T自带RS232串口线,故只需将其连接到计算机串口即可。打开超级终端,选择相应的串口,将端口参数设置为:速率—4800、奇偶校验位—无、数据位—8、停止位—1、流量控制—硬件。
(2)连接测试
输入“AT”然后回车,屏幕上返回“OK”表明计算机与TC35T已连接成功,TC35T能够正常工作。这时就可以测试各类AT命令。
当测试命令“AT+CMGS=?<CR>”时,如果返回“OK”标明TC35T支持该指令。该指令的完整语法如下:
如果此时TC35T处于PDU Mode(即“AT+CMGF?<CR>”返回“0”)
AT+CMGS=<length><CR>PDU is given<^Z/ESC>
如果短消息发送成功,则返回“OK”,并显示信息号:
+CMGS: <mr>[,<ackpdu>]
如果短消息发送失败,则返回如下信息号:
+CMS ERROR: <err>
如果此时TC35T处于Text Mode(即“AT+CMGF?<CR>”返回“1”)
AT+CMGS=<da>[,toda]<CR>text is entered<^Z/ESC>
如果短消息发送成功,则返回“OK”,并显示信息号:
+CMGS: <mr>[,<scts>]
如果短消息发送失败,则返回如下信息号:
+CMS ERROR: <err>
另外,由于使用的是TC35T,当有新的短消息到来时,需要TC35T产生提示,使用指令“AT+CNMI”。该指令的完整语法如下:
AT+CNMI=[<mode>][,<mt>][,<bm>][,<ds>][,<bfr>]
如果有新的短消息来到,则TC35T将自动返回下列提示:
+CMTI: “SM”, <index>
此时读出<index>,然后用“AT+CMGR”指令即可读出短消息内容。
3.PDU数据格式分析:
例如,我们要将字符“Hi”字符发送到目的地“13677328099”
PDU字符串为:
08 91 683108701305F0 11 00 0D 91 3176378290F9 00 00 00 02 C834
⑴08—短信息中心地址长度。指(91)+(683108701305F0)的长度。
⑵91—短信息中心号码类型。91是TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还有其它数值,但91最常用。
91—10010001
BIT No.
7
6
5
4
3
2
1
0
Name
1
数值类型
号码鉴别
数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展;
号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;
⑶683108701305F0—短信息中心号码。由于位置上略有处理,实际号码应为:8613800731500(字母F是指长度减1)。这需要根据不同的地域作相应的修改。
⑴、⑵、⑶通称短消息中心地址(Address of the SMSC)。
⑷11—文件头字节。
11&h=00010001&b
BIT No.
7
6
5
4
3
2
1
0
Name
TP-RP
TP-UDHI
TP-SPR
TP-VFP
TP-RD
TP-MTI
Value
0
0
0
1
0
0
0
1
应答路径—TP-RP(TP-Reply-Path):0—不设置; 1—设置
用户数据头标识—TP-UDHL(TP-User-Data-Header-Indicator):0—不含任何头信息; 1—含头信息
状态报告要求—TP-SPR(TP-Status-Report-Request):0—需要报告; 1—不需要报告
有效期格式—TP-VPF(TP-Validity-Period-Format):00—不提供(Not present); 10—整型(标准);01—预留; 11—提供8位字节的一半(Semi-Octet Represented)
拒绝复制—TP-RD(TP-Reject-Duplicates):0—接受复制; 1—拒绝复制
信息类型提示—TP-MTI(TP-Message-Type-Indicator):00—读出(Deliver); 01—提交(Submit)
⑸00—信息类型(TP-Message-Reference)
⑹0B—被叫号码长度。
⑺91—被叫号码类型(同⑵)。
⑻3176378290F9—被叫号码,经过了位移处理,实际号码为“13677328099”。
⑹、⑺、⑻通称目的地址(TP-Destination-Address)。
⑼00—协议标识TP-PID(TP-Protocol-Identifier)
BIT No.
7
6
5
4
3
2
1
0
Bit No.7与Bit No.6: 00—如下面定义的分配Bit No.0—Bit No.5;01—参见GSM03.40协议标识完全定义;10—预留;11—为服务中心(SC)特殊用途分配Bit No.0—Bit No.5。
一般将这两位置为00。
Bit No.5:0—不使用远程网络,只是短消息设备之间的协议;1—使用远程网络。
Bit No.0—Bits No.4:00000—隐含;00001—电传;00010—group 3 telefax;00100—语音;00101—欧洲无线信息系统(ERMES);00110—国内系统;10001—任何基于X.400的公用信息处理系统;10010—Email。
⑽00—数据编码方案TP-DCS(TP-Data-Coding-Scheme)
BIT No.
7
6
5
4
3
2
1
0
Bit No.7与Bit No.6 :一般设置为00;Bit No.5:0—文本未压缩,1—文本用GSM标准压缩算法压缩;Bit No.4:0—表示Bit No.1、Bit No.0为保留位,不含信息类型信息,1—表示Bit No.1、Bit No.0含有信息类型信息;Bit No.3与Bit No.2:00—默认的字母表,01—8bit,10—USC2(16bit),11—预留;Bit No.1与Bit No.0:00—Class 0,01—Class 1,10—Class 2(SIM卡特定信息),11—Class 3。
⑾00—有效期TP-VP(TP-Valid-Period)
VP value(&h)
相应的有效期
00 to 8F
(VP+1)*5 分钟
90 to A7
12小时+(VP-143)*30分钟
A8 to C4
(VP-166)*1天
C5 to FF
(VP-192)*1 周
⑿02—用户数据长度TP-UDL(TP-User-Data-Length)
⒀C834—用户数据TP-UD(TP-User-Data)“Hi”
4.短消息编码
设需要发送的短消息内容为“Hi”,使用的GSM字符集为7位编码。首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:H翻译成1001000,i翻译成1101001,显然H的二进制编码不足八位,那么就将i的最后一位补足到H的前面。那么就成了11001000(C8),i剩下六位110100,前面再补两个0,变成00110100(34),于是“Hi”就变成了两个八进制数 C8 34。
5.短消息的发送与接收案例
鉴于TC35(T)支持TEXT格式,我们在试验中主要测试该格式。
(1)设置短消息中心
AT+CSCA="+8613800731500"(短消息中心);
(2)设置短消息发送格式
AT+CMGF=1 (1-TEXT; 0-PDU);
(3)发送短消息(短消息内容为“test”)
AT+CMGS="13508485560"(目的地址) <cr>
> test ^z ;
(4)设置短消息到达自动提示: 设置短消息到达提示当短消息被接收,将获取指令: +CMTI:"SM",INDEX(信息存储位置)
AT+CNMI=1,1,0,0,1();
(5)获取短消息内容(Once more),假设INDEX=8。
AT+CMGR=8
返回信息如下:
+CMGR: "REC UNREAD","+8613508485560",,"01/07/16,15:37:28+32",Once more
6.注意事项
(1)短消息中心一般不会改动,如果短消息中心号码改动,在使用“AT+CSCA”语句时,记住TC35要重新启动,否则TC35不能正常工作(TC35T不存在此问题)。
(2)某些SIM卡带有密码,启动时需要输入密码。
Top
6 楼cjf1009(农民程序员)回复于 2005-07-18 21:52:07 得分 5
要先掌握串口编程的基本方法,可以用spcomm
发短信主要是发短信的两种格式:TEXT和PDU,一般用PDU(可以发中文)Top
7 楼zhangjing1979666(好小子)回复于 2005-07-19 12:24:21 得分 0
Win2000pro 下没有超级终端吧,哪里有超级终端,还有别说太多理论的东西,一点都不实际,不实用,想要一个具体的操作过程Top
8 楼zhangjing1979666(好小子)回复于 2005-07-19 15:40:04 得分 0
高手呢,进来啊,给点菜鸟似的操作步骤Top
9 楼geyobing(大地精灵)回复于 2005-07-19 15:47:25 得分 0
用手机的话,你就需要了解AT指令,如果你需要我可以给你GSM短信猫,已经封装好了,发短信这一块,只要简单了解跟GSM短信猫的通讯协议,就可以进行程序开发,如果你需要可以跟我联系,我已经用在很多地方,相当好用,我的邮箱:ajq_8036@163.com,软件我也有的Top
10 楼zhangjing1979666(好小子)回复于 2005-07-19 16:10:13 得分 0
大家继续来,我继续等待,我就是先想测试一下、学习一下,然后正式在用Top
11 楼zhangjing1979666(好小子)回复于 2005-07-19 16:23:29 得分 0
Win2000pro 下有超级终端吗Top
12 楼wanshi131(顽石)回复于 2005-07-19 16:31:07 得分 2
开始-〉附件-〉通讯-〉超级终端
用串口调试软件也行的,你用手机发,还需要买根串口线啊Top
13 楼zhangjing1979666(好小子)回复于 2005-07-19 16:40:48 得分 0
wanshi131(顽石) ,你有 QQ 号吗,我想跟你学学,我的 25038693(土不小子)Top
14 楼wanshi131(顽石)回复于 2005-07-19 17:03:27 得分 0
公司不敢上QQ, MSN:wanshi131@hotmail.comTop
15 楼zhangjing1979666(好小子)回复于 2005-07-19 17:10:10 得分 0
啊,那 POPO 有吗?就是网易的泡泡,我的 ZHANGJING1979666@163.COM,如果没有,咱们邮箱联系吧,我的 ZHANGJING1979666@SOHU.COMTop
16 楼geyobing(大地精灵)回复于 2005-07-20 11:46:09 得分 0
我的泡泡ajq_8036@163.com,我们可以在线聊Top
17 楼tjianliang(乡关何处)回复于 2005-07-20 13:29:20 得分 0
用程序向串口发AT指令,就和超级终端里敲AT指令是一样的Top
18 楼bluesen(善哉)回复于 2005-07-20 14:01:20 得分 0
别自己写了,到我的网站上下载一个免费的:
http://www.bluespace.com.cn/koodoo/examples_sms.htm
Top
19 楼zhangjing1979666(好小子)回复于 2005-07-20 16:43:52 得分 0
好的,谢谢大家的帮助,不长时间我还会来的,在调试的过程当中肯定会遇到各种各样的问题的Top
20 楼noahroom()回复于 2005-07-20 17:44:50 得分 0
您好:
短信收发设备(短信猫)(全国最低价)=750元/台
短信软件开发接口(无任何限制)=800元
我公司郑重承诺:诺亚短信开发接口与诺亚短信设备(短信猫)无任何绑定限制:即第一次买入后,以后无需再次购买此开发接口,请广大用户在购买时注意咨询,如有疑问,欢迎来电咨询!诺亚短信设备(短信猫)为全国最低价!
我公司还供应以下软件产品:
● 诺亚短信开发接口 ● 诺亚短信群发办公版
● 诺亚短信防伪系统 ● 诺亚短信群发广告版
● 诺亚短信查询系统 ● 诺亚短信群发网络版
● 诺亚短信家校通版 ● 诺亚短信群发物流版
如需了解更多优惠信息,请与我们联系:
北京诺亚公司
联系人:王先生
地 址:北京市海淀区远大路20号鹏安世纪大厦A座12A
邮 编:100089
电 话:010-87416460/51980693
传 真:010-51666783
邮 箱:beijingsms@126.com
QQ 号:397923974
MSN:noahsoft@hotmail.com
网 址:www.taobaozhe.comTop
21 楼zhangjing1979666(好小子)回复于 2005-07-27 17:05:36 得分 0
noahroom() 不要发广告了,我是不会买你的接口的,不过短信猫没准可以买你的,如果有心,就帮忙,就知道钱,素质Top
22 楼haogui0(好鬼)回复于 2005-07-29 09:44:18 得分 12
其实这个东东的开发还是比较简单地,不过需要一点点经验,需要你两方面的知识,一是串口通讯,再就是你的gsm modem的AT指令集了。我个人开发过不少gsm modem的程序,实现了同类商业软件的几乎所有功能,有什么需求请联系 QQ:Top
23 楼haogui0(好鬼)回复于 2005-07-29 09:46:16 得分 0
呵呵,刚才没发完,QQ:185597150Top
24 楼shxng(重新开始。。。)回复于 2005-07-29 10:48:47 得分 0
学习一下Top
25 楼noahroom()回复于 2005-08-01 18:56:18 得分 0
您好:
短信收发设备(短信猫)(全国最低价)=750元/台
短信软件开发接口(无任何限制)=800元
我公司郑重承诺:诺亚短信开发接口与诺亚短信设备(短信猫)无任何绑定限制:即第一次买入后,以后无需再次购买此开发接口,请广大用户在购买时注意咨询,如有疑问,欢迎来电咨询!诺亚短信设备(短信猫)为全国最低价!
我公司还供应以下软件产品:
● 诺亚短信开发接口 ● 诺亚短信群发办公版
● 诺亚短信防伪系统 ● 诺亚短信群发广告版
● 诺亚短信查询系统 ● 诺亚短信群发网络版
● 诺亚短信家校通版 ● 诺亚短信群发物流版
如需了解更多优惠信息,请与我们联系:
北京诺亚公司
联系人:王先生
地 址:北京市海淀区远大路20号鹏安世纪大厦A座12A
邮 编:100089
电 话:010-87416460/51980693
传 真:010-51666783
邮 箱:beijingsms@126.com
QQ 号:397923974
MSN:noahsoft@hotmail.com
网 址:www.taobaozhe.comTop
26 楼zhangjing1979666(好小子)回复于 2005-08-05 09:52:13 得分 0
广告拜托不要发了,我想学真材实料的东西,不想买你们现成的东西,哇哈哈Top
27 楼FlyBird2004(Phoenix)回复于 2005-08-05 10:38:52 得分 0
这是我自己写的一个单元,是一个项目中的GPRS发送短信代码,是移动的短信发送.给你做个参考.
unit U_Function;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, OleCtrls, MSCommLib_TLB, ComCtrls, DBCtrls,
IniFiles, DB, ADODB;
type
TSendNoteInfo = Record
lAddr : string;
lSendPhone : WideString;
lNoteContent : string;
lSendFlag : integer;
end;
TPublicFunction = Class
public
Constructor Create;
Destructor Destroy(); override;
public
IniFile : TIniFile;
function ConnectDataSource() : Boolean;
procedure SendNote(_Addr : string; _Phone, _NoteContent : WideString);
function ConversionText(_NoteText : string): string;
function ConversionPhone(_Phone : string): string;
function ConversionAddr(_Addr : string) : string;
end;
implementation
uses U_DataMoudle;
{ TPublicFunction }
//连接数据库
function TPublicFunction.ConnectDataSource: Boolean;
type
TSQLConnect = Record
tServerName, tDataBaseName, tUserName, tPassword : string;
end;
var
iSQLConnect : TSQLConnect;
i : integer;
begin
Result := False;
try
iSQLConnect.tServerName := IniFile.ReadString('BasicSetting', 'ServerName', 'Phoenix');
iSQLConnect.tDataBaseName := IniFile.ReadString('BasicSetting', 'DataBaseName', 'online');
iSQLConnect.tUserName := IniFile.ReadString('BasicSetting', 'UserName', 'online');
iSQLConnect.tPassword := IniFile.ReadString('BasicSetting', 'SQLPassword', '');
if (iSQLConnect.tServerName <> '') and (iSQLConnect.tDataBaseName <> '') then
begin
F_DM.iADOConnection.Connected := False;
F_DM.iADOConnection.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;'+
'User ID='+iSQLConnect.tUserName+';Password='+iSQLConnect.tPassword+
';Initial Catalog='+iSQLConnect.tDataBaseName+';Data Source='+iSQLConnect.tServerName;
//ShowMessage(F_DM.iADOConnection.ConnectionString);
F_DM.iADOConnection.LoginPrompt := False;
F_DM.iADOConnection.Connected := True;
for i := 0 to F_DM.ComponentCount - 1 do
begin
if (F_DM.Components[i] is TADODataSet) then
TADODataSet(F_DM.Components[i]).Connection := F_DM.iADOConnection;
end;
F_DM.AT_PersonalInfo.TableName := 'PersonalInfo';
F_DM.AT_PersonalInfo.Active := False;
F_DM.AT_PersonalInfo.Active := True;
F_DM.AT_AlarmVal.TableName := 'AlarmVal';
F_DM.AT_AlarmVal.Active := False;
F_DM.AT_AlarmVal.Active := True;
Result := True;
end;
except
end;
end;
//转换地址(短信中心号码)
function TPublicFunction.ConversionAddr(_Addr: string): string;
var
iAddr, iConversion : string;
i, j : integer;
begin
Result := '';
try
if Copy(_Addr, 1, 3) = '+86' then
iAddr := Copy(_Addr, 2, Length(_Addr)- 1)
else if Copy(_Addr, 1, 2) = '86' then
iAddr := _Addr
else if Copy(_Addr, 1, 2) = '13' then
iAddr := '86'+ _Addr;
if (Length(iAddr) Mod 2 = 1) then
iAddr := iAddr + 'F';
i := 1; j := 2;
while j <= Length(iAddr) do
begin
iConversion := iConversion+ Copy(iAddr, j, 1)+ Copy(iAddr, i, 1);
Inc(i, 2);
Inc(j, 2);
end;
iConversion := '91'+ iConversion;
Result := IntToHex((Length(iConversion) div 2), 2)+ iConversion;
except
Result := '';
end;
end;
//转换电话号码
function TPublicFunction.ConversionPhone(_Phone: string): string;
var
iPhoneNumber, iConversion : string;
i, j : integer;
begin
Result := '';
try
if Copy(_Phone, 1, 3) = '+86' then
iPhoneNumber := Copy(_Phone, 2, Length(_Phone)- 1)
else if Copy(_Phone, 1, 2) = '86' then
iPhoneNumber := _Phone
else if Copy(_Phone, 1, 2) = '13' then
iPhoneNumber := '86'+ _Phone;
if (Length(iPhoneNumber) Mod 2 = 1) then
iPhoneNumber := iPhoneNumber + 'F';
i := 1; j := 2;
while j <= Length(iPhoneNumber) do
begin
iConversion := iConversion+ Copy(iPhoneNumber, j, 1)+ Copy(iPhoneNumber, i, 1);
Inc(i, 2);
Inc(j, 2);
end;
//ShowMessage(iConversion);
Result := '11000D91' + iConversion + '000800';
except
Result := '';
end;
end;
//转换中文文本
function TPublicFunction.ConversionText(_NoteText: string): string;
var
i, j, Len : integer;
Cur : integer;
Temp : string;
Ws, Wt : WideString;
begin
Result := '';
Wt := '';
try
Ws := _NoteText;
Len := Length(Ws);
i := 1; j := 0;
while i <= Len do
begin
Cur := ord(Ws[i]);
FmtStr(Temp, '%4.4X', [Cur]);
Wt := Wt + Temp;
Inc(i);
j := (j+ 1) Mod 7;
end;
//ShowMessage(Wt+ ' '+ IntToHex(Length(Wt) div 2, 2)+ ' '+ IntToStr(Length(Wt) div 2));
Result := IntToHex(Length(Wt) div 2, 2)+ Wt;
except
Result := '';
end;
end;
constructor TPublicFunction.Create;
var
iFileDir : string;
begin
iFileDir := ExtractFilePath(Application.ExeName)+ 'Initialize.ini';
if FileExists(iFileDir) then
IniFile := TIniFile.Create(iFileDir);
end;
destructor TPublicFunction.Destroy;
begin
inherited;
end;
//短信发送报警信息
procedure TPublicFunction.SendNote(_Addr : string; _Phone, _NoteContent : WideString);
var
iOutStr : Widestring;
iStr, iSubPhone : string;
iMSComm : TMSComm;
iRecordPhone : WideString;
procedure MSCommSendNote(_Count, _Note : string);
begin
if Not iMSComm.PortOpen then
iMSComm.PortOpen := True;
iMSComm.Output := 'at+cmgf=0'+ Char(13)+ Char(10);
Sleep(300);
iMSComm.Output := 'at+cmgs='+ _Count+ Char(13)+ Char(10);
Sleep(4000);
iMSComm.Output := _Note;
Sleep(4000);
iMSComm.PortOpen := False;
end;
begin
iMSComm := TMSComm.Create(Nil);
try
if (_Phone = '') or (_NoteContent = '') then
Exit;
if iMSComm.PortOpen then
iMSComm.PortOpen := False;
case IniFile.ReadInteger('BasicSetting', 'PortNumber', 1) of
1 : iMSComm.CommPort := 1;
2 : iMSComm.CommPort := 2;
3 : iMSComm.CommPort := 3;
4 : iMSComm.CommPort := 4;
end;
iMSComm.InputLen := 0;
iMSComm.InBufferCount := 0;
if Not iMSComm.PortOpen then
iMSComm.PortOpen := True;
//__________________________________________________________________________
//检索地址、电话号码、内容 发送短信
if AnsiPos(',', _Phone) <> 0 then
begin
iRecordPhone := _Phone;
Repeat
iSubPhone := Copy(iRecordPhone, 1, AnsiPos(',', iRecordPhone)- 1);
try
iStr := FloatToStr(Length(ConversionPhone(iSubPhone)+ ConversionText(_NoteContent))/ 2);
iOutStr := ConversionAddr(_Addr)+
ConversionPhone(iSubPhone)+
ConversionText(_NoteContent)+
Char(26)+ Char(13)+ Char(10);
//ShowMessage(iStr+ ' '+ iOutStr);
finally
MSCommSendNote(iStr, iOutStr);
Delete(iRecordPhone, 1, AnsiPos(',', iRecordPhone));
end;
until
AnsiPos(',', iRecordPhone) = 0;
end;
try
iSubPhone := Copy(iRecordPhone, 1, Length(iRecordPhone));
iStr := FloatToStr(Length(ConversionPhone(iSubPhone)+ ConversionText(_NoteContent))/ 2);
iOutStr := ConversionAddr(_Addr)+
ConversionPhone(iSubPhone)+
ConversionText(_NoteContent)+
Char(26)+ Char(13)+ Char(10);
//ShowMessage(iStr+ ' '+ iOutStr);
finally
MSCommSendNote(iStr, iOutStr);
end;
//群发短信,以“,”将电话号码格开
//__________________________________________________________________________
finally
iMSComm.Free;
end;
end;
end.
Top
28 楼woaichenyu(小吴)回复于 2005-08-05 10:39:04 得分 0
路过
学习到了Top
29 楼leaber(鹤舞白沙)回复于 2005-08-10 15:05:15 得分 0
嗯,关注一下。Top
30 楼opqhjb(又回来做程序员了!苦呀!)回复于 2005-08-10 16:14:58 得分 0
爽呀!Top
31 楼lanyus()回复于 2005-08-10 16:29:17 得分 0
路过捡了点好东西。。。UPTop
32 楼noahroom()回复于 2005-08-21 19:12:56 得分 0
您好:
短信收发设备(短信猫)(全国最低价)=750元/台
短信软件开发接口(无任何限制)=800元
我公司现面向全国诚征短信产品代理商,全线代理我公司产品,代理我公司产品具有投资少,见效快,收益高等特点!有意者请速与我公司联系:010-87416460,谢谢!
我公司郑重承诺:诺亚短信开发接口与诺亚短信设备(短信猫)无任何绑定限制:即第一次买入后,以后无需再次购买此开发接口,请广大用户在购买时注意咨询,如有疑问,欢迎来电咨询!诺亚短信设备(短信猫)为全国最低价!
我公司还供应以下软件产品:
● 诺亚短信开发接口 ● 诺亚短信群发办公版
● 诺亚短信防伪系统 ● 诺亚短信群发广告版
● 诺亚短信查询系统 ● 诺亚短信群发网络版
● 诺亚短信家校通版 ● 诺亚短信群发物流版
如需了解更多优惠信息,请与我们联系:
北京诺亚公司
联系人:王先生
地 址:北京市海淀区远大路20号鹏安世纪大厦A座12A
邮 编:100089
电 话:010-87416460/51980693
传 真:010-51666783
邮 箱:beijingsms@126.com
QQ 号:397923974
MSN:noahsoft@hotmail.com
网 址:www.taobaozhe.comTop




