站点可能想要将有效性检查和转换应用于收件人电子邮件地址(如C.2.1 将电子邮件定向到通道中所述)中已编码的 SMS 目标地址。
去除非数字字符(例如,将 800.555.1212 转换成 8005551212)
添加前缀(例如,将 8005551212 转换成 +18005551212)
验证正确性(例如,123 为太短)
前两项任务可专门使用 DESTINATION_ADDRESS_NUMERIC 和 DESTINATION_ADDRESS_PREFIX 通道选项来完成。一般情况下,所有这三项任务和其他任务都可使用映射表实现:使用重写规则中的映射表调用,或者使用 FORWARD 映射表。使用重写规则中的映射表调用具有很强的灵活性,包括能够拒绝带有站点定义的错误响应的地址。本节其余部分将只集中介绍这种方法 - 使用重写规则中的映射表调用的方法。
假设目标地址必须仅为数字格式,长度为 10 或 11 位且以字符串 "+1" 为前缀。则其可使用以下重写规则实现
sms.siroe.com ${X-REWRITE-SMS-ADDRESS,$U}@sms.siroe.com sms.siroe.com $?Invalid SMS address
上述第一条重写规则将调用名为 X-REWRITE-SMS-ADDRESS 的站点定义的映射表。该映射表传递电子邮件地址的本地部分,以便进行检查。如果映射进程确定本地部分可接受,则该地址将被接收并重写到 SMS 通道中。如果映射进程不接受本地部分,将应用下一条重写规则。由于是一条 $? 重写规则,所以该地址将被拒绝,并发送错误文本“无效的 SMS 地址”。
X-REWRITE-SMS-ADDRESS 映射表如下所示:它以属性-值对列表格式或仅按原始 SMS 目标地址执行必要的本地部分验证步骤。
X-VALIDATE-SMS-ADDRESS ! Iteratively strip any non-numeric characters $_*$[$ -/:-~]%* $0$2$R ! Accept the address if it is of the form 1nnnnnnnnnn or nnnnnnnnnn ! In accepting it, ensure that we output +1nnnnnnnnnn 1%%%%%%%%%% +1$0$1$2$3$4$5$6$7$8$9$Y %%%%%%%%%% +1$0$1$2$3$4$5$6$7$8$9$Y ! We didn’t accept it and consequently it’s invalid * $N X-REWRITE-SMS-ADDRESS */id=$_*/* $C$0/id=$|X-VALIDATE-SMS-ADDRESS;$1|/$2$Y$E */id=$_*/* $N * $C$|X-VALIDATE-SMS-ADDRESS;$0|$Y$E * $N
如果使用上述设置,请确保 DESTINATION_ADDRESS_NUMERIC 选项的值为 0(默认值)。否则,"+" 将从 SMS 目标地址中删除。