You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Amazon SNS向美国手机号发送SMS?boto3无报错但收不到消息

问题分析与解决方案

可能原因

  • 始发号码属性名错误:你使用的AWS.MM.SMS.OriginationNumber是多媒体消息(MMS)的专属属性,纯SMS场景需要用AWS.SNS.SMS.OriginationNumber,属性名写错导致始发号码未生效。美国手机号对短信发送的合规要求更严格,未正确指定合规始发号码时,消息可能被运营商拦截。
  • 美国号码的A2P合规限制:美国运营商对应用到个人(A2P)的短信有强制合规要求,必须使用完成10DLC注册的号码、短码或免费电话号码发送Transactional类短信,未注册的普通长码无法正常投递到美国手机号。
  • 短信内容格式问题:消息中Your OTP包含多余空格,可能触发运营商的垃圾短信检测机制,导致消息被拦截。

修复步骤

  1. 修正始发号码属性名
    将属性名改为SMS服务的正确标识AWS.SNS.SMS.OriginationNumber,同时优化消息字符串的拼接方式,去掉多余空格:

    sns_client = boto3.client("sns", region_name="us-west-2") 
    try: 
        response_sns = sns_client.publish( 
            PhoneNumber=PhoneNo, 
            Message=f"Hello, {first_name}. Your OTP is {str(OTP)}.",
            MessageAttributes={ 
                "AWS.SNS.SMS.SMSType": { "DataType": "String", "StringValue": "Transactional", }, 
                "AWS.SNS.SMS.OriginationNumber": { "DataType": "String", "StringValue": "+120******", }, 
            }, 
        ) 
        print(response_sns) 
    except Exception as e: 
        print("could not send sms") 
        print(e)
    
  2. 确认始发号码的合规状态

    • 检查你使用的+1开头始发号码是否完成了10DLC品牌和活动注册,这是美国A2P短信投递的必要条件。
    • 登录AWS控制台进入SNS短信控制面板,查看美国(US)区域的短信发送限制提示,确认是否存在合规性拦截。
  3. 验证投递状态
    通过CloudWatch日志或SNS短信报告功能查看美国号码的具体投递状态,若仍失败,根据返回的错误码(如MessageRejected、InvalidParameter)进一步定位问题。

内容的提问来源于stack exchange,提问作者Amit Duwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:00:07