我正在尝试在 Springboot 应用程序中使用 Amazon SNS 发送文本短信。
这是配置类:
@Configuration
@ConfigurationProperties("aws")
public class AwsConfig {
private String accessKeyId;
private String secretAccessKey;
public String getAccessKeyId() {
return accessKeyId;
}
public void setAccessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
}
public String getSecretAccessKey() {
return secretAccessKey;
}
public void setSecretAccessKey(String secretAccessKey) {
this.secretAccessKey = secretAccessKey;
}
public AWSStaticCredentialsProvider awsCredentials() {
BasicAWSCredentials credentials = new BasicAWSCredentials(accessKeyId, secretAccessKey );
return new AWSStaticCredentialsProvider(credentials);
}
@Bean
public AmazonSimpleEmailService getAmazonSimpleEmailService() {
return AmazonSimpleEmailServiceClientBuilder.standard().withCredentials(awsCredentials())
.withRegion("us-east-1").build();
}
@Bean
public AmazonSNS getAmazonSNS() {
return AmazonSNSClientBuilder.standard().withCredentials(awsCredentials())
.withRegion("us-east-1").build();
}
}
这是发送消息的类:
@Service
public class SmsSendingServiceImpl {
@Autowired
private AmazonSNS amazonSNS;
public void sendSMS()
{
Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>();
smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue()
.withStringValue("SENDER")
.withDataType("String"));
smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue()
.withStringValue("Transactional")
.withDataType("String"));
try {
PublishResult result = amazonSNS.publish(new PublishRequest()
.withMessage("This is a test sms.")
.withPhoneNumber("+91-**********").withMessageAttributes(smsAttributes));
System.out.println("Messsage Sent. "+result.getMessageId());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
拨打
sendSMS()
时,我确实在控制台输出中收到 Message Sent.
消息,但所提到的电话号码上没有收到任何短信。
我为此尝试了几个不同的电话号码。他们都没有收到任何消息。
值得一提的是,所有这些数字都是印度的。
有人可以指出这可能是什么原因吗?
这是我指的YouTube 视频。
您面临的问题是印度是一个对使用非数字发件人 ID 发送短信有特殊要求的国家。
基于支持的地区和国家 SNS 文档:
Country or region ISO code Supports sender IDs Supports two-way SMS (Amazon Pinpoint only)
India IN Yes3 Yes
请注意,印度的支持发件人 ID 列标记为 是3。
注释部分指出:
- 发件人必须使用预先注册的字母发件人 ID。需要执行其他注册步骤。 有关详细信息,请参阅向印度收件人发送 SMS 消息的特殊要求。
就您而言,您不能选择使用始发号码,因为印度法律要求使用发件人 ID 。
相反的情况也存在,加拿大、中国、美国等国家要求使用始发号码(阅读:美国产品号码比较不同号码类型您需要购买的号码以及短信费用)计算器)。
来自 AWS:
向以下国家/地区发送短信时,此功能(始发号码)不适用:当地限制、法律或法规要求在发件人号码中使用发件人 ID,例如印度。
因此,您必须遵循向印度收件人发送短信的特殊要求指南。这就是上面的需要额外的注册步骤的意思。
不幸的是,AWS 显然需要遵守当地国家法律,但没有解决方法。
也就是说,“可能”有一些国内服务可以“规避”AWS 的法律限制(因为它们是国内服务/可能与电信公司等有特殊合同)。如果您不想/无法注册发件人 ID,其他服务也可能值得一看。