5

如何通过 SMPP 直接发送 SMS?我的提供商提供了一个 SMPP 接口来发送 SMS,我如何将其连接到它?有没有可以教我使用 SMPP 发送的库或示例?也许使用 PHP?还是 C#?

4

9 回答 9

4

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

于 2010-03-12T02:42:05.907 回答
2

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

一个快速的谷歌虽然出现了这个:

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

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

希望有帮助。

于 2010-03-14T02:45:33.430 回答
2

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

jsmpp主页

于 2012-10-22T17:17:07.877 回答
2

我将 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"
于 2015-03-11T21:58:58.603 回答
1

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

于 2015-11-13T17:47:49.130 回答
0

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

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

我知道OpenMarket使用多种 SDK 语言执行 SMPP 和 HTTP

于 2010-03-25T13:58:02.650 回答
0

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

我相信我还有那个。

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

SMPP 3.4 规范相当简单。

你基本上在做三件事:

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

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

干杯。

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

您可以寻求它作为 SMPP 的替代方案。

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

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

于 2014-04-12T13:24:35.537 回答
0

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

于 2015-04-02T14:11:34.503 回答
0

这是在 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
}
于 2017-09-11T11:50:47.700 回答