关于短信群发软件的开发

来源:互联网 发布:买家怎么关闭淘宝客 编辑:程序博客网 时间:2024/04/28 06:57

前段时间因为公司要对会员群发短信,因为来不及开发,买了二郎腿软件短信群发软件(800元),在使用中发现当人数过多(上一千)时,速度就会很慢,而且在对方号码错误时,经常会弹出对话框,并中止发送过程。与自已做的消费者管理软件集成度也不高,要用户导出,再导入短信软件。种种不便,引发了我开发短信群发软件的想法。
在csdn论坛上查了一下,发现网上很多牛人已经把源代码都公布出来了。首先是wuzhiwen (蚕蛹) 的贴子。
http://community.csdn.net/Expert/topic/3212/3212036.xml?temp=.4985315

这个免费的控件,没试过,不知道怎么样:
http://www.refound.net/download/soft.asp?id=26

woodlet (木头) 的贴子:
http://community.csdn.net/Expert/topic/3512/3512498.xml?temp=2.967471E-02

相信看完这些贴子,你已经知道怎样做一个完整的短信群发软件了。在这里,把我的一些体会写在这里:
1、发送的间隔时间问题:woodlet (木头) 的做法是 读com口增加重试, 50ms读一次,但是我在实际测试中发现,这种方法仍然存在问题,表现为隔一个号码就会失败。我的理解是每次发送后就会有一个反馈信息,这个反馈需要时间。如果不适当中断一下,就会发送失败。因此,在发送完上一个号码后,线程休息5000毫秒:

        For Each r As DataRow In dt.Rows
            mobilenumber = r("mobile")

            origSendState = GetText(r("sendstate"))

            If origSendState = "" OrElse origSendState = "失败" Then '未发送的和失败的,才进行发送
                If mobilenumber.Length = 11 And mobilenumber.StartsWith("13") Then '是手机号码才发送
                    showMsg(mobilenumber, Me.StatusBarPanel2)
                    SendState = xSMS.Send(Me.txtCenterNumber.Text, r("mobile"), Me.txtSmsContent.Text)
                    showResault(SendState, StatusBarPanel2)
                Else '无效号码不发送短信
                    SendState = "无效"
                End If

                '更新发送状态
                r("sendstate") = SendState
                r.EndEdit()

                Me.ShowSendTotal()

                '不是最后一条记录时,不是无效号码,就Sleep 5秒。
                If cm.Position < cm.Count - 1 And SendState <> "无效" Then
                    Threading.Thread.Sleep(SleepTime.Value)
                End If
            End If

            '移动记录位置
            cm.Position += 1
            dg.Select(cm.Position)
        Next

2、读手机品牌、型号、短信中心号码的问题:经常会出现不能获取手机品牌、型号,不能读取短信中心号码的问题,我的处理是,怱略手机品牌、型号,当出现读不出短信中心号码的情况时,不允许用户进行设置,不允许用户发送短信:
        Dim OpenMsg As String = xSMS.Connect(Me.cbConnectPort.Text, CInt(Me.cbConnectBaudRate.Text))
        If OpenMsg = "" Then
            Me.StatusBarPanel1.Text = xSMS.GetMobileInfo

            If Me.StatusBarPanel1.Text = "未知手机 未知型号" Then
                Me.lblConnectState.Text = "未取得手机及型号"
            End If
            Me.lblConnectState.Text = String.Format("与{0}通迅成功!", Me.cbConnectPort.Text)
            Me.txtCenterNumber.Text = xSMS.GetSMSCenterNumber

            If Me.txtCenterNumber.Text.IndexOf("8613") = -1 Then
                Me.tSend.Enabled = False
            Else
                Me.tSend.Enabled = True
            End If
        Else
            Me.lblConnectState.Text = OpenMsg
            Me.tSend.Enabled = False
        End If

3、AT命令:

序号

AT命令

注释

可能的其他命令格式

1

AT

联机命令

 

2

AT+CGMI

取得手机型号

 

3

AT+CGSN

取得手机IMEI

 

4

AT+CMGF

设置手机为PDU格式

 

5

AT+CMGR

读一条信息

 

6

AT+CMGL

列出手机内部所有的信息

 

7

AT+CMGS

发送一条短消息

 

8

AT+CMGD

删除手机内部一条短消息

 

9

AT+CSCA

设置短消息服务中心号码

 

10

AT+CSQ

取得手机信号强度

可能有部分手机没有这个命令

11

AT+CBC

取得手机电池情况

AT^SBC(西门子手机)

12

AT+CNMI

设置手机消息通知方式

 

手机可能的错误提示

序号

错误提示格式

注释

1

+CME ERROR

手机设置命令错误,表示参数错误

2

+CMS ERROR

手机短消息命令错误,表示参数错误

3

ERROR

手机命令语法错误,表示没有这条命令