【发布时间】:2010-03-12 02:29:39
【问题描述】:
我如何直接通过SMPP发送短信?我的供应商提供了一个SMPP接口来发送短信,我怎么把它连接到它?有没有可以教育我使用SMPP发送任何库或例子吗?也许使用PHP?或C#? P>
【问题讨论】:
我如何直接通过SMPP发送短信?我的供应商提供了一个SMPP接口来发送短信,我怎么把它连接到它?有没有可以教育我使用SMPP发送任何库或例子吗?也许使用PHP?或C#? P>
【问题讨论】:
Logica SMPP project 是用 Java 编写的,可以就此事对您进行教育。除此之外,SMPP Wikipedia page 上的项目列表可以满足类似的目的。
【讨论】:
我已经使用 DevShock 的客户端库几年了,但该公司似乎已经从视野中消失了。
不过,Google 很快找到了这个:
http://www.inetlab.ru/Products/ALT.SMS.SmppClient.aspx.
看起来很简单,并附带 C# 和 VB.Net 示例以及一些不错的文档。
希望对您有所帮助。
【讨论】:
我认为最好的选择是 jsmpp lib。它有很好的例子,很多底层的事情发生在幕后,你可以专注于你的业务逻辑。
【讨论】:
我将 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"
【讨论】:
【讨论】:
Devshock 组件很酷……我猜他们在某个时候发布了源代码?
我相信我还有那个。
但是编写自己的 smpp 库并不难...
SMPP 3.4 规范相当简单。
你基本上在做三件事:
Ola,如果你还需要这个,可以给我发邮件。
干杯。
编辑 一些提供商,比如我使用的(高科技信息系统)也为您提供了一个 http 网关,您可以通过它发布您的流量
您可以将其作为 SMPP 的替代方案。
我看到使用 SMPP 的一个缺点是频繁断开连接是因为您的网络连接不稳定。
HTTP 网关选项不会受此影响,而且速度也一样快。
【讨论】:
您可以使用 SMPPCli,它是一个命令行 SMPP SMS 发送器。 可以从http://www.kaplansoft.com/download.html下载
【讨论】:
这是在 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
}
【讨论】: