如何在Perl中使用Net :: SMPP发送短信?

时间:2011-02-06 13:00:32

标签: perl sms smpp

我正在尝试使用Net::SMPP模块发送SMPP消息,但它给出了以下错误:

Message state is 2
Response indicated error: Message ID is invalid (ESME_RINVMSGID=0x0000000C) at send.pl line 28.

#!/usr/bin/perl
#use strict;
#use warnings;
use Net::SMPP;

my $host = 'iphost';
my $port = 2345;
my $smpp = Net::SMPP->new_transmitter(
    $host,
    port      => $port,
    system_id => 'username',
    password  => 'pass',
) or die;

$resp_pdu = $smpp->submit_sm(
    destination_addr => '+44206064379',
    short_message    => 'test message'
) or die;
die "Response indicated error: " . $resp_pdu->explain_status()
if $resp_pdu->status;
$msg_id = $resp_pdu->{message_id};

$resp_pdu = $smpp->query_sm(message_id => $msg_id) or die;
die "Response indicated error: " . $resp_pdu->explain_status()
if $resp_pdu->status;
print "Message state is $resp_pdu->{message_state}\n";

$resp_pdu = $smpp->replace_sm(
    message_id    => $msg_id,
    short_message => 'another test'
) or die;
die "Response indicated error: " . $resp_pdu->explain_status()
if $resp_pdu->status;

$resp_pdu = $smpp->cancel_sm(message_id => $msg_id) or die;
die "Response indicated error: " . $resp_pdu->explain_status()
if $resp_pdu->status;

1 个答案:

答案 0 :(得分:3)

如果您正在尝试发送消息,那么您正在成功。使用submit_sm方法发送消息。

输出的第一行显示query_sm的结果,该结果返回消息的状态。状态2对应于DELIVERED的状态(来自SMPP v3.4规范)。这意味着SMSC已将消息传递给移动设备。

replace_sm方法生成错误。 replace_sm方法将仅替换仍在SMSC上的消息,即仍在等待传递。如果消息已经传递,则SMSC在响应PDU中返回错误。同样的事情适用于cancel_sm方法。它仅适用于仍在等待传递的邮件。