短信发送
更新时间:2026-10-09 14:28:59
接入准备
| 准备事项 | 说明 |
|---|---|
| 完成企业认证和实名认证 | |
| 获取 API 账号和密码 | 调用短信接口所需的账号和密码,登录控制台获取,登录账号为注册开户的手机号。
主账号获取示例 ![]() 子账号获取示例 ![]() |
| 配置 IP 白名单 | 登录控制台,在对应 API 账号下添加服务器出口 IP 白名单,否则接口将拦截本次请求。
IP 白名单配置示例 ![]() |
| 获取模板 ID | 模板审核通过后方可使用,可登录控制台获取,也可通过 模板管理 接口获取。
模板查看示例 ![]() |
| 获取短信签名 | 签名审核通过后方可使用,可登录控制台获取,也可通过 签名管理 接口获取。
签名查看示例 ![]() |
发送规范
短信格式
正文可包含链接、地址,并支持换行。营销短信退订语当前仅支持“拒收请回复R”(不支持小写 r),且必须位于整条短信内容的最末尾;该规则后续可能随工信部政策调整。
| 短信类型 | 短信模板示例 | 短信格式 | 短信内容示例 |
|---|---|---|---|
| 验证码账号 | 您正在申请手机注册,验证码为:{s},5分钟内有效! | 【短信签名】+ 正文(仅包含验证类文案) | 【创蓝云智】您正在申请手机注册,验证码为:123456,5分钟内有效! |
| 通知短信账号 | 尊敬的客户,您购买的会员卡已于{s}正式到期。如您要继续使用,请于{s}前及时续费或重新购买。 | 【短信签名】+ 正文(非推广类通知文案,例如物流通知) | 【创蓝云智】尊敬的客户,您购买的会员卡已于11月29日正式到期。如您要继续使用,请于11月29日前及时续费或重新购买。 |
| 会员营销账号 | 双十一重磅来袭,晚20点满600送{s}!详见www.chuanglan.com{s}拒收请回复R | 【短信签名】+ 推广类正文(营销专用账号)+ 退订语 | 【创蓝云智】双十一重磅来袭,晚20点满600送600!详见www.chuanglan.com/dsdf5162拒收请回复R |
发送时间限制
- 验证码(YZM 开头)、通知(N 开头)、会员营销(M 开头)三类账号默认无发送时间限制;但 M 账号在 22:00 之后发送成功率会明显下降,并可能被拦截,如有疑问请联系商务经理。
- 特殊类型账号默认发送时段为 08:00–20:00,不在该时段内提交的请求将被接口拦截并返回报错;如需调整发送时段,请联系商务经理。
模板 ID 发送接口
注意事项
- 如需状态回执,请传入
"report"="true",否则无法获取状态回执。 - 调用接口返回错误时,请根据响应码提示检查请求参数及其取值是否正确,详见文末提交响应码说明。
- 更多发送问题,请查阅短信发送 FAQ。
- 如需了解计费规则,请查阅计费说明。
- 账户提供默认余额提醒,详情请查阅余额提醒文档。
请求地址
- 请求方式:POST
- Content-Type:application/json
- 编码格式:UTF-8
- 接口地址:
https://smssh.253.com/msg/sms/v2/tpl/send
加密算法
md5Password= API 密码的 MD5 值(32 位小写),即md5(password)。- 使用平台密钥
md5Password,与请求参数中的timestamp、nonce进行 HmacSHA256Hex 签名,生成makeSignature,并通过请求头传递。
// 第三方工具类,需引入以下Maven依赖 import com.alibaba.fastjson.JSONObject; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.HmacUtils; public String makeSignature(String md5Password, String timestamp, String nonce) { String str = generateStr(md5Password, timestamp, nonce); return HmacUtils.hmacSha256Hex(md5Password, str.replaceAll("\\s+", "")); } /** * 签名待处理的字符串拼接 */ public static String generateStr(String md5Password, String timestamp, String nonce){ String[] array = new String[] { md5Password, timestamp, nonce}; StringBuffer sb = new StringBuffer(); // 字符串排序 Arrays.sort(array); for (int i = 0; i < 3; i++) { sb.append(array[i]); } return sb.toString(); }
请求头参数
| 参数名称 | 类型 | 是否必传 | 描述 | 示例 |
|---|---|---|---|---|
| X-QA-Hmac-Signature | String | 条件必传 | 加密鉴权签名
md5Password、timestamp、nonce 按字典序排序后拼接(见上方算法)。 | "a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90" |
请求体参数
| 参数名称 | 类型 | 是否必传 | 描述 | 示例 |
|---|---|---|---|---|
| account | String | 是 | API 账号,登录控制台获取,获取方式请查阅操作指引。 | "account":"N6000001" |
| password | String | 条件必传 | API 密码,与 X-QA-Hmac-Signature 二选一;未使用加密鉴权时必传。登录控制台获取,获取方式请查阅操作指引。 | "password":"123456" |
| nonce | String | 是 | 32 位随机字符串,自定义生成,用于签名校验、防止重放。 | "nonce":"2e6eceb5737b473284c930c8ef79090e" |
| timestamp | String | 是 | 秒级时间戳,10 位;有效期1分钟。 | "timestamp":"1631865523" |
| phoneNumbers | String | 是 | 短信接收手机号
| "phoneNumbers":"15800000000,15300000000" |
| templateParamJson | String | 条件必传 | 变量参数值,JSON 数组的字符串形式(需转义),使用变量模板时必传。
| "templateParamJson":"[{\"param1\":\"张三\",\"param2\":\"13\"},{\"param1\":\"李四\",\"param2\":\"88\"}]" |
| templateId | String | 是 | 模板 ID
| "templateId":"1111111" |
| signature | String | 条件必传 | 短信签名:若报备模板未关联签名则必传,需通过该参数携带签名;若模板报备时已关联签名,则无需传递。 | "signature":"【创蓝云智】" |
| report | String | 否 | 状态回执开关,传 "true" 开启,不传默认为 "false";不开启则无法获取状态回执。回执是判断短信是否成功送达的重要依据,详见状态回执文档。 | "report":"true" |
| callbackUrl | String | 否 | 状态回执回调地址,须为以 http:// 或 https:// 开头的完整地址,不可包含空格,否则会导致推送失败;可通过本参数传入,也可在控制台配置,详见控制台操作指引。 | "callbackUrl":"https://your-domain.com/callback" |
| uid | String | 否 | 自定义参数,如订单号或发送流水号,状态回执会原样回传,最大支持 256 个字符。 | "uid":"321abc" |
| extend | String | 否 | 下发短信号码扩展码,用于匹配上行回复,上行报告会回传;须为不超过 5 位的数字,不传默认为空。 | "extend":"555" |
请求示例
请求头(Request Header): X-QA-Hmac-Signature: a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90 Content-Type: application/json 请求体(Body,使用加密鉴权,故不传 password): { "account": "N6000001", "timestamp": "1752143733", "nonce": "x4zfk0y5foqwx6cbnw3bfmimy98abqs1", "phoneNumbers": "17601337176,15100159057", "templateId": "1021143438", "templateParamJson": "[{\"param1\":\"张三\",\"param2\":\"13\"},{\"param1\":\"李四\",\"param2\":\"88\"}]", "signature": "【创蓝云智】", "report": "true", "callbackUrl": "https://your-domain.com/callback", "uid": "test_001", "extend": "01" }
响应体参数
| 参数名称 | 类型 | 描述 | 示例 |
|---|---|---|---|
| code | String | 提交响应码,返回 "000000" 表示提交成功,其他值表示失败(详见文末提交响应码说明) | "code":"000000" |
| msgId | String | 消息 ID,32 位纯数字字符串。 | "msgId":"25071516453300902203000007708373" |
| time | String | 响应时间,格式为 yyyyMMddHHmmss。 | "time":"20251204162433" |
| successNum | String | 提交成功数量,参数校验失败时不返回。 | "successNum":"1" |
| failNum | String | 提交失败数量,参数校验失败时不返回。 | "failNum":"0" |
| errorMsg | String | 提交响应码中文说明,提交成功时返回空字符串。 | "errorMsg":"" |
响应示例
{ "code": "000000", "failNum": "0", "successNum": "2", "msgId": "25071018345400902898000000000001", "time": "20250710183454", "errorMsg": "" }
多语言调用示例
Java
package send; import com.alibaba.fastjson.JSONObject; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.HmacUtils; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.*; public class SmsClient { // 账号信息(建议后续通过配置或环境变量注入) private static final String ACCOUNT = "M122343"; private static final String PASSWORD = "******"; private static final String SEND_URL = "https://smssh.253.com/msg/sms/v2/tpl/send"; public static void main(String[] args) { try { String timestamp = String.valueOf(System.currentTimeMillis() / 1000); String nonce = UUID.randomUUID().toString().replace("-", ""); // 构建模板参数 List<Map<String, String>> templateParams = assembleTemplateParams(); String templateParamJson = JSONObject.toJSONString(templateParams); // 构建请求参数 Map<String, Object> requestMap = new HashMap<>(); requestMap.put("account", ACCOUNT); requestMap.put("timestamp", timestamp); requestMap.put("nonce", nonce); requestMap.put("phoneNumbers", "15200000000,15100000000"); requestMap.put("templateId", "1021143438"); requestMap.put("templateParamJson", templateParamJson); requestMap.put("signature", "【222】"); requestMap.put("report", "true"); requestMap.put("callbackUrl", ""); requestMap.put("uid", "test_001"); requestMap.put("extend", "01"); String jsonBody = JSONObject.toJSONString(requestMap); // 生成签名 String md5Password = DigestUtils.md5Hex(PASSWORD); String signature = makeSignature(md5Password, timestamp, nonce); // 发送请求 String response = sendSmsByPost(SEND_URL, jsonBody, signature); System.out.println("响应结果:" + response); } catch (Exception e) { e.printStackTrace(); } } private static List<Map<String, String>> assembleTemplateParams() { List<Map<String, String>> list = new ArrayList<>(); Map<String, String> map1 = new HashMap<>(); map1.put("param1", "张1"); map1.put("param2", "张2"); Map<String, String> map2 = new HashMap<>(); map2.put("param1", "李1"); map2.put("param2", "李2"); list.add(map1); list.add(map2); return list; } public static String sendSmsByPost(String path, String postContent, String xQAHmacSignature) throws IOException { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setConnectTimeout(10000); conn.setReadTimeout(10000); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); conn.setRequestProperty("X-QA-Hmac-Signature", xQAHmacSignature); try (OutputStream os = conn.getOutputStream()) { os.write(postContent.getBytes(StandardCharsets.UTF_8)); os.flush(); } int code = conn.getResponseCode(); if (code != HttpURLConnection.HTTP_OK) { throw new IOException("HTTP 请求失败,状态码:" + code); } try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } return sb.toString(); } } public static String makeSignature(String md5Password, String timestamp, String nonce) { String str = generateStr(md5Password, timestamp, nonce); return HmacUtils.hmacSha256Hex(md5Password, str.replaceAll("\\s+", "")); } private static String generateStr(String md5Password, String timestamp, String nonce) { String[] array = new String[]{md5Password, timestamp, nonce}; Arrays.sort(array); StringBuilder sb = new StringBuilder(); for (String s : array) { sb.append(s); } return sb.toString(); } }
Python
import hashlib import hmac import json import time import uuid import requests # 账号信息(建议后续通过配置或环境变量注入) ACCOUNT = "M122343" PASSWORD = "******" SEND_URL = "https://smssh.253.com/msg/sms/v2/tpl/send" def assemble_template_params(): """ 构建模板参数 """ list_data = [] map1 = {"param1": "张1", "param2": "张2"} map2 = {"param1": "李1", "param2": "李2"} list_data.append(map1) list_data.append(map2) return list_data def make_signature(md5_password, timestamp, nonce): """ 生成签名 """ str_data = generate_str(md5_password, timestamp, nonce) signature = hmac.new(md5_password.encode('utf-8'), str_data.encode('utf-8'), hashlib.sha256).hexdigest() return signature def generate_str(md5_password, timestamp, nonce): """ 拼接签名字符串 """ array = [md5_password, timestamp, nonce] array.sort() return ''.join(array) def send_sms_by_post(path, post_content, x_qa_hmac_signature): """ 发送 HTTP POST 请求 """ headers = { "Content-Type": "application/json; charset=UTF-8", "X-QA-Hmac-Signature": x_qa_hmac_signature } response = requests.post(path, data=post_content.encode('utf-8'), headers=headers) if response.status_code != 200: raise Exception(f"HTTP 请求失败,状态码:{response.status_code}") return response.text def main(): try: timestamp = str(int(time.time())) nonce = str(uuid.uuid4()).replace("-", "") # 构建模板参数 template_params = assemble_template_params() template_param_json = json.dumps(template_params, ensure_ascii=False) # 构建请求参数 request_map = { "account": ACCOUNT, "timestamp": timestamp, "nonce": nonce, "phoneNumbers": "15200000000,15100000000", "templateId": "1021143438", "templateParamJson": template_param_json, "signature": "【222】", "report": "true", "callbackUrl": "", "uid": "test_001", "extend": "01" } json_body = json.dumps(request_map, ensure_ascii=False) # 生成签名 md5_password = hashlib.md5(PASSWORD.encode('utf-8')).hexdigest() signature = make_signature(md5_password, timestamp, nonce) # 发送请求 response = send_sms_by_post(SEND_URL, json_body, signature) print("响应结果:" + response) except Exception as e: print(e) if __name__ == "__main__": main()
PHP
<?php // 账号信息(建议后续通过配置或环境变量注入) const ACCOUNT = 'M122343'; const PASSWORD = '******'; const SEND_URL = 'https://smssh.253.com/msg/sms/v2/tpl/send'; try { $timestamp = (string) time(); $nonce = generateNonce(); // 构建模板参数 $templateParams = assembleTemplateParams(); $templateParamJson = json_encode($templateParams, JSON_UNESCAPED_UNICODE); // 构建请求参数 $requestMap = [ 'account' => ACCOUNT, 'timestamp' => $timestamp, 'nonce' => $nonce, 'phoneNumbers' => '15200000000,15100000000', 'templateId' => '1021143438', 'templateParamJson' => $templateParamJson, 'signature' => '【222】', 'report' => 'true', 'callbackUrl' => '', 'uid' => 'test_001', 'extend' => '01', ]; $jsonBody = json_encode($requestMap, JSON_UNESCAPED_UNICODE); // 生成签名 $md5Password = md5(PASSWORD); $signature = makeSignature($md5Password, $timestamp, $nonce); // 发送请求 $response = sendSmsByPost(SEND_URL, $jsonBody, $signature); echo "响应结果:{$response}\n"; } catch (Exception $e) { echo $e->getMessage() . "\n"; } function assembleTemplateParams(): array { return [ ['param1' => '张1', 'param2' => '张2'], ['param1' => '李1', 'param2' => '李2'], ]; } function sendSmsByPost(string $path, string $postContent, string $xQAHmacSignature): string { $ch = curl_init($path); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postContent, CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 10, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json; charset=UTF-8', 'X-QA-Hmac-Signature: ' . $xQAHmacSignature, ], ]); $response = curl_exec($ch); if ($response === false) { $err = curl_error($ch); curl_close($ch); throw new Exception("cURL 请求失败:{$err}"); } $httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode !== 200) { throw new Exception("HTTP 请求失败,状态码:{$httpCode}"); } return (string) $response; } function makeSignature(string $md5Password, string $timestamp, string $nonce): string { $str = generateStr($md5Password, $timestamp, $nonce); return hash_hmac('sha256', preg_replace('/\s+/', '', $str), $md5Password); } function generateStr(string $md5Password, string $timestamp, string $nonce): string { $array = [$md5Password, $timestamp, $nonce]; sort($array, SORT_STRING); return implode('', $array); } function generateNonce(): string { return bin2hex(random_bytes(16)); }
C#
using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Security.Cryptography; using System.Text; using System.Web.Script.Serialization; namespace SmsClientDemo { class Program { // 账号信息(建议后续通过配置或环境变量注入) private const string ACCOUNT = "M122343"; private const string PASSWORD = "******"; private const string SEND_URL = "https://smssh.253.com/msg/sms/v2/tpl/send"; static void Main(string[] args) { try { string timestamp = ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds().ToString(); string nonce = Guid.NewGuid().ToString("N"); // 构建模板参数 var templateParams = AssembleTemplateParams(); var jss = new JavaScriptSerializer(); string templateParamJson = jss.Serialize(templateParams); // 构建请求参数 var requestMap = new Dictionary<string, object> { { "account", ACCOUNT }, { "timestamp", timestamp }, { "nonce", nonce }, { "phoneNumbers", "15200000000,15100000000" }, { "templateId", "1021143438" }, { "templateParamJson", templateParamJson }, { "signature", "【222】" }, { "report", true }, { "callbackUrl", "" }, { "uid", "test_001" }, { "extend", "01" } }; string jsonBody = jss.Serialize(requestMap); // 生成签名 string md5Password = ComputeMD5(PASSWORD); string signature = MakeSignature(md5Password, timestamp, nonce); // 发送请求 string response = SendSmsByPost(SEND_URL, jsonBody, signature); Console.WriteLine("响应结果:" + response); } catch (Exception e) { Console.WriteLine(e.StackTrace); } } private static List<Dictionary<string, string>> AssembleTemplateParams() { var list = new List<Dictionary<string, string>>(); var map1 = new Dictionary<string, string> { { "param1", "张1" }, { "param2", "张2" } }; var map2 = new Dictionary<string, string> { { "param1", "李1" }, { "param2", "李2" } }; list.Add(map1); list.Add(map2); return list; } private static string ComputeMD5(string input) { using (var md5 = MD5.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); foreach (byte b in hashBytes) { sb.Append(b.ToString("x2")); } return sb.ToString(); } } private static string MakeSignature(string md5Password, string timestamp, string nonce) { string str = GenerateStr(md5Password, timestamp, nonce); return ComputeHmacSha256Hash(str, md5Password); } private static string GenerateStr(string md5Password, string timestamp, string nonce) { string[] array = { md5Password, timestamp, nonce }; Array.Sort(array); return string.Concat(array); } private static string ComputeHmacSha256Hash(string input, string key) { using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key))) { byte[] hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(input)); StringBuilder sb = new StringBuilder(); foreach (byte b in hashBytes) { sb.Append(b.ToString("x2")); } return sb.ToString(); } } private static string SendSmsByPost(string path, string postContent, string xQAHmacSignature) { var request = (HttpWebRequest)WebRequest.Create(path); request.Method = "POST"; request.ContentType = "application/json; charset=UTF-8"; request.Headers.Add("X-QA-Hmac-Signature", xQAHmacSignature); request.Timeout = 10000; request.ReadWriteTimeout = 10000; byte[] byteArray = Encoding.UTF8.GetBytes(postContent); request.ContentLength = byteArray.Length; using (Stream dataStream = request.GetRequestStream()) { dataStream.Write(byteArray, 0, byteArray.Length); } using (var response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode != HttpStatusCode.OK) { throw new Exception($"HTTP 请求失败,状态码:{(int)response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd(); } } } } }
提交响应码说明
| 状态码 | 描述 | 问题处理人 |
|---|---|---|
| 000000 | 提交成功 | 无 |
| 101 | 无此用户(account参数要传API账号不是登录后台的账号,如N111111;或API账号关停了需要联系官网客服解禁) | 技术支持 |
| 102 | 密码错(请确认密码是否一致正确,请直接复制避免手动输入错误) | 技术支持 |
| 103 | 提交过快(提交速度超过流速限制) | 技术支持 |
| 104 | 系统忙(因平台侧原因,暂时无法处理提交的短信) | 技术支持 |
| 105 | 敏感短信(短信内容包含敏感词) | 客服 |
| 106 | 消息长度错(>1036 或<=0) | 技术支持 |
| 107 | 包含错误的手机号码 | 技术支持 |
| 108 | 手机号码个数错(手机号包含了中文符号;手机号个数错了,群发>1000 或<=0) | 技术支持 |
| 109 | 无发送额度(当前使用的API账号下没有发送额度) | 商务 |
| 110 | 不在发送时间内(联系客服或商务解决) | 商务 |
| 111 | 超出该账户当月发送额度限制(联系客服或商务解决) | 商务 |
| 112 | 产品错误(通道出现异常,联系商务解决) | 商务 |
| 113 | 扩展码格式错(非数字或者长度不对) | 技术支持 |
| 114 | 可用参数组个数错误(msg参数的变量符号固定使用"{$var}";变量符号在20个以内) | 技术支持 |
| 116 | 签名不合法或未带签名(短信签名需要报备通过后才能使用;重保签名不可用) | 客服 |
| 117 | 客户端IP错误(登录控制台在对应使用的API账号下加白ip) | 客服 |
| 118 | 用户没有相应的发送权限(账号被禁止发送,联系客服或商务解禁) | 客服 |
| 119 | 用户已过期 | 客服 |
| 120 | 违反防盗用策略(日发送限制,联系客服或商务解决) | 客服 |
| 123 | 发送类型错误(cmpp协议的账户不能使用https协议方式,请联系我方技术修改) | 技术支持 |
| 124 | 白模板匹配错误(接口传递的内容与报备的模板内容要完全一致,包括标点符号) | 客服 |
| 125 | 匹配驳回模板,提交失败(联系客服或商务解决) | 客服 |
| 127 | 定时发送时间格式错误(格式为 yyyyMMddHHmm) | 技术支持 |
| 128 | 内容编码失败 | 技术支持 |
| 129 | JSON 格式错误(header请求头是否生效:Content-Type:application/json;请求参数不是json格式) | 技术支持 |
| 130 | 请求参数错误(缺少必填参数;参数跟接口地址不匹配,例如变量参数请求普通短信接口地址) | 技术支持 |
| 132 | 消息长度错(>3500或<=0),超过短信最大支持字数 | 技术支持 |
| 133 | 单一手机号错误 | 技术支持 |
| 134 | 违反防盗策略, 超过月发送限制(联系客服或商务解决) | 技术支持 |
| 135 | 超过同一手机号相同内容发送限制 | 技术支持 |
| 136 | 不可批量提交"验证码"短信 | 技术支持 |
| 139 | 超出安全发送时间(时间戳过期,时间戳时间跟请求接口的时间差异控制在30s以内) | 技术支持 |
| 140 | 短信内容解密错误(秘钥没有使用正确) | 技术支持 |
| 144 | 产品未上线限制日发送数量(签名报备选择的未上线会日限100条,联系客服调整) | 客服 |
| 145 | 验签失败(验签不过,请参考对应接口的DEMO加签代码示例) | 技术支持 |
| 152 | MATERIAL_EXIST_ERROR (模板不存在) | 客服 |
| 153 | MESSAGE_LY_ERROR 消息长度错(>2000或者≤0) | 技术支持 |
| 154 | 长短信拼接错误 | 技术支持 |
| 155 | AIM_SEND_FAIL 转发失败 | 技术支持 |
| 158 | 退订语不符合规范,退订语现在只支持"拒收请回复R"。 | 技术支持 |
| 159 | 触发反轰炸策略 | 技术支持 |
这篇文档对您有帮助吗?









