一、环境配置与准备

  1. 腾讯云账号设置

    • 在腾讯云控制台创建短信应用,获取 SdkAppIdSecretIdSecretKey

    • 申请‌国内短信签名‌(如企业名称或品牌标识)和‌自定义短信模板‌,需通过审核后方可使用

  2. 项目依赖

    • 安装官方SDK(NuGet命令):

       Install-Package TencentCloud.Sms -Version 3.0.0

二、自定义短信发送实现

核心代码示例
using TencentCloud.Common;
using TencentCloud.Common.Profile;
using TencentCloud.Sms.V20210111;
using TencentCloud.Sms.V20210111.Models;
​
public class CustomSmsSender
{
    private readonly string _secretId;
    private readonly string _secretKey;
    private readonly string _sdkAppId;
    private readonly string _signature;
​
    public CustomSmsSender(string secretId, string secretKey, string sdkAppId, string signature)
    {
        _secretId = secretId;
        _secretKey = secretKey;
        _sdkAppId = sdkAppId;
        _signature = signature;
    }
​
    public async Task<bool> SendCustomSmsAsync(string phoneNumber, string templateId, params string[] templateParams)
    {
        var cred = new Credential { SecretId = _secretId, SecretKey = _secretKey };
        var clientProfile = new ClientProfile();
        clientProfile.HttpProfile.Endpoint = "sms.tencentcloudapi.com";
​
        using var client = new SmsClient(cred, "ap-guangzhou", clientProfile);
        var request = new SendSmsRequest
        {
            PhoneNumberSet = new[] { $"+86{phoneNumber}" }, // 国内号码示例
            SmsSdkAppId = _sdkAppId,
            SignName = _signature,
            TemplateId = templateId,
            TemplateParamSet = templateParams // 模板变量按序传入
        };
​
        try
        {
            var response = await client.SendSms(request);
            var status = response.SendStatusSet.FirstOrDefault();
            return status?.Code == "Ok";
        }
        catch (Exception ex)
        {
            throw new SmsException($"短信发送失败:{ex.Message}");
        }
    }
}

三、关键配置说明

参数 说明 注意点
PhoneNumberSet 使用国际标准格式(如+8618012345678),避免缺少国家码导致发送失败 需验证手机号有效性
TemplateParamSet 动态参数数组,需与模板中定义的{1}{2}等占位符顺序匹配 参数类型需符合模板要求
Region 地域编码需与短信应用创建时选择的地域一致(如ap-guangzhou代表广州) 错误配置会导致API调用失败
SignName 签名内容需与审核通过的文本完全一致(如【腾讯云】 包含括号时需完整保留

四、典型问题处理

  1. 模板参数不匹配

    • 检查模板中变量数量是否与代码传入的参数数组长度一致

    • 验证参数类型(例如验证码应为纯数字,时间字段应为"5分钟"格式)

  2. 发送频率限制

    • 腾讯云默认限制同一手机号30秒内不可重复接收相同内容短信,可通过控制台调整频率策略

  3. 签名未生效

    • 确保签名已通过审核且状态为“已通过”,海外短信需单独申请对应地域的签名


五、服务调用示例

// 初始化服务(建议通过DI容器注入配置)
var smsSender = new CustomSmsSender(
    secretId: "xxxx",
    secretKey: "xxxx",
    sdkAppId: "xxxx",
    signature: "腾讯云"
);
​
// 发送自定义模板短信(模板ID需已审核)
var success = await smsSender.SendCustomSmsAsync(
    phoneNumber: "xxxxxxxxxxxx",
    templateId: "12345", // 自定义模板ID
    templateParams: new[] { "A1234", "2025-05-13" } // 替换模板中的占位符
);

注:若需发送海外短信,需单独申请国际/港澳台短信签名和模板,并调整PhoneNumberSet中的国家码。

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐