电子邮件消息转换成一条或多条 SMS 消息(可能每个收件人的设置不同)后,SMS 消息将被提交到目标 SMSC。提交过程是使用基于 TCP/IP 的 SMPP V3.4 完成的。SMPP 服务器的主机名 (SMPP_SERVER) 将用作与 SMS 通道相关联的正式主机名;要使用的 TCP 端口 (SMPP_PORT) 将通过 port 通道关键字来指定。
当有消息需要处理时,通道就会被启动。该通道将作为发送器绑定至 SMPP 服务器,并递交使用 ESME_ 通道选项(如C.3.3.4 SMPP 选项中所述)指定的证书。表 C–2 列出了 BIND_TRANSMITTER PDU(Protocol Data Unit,协议数据单元)中的字段集,并给出了它们的值:
表 C–2 生成的 BIND_TRANSMITTER PDU 中的字段
字段 |
值 |
---|---|
system_id |
ESME_SYSTEM_ID 通道选项;默认值为空字符串 |
password |
ESME_PASSWORD 通道选项;默认值为空字符串 |
system_type |
ESME_SYSTEM_TYPE 通道选项;默认值为空字符串 |
interface_version |
0x34 表示 SMPP V3.4 |
addr_ton |
ESME_ADDRESS_TON;默认值为表示未知 TON 的 0x00 |
addr_npi |
ESME_ADDRESS_NPI;默认值为表示未知 NPI 的 0x00 |
addr_range |
ESME_IP_ADDRESS 通道选项;默认值为空字符串 |
请注意通道是多线程的。通道可以运行多个出队列线程,具体取决于要发送邮件的数量。(甚至可能会运行多个通道进程。)每个线程执行一次 BIND_TRANSMITTER,然后在该 TCP/IP 连接上发送所有必须发送的 SMS 消息,随后发送 UNBIND,最后关闭连接。系统不会为了将来可能会重新使用某个连接而将其以开放状态闲置一段时间。如果远程 SMPP 服务器发送回一个限制错误,则会发出 UNBIND,而 TCP/IP 连接将被关闭并建立一个新的连接和 BIND。如果远程 SMPP 服务器在完成其 SMS 消息发送之前发送了 UNBIND,也会发生类似情况。
然后,SMS 消息使用 SMPP SUBMIT_SM PDU 进行提交。如果返回一个永久性错误(例如 ESME_RINVDSTADR),则电子邮件消息将会作为不可传送的消息返回。如果返回一个临时性错误,电子邮件消息就会重新入队,以尝试以后传送。要说明的是,对于永久性错误,条件可能永远不存在而重复尝试传送也不会有实际结果,例如无效的 SMS 目标地址。而对于临时性错误,条件在近期可能不存在,如服务器关闭或服务器拥塞的情况。
如果 USE_HEADER_FROM 选项的值为 1,则将为提交的 SMS 消息设置源地址。所使用的值将从始发电子邮件消息中导出,并选定为所有回复最有可能被定向到的(电子邮件)地址。相应地,源地址从以下七种来源(按首选项降序显示)之一中选出:
1. Resent-reply-to: 2. Resent-from: 3. Reply-to: 4. From: 5. Resent-sender: 6. Sender: 7. Envelope From: |
请注意,仅当 USE_HEADER_REPLY_TO 选项的值为 1 时,才考虑 Resent-reply-to: 和 Reply-to: 标题行。而且,仅当 USE_HEADER_RESENT 选项的值为 1 时,才考虑 Resent-reply-to:、Resent-from: 和 Resent-sender: 标题行。(请注意,这就意味着只有这两个选项的值必须都为 1 时,才考虑 Resent-reply-to: 标题行。)这两个选项的默认值均为值 0。因此,默认配置仅考虑第 4、第 6 和第 7 项。最后,由于 SMS 消息中的源地址被限制为 20 个字节,所以如果选定的源地址超过该限制,该地址就会被截断。
表 C–3 列出了 SUBMIT_SM PDU 中的强制性字段集:
表 C–3 生成的 SUBMIT_SM PDU 中的强制性字段
字段 |
值 |
---|---|
service_type |
DEFAULT_SERVICE_TYPE 通道选项;默认值为空字符串。 |
source_addr_ton |
DEFAULT_SOURCE_TON 通道选项;如果 USE_HEADER_FROM=1,则该字段通常被强制赋予表示字母数字 TON 的值 0x05;否则,默认值为表示国际 TON 的 0x01。 |
source_addr_npi |
DEFAULT_SOURCE_NPI 通道选项;默认值为 0x00。 |
source_addr |
DEFAULT_SOURCE_ADDRESS 通道选项(如果 USE_HEADER_FROM=0);否则为表示电子邮件消息创始者的字母数字字符串。 |
dest_addr_ton |
TON 寻址属性或 DEFAULT_DESTINATION_TON 通道选项;默认值为表示国际 TON 的 0x01。 |
dest_addr_npi |
NPI 寻址属性或 DEFAULT_SOURCE_NPI 通道选项;默认值为表示未知 NPI 的 0x00。 |
dest_addr |
从电子邮件信封 To: 地址的本地部分导出的目标 SMS请参见C.2.1 将电子邮件定向到通道。 |
esm_class |
对于单向 SMS,设置为 0x03,表示存储和转发模式、默认的 SMSC 消息类型,且不设置回复路径。对于双向 MSM 消息,则设置为 0x83。 |
protocol_id |
0x00;不适用于 CDMA 和 TDMA;对 GSM 来说,0x00 表示不使用 Internet,但使用 SME 对 SME 协议。 |
priority_flag |
对于 GSM 和 CDMA 为 0x00,对于 TDMA 为 0x01,所有这些都表示一般优先级;请参见 DEFAULT_PRIORITY 通道选项的说明。 |
schedule_delivery_time |
表示立即传送的空字符串。 |
validity_period |
DEFAULT_VALIDITY_PERIOD 通道选项;默认值为空字符串,表示应使用 SMSC 的默认值。 |
registered_delivery |
0x00,表示不使用已注册的传送。 |
replace_if_present_flag |
0x00,表示不应替换以前的任何 SMS 消息。 |
data_coding |
对于 SMSC 的默认字符集为 0x00;对于 UCS2 字符集则为 0x08。 |
sm_default_msg_id |
0x00,表示不使用预定义的消息。 |
sm_length |
SMS 消息的长度和内容;有关详细信息,请参见C.2.2 电子邮件到 SMS 的转换过程。 |
short_message |
SMS 消息的长度和内容;有关详细信息,请参见C.2.2 电子邮件到 SMS 的转换过程。 |
表 C–4 显示了 SUBMIT_SM PDU 中的可选字段:
表 C–4 生成的 SUBMIT_SM PDU 中的可选字段
字段 |
值 |
---|---|
privacy |
请参见 DEFAULT_PRIVACY 通道关键字的说明;除非电子邮件消息包含 Sensitivity: 标题行,否则默认设置为不提供此字段。 |
sar_refnum |
请参见 USE_SAR 通道关键字的说明;默认设置为不提供这些字段。 |
sar_total |
请参见上述的 sar_refnum。 |
sar_seqnum |
请参见上述的 sar_refnum。 |
通道将保持与 SMPP 服务器的联结,直至它再没有要提交的 SMS 消息(消息队列为空)或者已超过 MAX_PAGES_PER_BIND 为止。在后一种情况下,如果仍有需要发送的 SMS 消息,就会建立新的连接并绑定已执行的操作。
请注意,SMS 通道是多线程的。通道中的每个处理线程均保持自身与 SMPP 服务器的 TCP 连接。例如,如果有三个处理线程都有要提交的 SMS 消息,则通道与 SMPP 服务器就有三个开放的 TCP 连接。每个连接均将作为发送器绑定到 SMPP 服务器。而且,任何给定的处理线程一次只能有一个等待提交的 SMS。即,一个给定的线程将提交一条 SMS 消息,然后在提交另一条 SMS 消息之前,先等待提交响应(即 SUBMIT_SM_RESP PDU)。