Inetlab SMPP库错误码1375含义咨询及批量短信异常排查
排查Inetlab.SMPP批量发送短信时错误码1375的问题
我基于.NET平台的Inetlab.SMPP库开发了批量短信发送功能,当发送70万条量级的短信时,大部分发送成功,但有部分短信返回错误码1375,多方查询该错误码的官方定义未果,请求协助排查问题。
相关代码片段
List<string> numbers = transactions.Select(x => x.MSISDN).ToList(); var bulkList = SMS.ForSubmitMulti() .From(_config[$"Smpp:{sender}"]) .Coding(DataCodings.UCS2) .Text(msg.SmsContent); foreach (var transaction in transactions) { bulkList.To(transaction.MSISDN); } bulkList.Create(_client); var submitResponses = await _client.SubmitAsync(bulkList); if (submitResponses.Any(x => x.Header.Status == CommandStatus.ESME_ROK || (int)x.Header.Status == Static_SMS_Success)) { success++; } else { fail++; Log.ForContext("Type", "SMSResponses").Error($"Content: Fail at {submitResponses[0]}, Response: {submitResponses[0].Header.ToString()}, MessageId: {submitResponses[0].MessageId}"); } await _client.DisconnectAsync();
我预期所有批量短信均可成功发送,但出现上述异常情况。
排查建议
- 优先确认错误码来源:SMPP标准协议中没有1375这个官方错误码,这基本是运营商/对接的短信网关自定义的错误码。直接联系网关提供商或运营商对接人员,询问该错误码的具体触发条件(比如号码有效性、发送频率限制、内容合规性、资源配额等)。
- 分析异常号码特征:统计返回1375错误的所有号码,排查是否存在规律——比如集中在特定号段、境外号码、空号/停机号,或者号码格式不符合网关要求(比如缺少国家码、包含非数字字符)。
- 拆分批量提交任务:一次性提交70万条到
SubmitMulti可能超出网关的单次请求负载上限。尝试拆分批次,比如每次提交1000-5000条,降低单批次数据量,避免网关因过载返回自定义错误。 - 优化连接复用逻辑:当前代码每次提交后立即调用
DisconnectAsync(),高频的连接断开重连可能触发网关的异常管控逻辑。建议保持SMPP长连接,复用连接发送多批次短信,不要每次批量提交后就断开。 - 完善日志记录:当前日志仅打印第一个错误响应,但
SubmitMulti的每个号码对应独立的响应结果。修改日志逻辑,遍历所有响应,记录每个错误号码的状态码和信息,便于精准定位:
foreach (var resp in submitResponses) { if (resp.Header.Status != CommandStatus.ESME_ROK && (int)resp.Header.Status != Static_SMS_Success) { fail++; Log.ForContext("Type", "SMSResponses").Error($"Failed number: {resp.Destination}, Status code: {(int)resp.Header.Status}, Response: {resp.Header.ToString()}, MessageId: {resp.MessageId}"); } else { success++; } }
- 检查内容与编码:确认返回错误的短信内容是否包含特殊字符(如emoji、罕见符号),虽然设置了UCS2编码,但部分网关可能对特定字符有额外拦截规则,导致部分内容发送失败。
内容的提问来源于stack exchange,提问作者Nahla Abubaker
相关产品推荐
相关产品推荐

