【问题标题】:send SMS via SMPP通过 SMPP 发送短信
【发布时间】:2010-03-12 02:29:39
【问题描述】:

我如何直接通过SMPP发送短信?我的供应商提供了一个SMPP接口来发送短信,我怎么把它连接到它?有没有可以教育我使用SMPP发送任何库或例子吗?也许使用PHP?或C#? P>

【问题讨论】:

    标签: sms smpp


    【解决方案1】:

    Logica SMPP project 是用 Java 编写的,可以就此事对您进行教育。除此之外,SMPP Wikipedia page 上的项目列表可以满足类似的目的。

    【讨论】:

      【解决方案2】:

      我已经使用 DevShock 的客户端库几年了,但该公司似乎已经从视野中消失了。

      不过,Google 很快找到了这个:

      http://www.inetlab.ru/Products/ALT.SMS.SmppClient.aspx.

      看起来很简单,并附带 C# 和 VB.Net 示例以及一些不错的文档。

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        我认为最好的选择是 jsmpp lib。它有很好的例子,很多底层的事情发生在幕后,你可以专注于你的业务逻辑。

        jsmpp home site

        【讨论】:

          【解决方案4】:

          我将 Kannel 用于 SMPP,将 kannel 连接到 smpp 服务器:link

          这是我的 kannel.conf:

          group = core
          admin-port = 13000
          smsbox-port = 13001
          admin-password = bar
          status-password = foo
          log-file = "/var/log/kannel/bearerbox.log"
          log-level = 0
          box-deny-ip = "*.*.*.*"
          box-allow-ip = "127.0.0.1"
          access-log = "/var/log/kannel/smsaccess.log"
          
          #SMSC CONNECTION
          group=smsc
          smsc=smpp
          smsc-id=ID1
          host=130.1.1.50
          port=5016
          transceiver-mode = 1
          source-addr-ton = 1
          source-addr-autodetect = 0
          dest-addr-npi = 1
          dest-addr-ton = 1
          smsc-username = "user"
          smsc-password= "pass"
          system-type= "system"
          
          #SMSBOX SETUP
          group = smsbox
          bearerbox-host = 127.0.0.1
          bearerbox-port = 13001
          sendsms-port = 13013
          log-file = "/var/log/kannel/smsbox.log"
          log-level = 0
          access-log = "/var/log/kannel/smsaccess.log"
          
          #SEND-SMS USERS
          group = sendsms-user
          username = user
          password = pass
          
          #SERVICES
          group = sms-service
          keyword = default
          text = "Su mensaje ha sido procesado"
          concatenation = true
          catch-all = true
          accept-x-kannel-headers = true
          get-url = "http://localhost/kannel/receivesms.php?sender=%p&text=%b"
          

          发送短信:

          curl "http://localhost:13013/cgi-bin/sendsms?user=xxxxxx&pass=yyyyy&to=56976808016&text=tes"
          

          【讨论】:

            【解决方案5】:

            如果您熟悉 PerlJasmin(内置于 Python),则可以使用 Net::SMPP。这些都经过了很好的测试和使用。

            【讨论】:

              【解决方案6】:

              对于 SMPP,我建议 Kannel,但有几个问题。

              谁是您的聚合器?他们应该为此提供一些帮助。

              我知道OpenMarket 可以使用多种 SDK 语言实现 SMPP 和 HTTP

              【讨论】:

                【解决方案7】:

                Devshock 组件很酷……我猜他们在某个时候发布了源代码?

                我相信我还有那个。

                但是编写自己的 smpp 库并不难...

                SMPP 3.4 规范相当简单。

                你基本上在做三件事:

                • 管理套接字连接 - .net 堆栈使这变得非常容易并且 高效
                • 发送格式正确的 PDU
                • 将接收到的字节解码为 PDU

                Ola,如果你还需要这个,可以给我发邮件。

                干杯。

                编辑 一些提供商,比如我使用的(高科技信息系统)也为您提供了一个 http 网关,您可以通过它发布您的流量

                您可以将其作为 SMPP 的替代方案。

                我看到使用 SMPP 的一个缺点是频繁断开连接是因为您的网络连接不稳定。

                HTTP 网关选项不会受此影响,而且速度也一样快。

                【讨论】:

                  【解决方案8】:

                  您可以使用 SMPPCli,它是一个命令行 SMPP SMS 发送器。 可以从http://www.kaplansoft.com/download.html下载

                  【讨论】:

                    【解决方案9】:

                    这是在 C# 中使用 smpp 协议的简单示例代码。

                    顺便说一句,ardan studio dll 在数据编码和解码方面存在一些问题。

                    TON 和 NPİ 在 ardan studio dll 中是静态的,因此我们对其进行了更改,然后我们使用了此代码,否则它可以工作,但您不能使用不同的字符集。

                    using ArdanStudios.Common.SmppClient;
                    using ArdanStudios.Common.SmppClient.App;
                    
                    public class SMPPClientService
                    {
                        public static readonly object CounterLock = new object();
                        private static bool isConnected = false;
                        private ESMEManager SMPPConnectClient()
                        {
                            var smppServerPort = Library.GetAppSetting(SMPP_Server_Port).Split(';');
                            string server = "xxx.xx.xx.xxx";
                            short port = 6101;
                            string shortLongCode = "MESSAGETİTLE";
                            string systemId = "USername";
                            string password = "password";
                            DataCodings dataCoding = DataCodings.Latin1;    
                            ESMEManager connectionManager = new ESMEManager("EricssonTest", shortLongCode, new ESMEManager.CONNECTION_EVENT_HANDLER(ConnectionEventHandler), null, null, null, null, new ESMEManager.LOG_EVENT_HANDLER(LogEventHandler), null);
                            connectionManager.AddConnections(1, ConnectionModes.Transmitter, server, port, systemId, password, "Transmitter", dataCoding);
                            return connectionManager;
                        }
                        private static void LogEventHandler(LogEventNotificationTypes logEventNotificationType, string logKey, string shortLongCode, string message)
                        {                    
                        }
                        private static void ConnectionEventHandler(string logKey, ConnectionEventTypes connectionEventType, string message)
                        {
                            if (ConnectionEventTypes.Connected == connectionEventType)
                            {
                                lock (CounterLock)
                                {
                                    isConnected = true;
                                }
                            }
                        }
                        private string Msisdn(string receiver)
                        {
                            var tmp = receiver.Replace("/", "")
                                .Replace(" ", "")
                                .Replace("-", "");
                    
                            if (tmp.Length == 10)
                                return 90 + receiver;
                            if (tmp.Length == 11 && tmp[0] == '0')
                                return 9 + tmp;
                            return tmp;
                        }
                        public int SMPPSendMessage(string messageText, string phoneNumber)
                        {
                            var result = 0;
                            var pql = new PSmsSendLogs();
                            try
                            {
                                using (var connectionManager = SMPPConnectClient())
                                {
                                    phoneNumber = Msisdn(phoneNumber);
                                    DataCodings submitDataCoding = DataCodings.Latin1;
                                    DataCodings encodeDataCoding = DataCodings.Latin1;
                                    List<SubmitSm> submitSm = null;
                                    List<SubmitSmResp> submitSmResp = null;
                                    while (true)
                                    {
                                        Thread.Sleep(1000);
                                        if (isConnected)
                                        {
                    *// put code here to wait until connection is being establish.İt works Async so it coulnt be connected when we called send method*
                                            break;
                                        }
                                    }
                                    result = connectionManager.SendMessageLarge(phoneNumber, null, Ton.Alphanumeric, Npi.Unknown, submitDataCoding, encodeDataCoding, messageText, out submitSm, out submitSmResp);     
                                }
                            }
                            catch (Exception ex)
                            {
                                result = 0;
                            }
                            return result;
                        }
                        #endregion
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2012-06-12
                      • 1970-01-01
                      • 2014-02-21
                      • 1970-01-01
                      • 1970-01-01
                      • 2023-04-04
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多