我已经被困了大约6个小时,在这一点上,我认为唯一合理的解释是,这是一个AWS错误,或错误消息是错误的。
我在一个JAVA SpringBoot应用程序中使用AWS中的SESv2类,并试图管理我的SES (简单电子邮件服务)帐户的各种细节。
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sesv2.SesV2Client;
import software.amazon.awssdk.services.sesv2.model.*;
我已经创建了一个IAM用户,创建了安全凭据,并使用多个不同的方法设置了它们,如这里所描述的,我已经为这个IAM角色用户提供了对SES的完全访问。然后,我编写了一些代码,并能够完成以下所有操作,
但是,由于一些未知的原因,当我去测试一个函数时,我编写了一个联系人列表,这样我就可以测试向多个联系人发送电子邮件时,我会得到以下403条错误消息,
我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。
我已经证实证件是正确的。我创建了一组新的凭据,并使旧的集合无效。没有骰子,上面列出的所有函数仍然可以工作,但是listContacts
类中的SesV2Client
仍然失败,但同样的错误。正如您在下面看到的,我甚至绕过env变量,硬编码键和秘密来提取所有的止损,仍然失败。在失败的函数中,我反复检查了传入的值,它们是有效的,并且是100%存在的,因为正如我所说的,我可以在上面的列表中进行其他调用来验证主题和联系人列表的存在。
private List<Contact> listContactsForSiteUpdatesMailingList() {
try (SesV2Client client = SesV2Client.builder()
.region(Region.US_EAST_1)
.credentialsProvider(StaticCredentialsProvider.create(awsCreds))
.build()){
TopicFilter topicFilter = TopicFilter.builder().topicName(TOPIC_SITE_UPDATES).useDefaultIfPreferenceUnavailable(true).build();
ListContactsFilter listContactsFilter = ListContactsFilter.builder().topicFilter(topicFilter).filteredStatus(SubscriptionStatus.OPT_IN).build();
ListContactsRequest listContactsRequest = ListContactsRequest.builder()
.contactListName(CONTACT_LIST).filter(listContactsFilter).build();
ListContactsResponse listContactsResponse = client.listContacts(listContactsRequest);
return listContactsResponse.contacts();
} catch (Exception ex) {
System.out.println("The email was not sent. Error message: "
+ ex.getMessage());
return null;
}
}
这里发生了什么,我如何才能找到这个错误的根源?
编辑:查看AWS控制台Users>Access管理,然后查看创建的用户,我甚至可以验证是否存在“编程访问”
一个无问题访问ContactList的示例
编辑2:我的SES帐户目前是沙箱。我只想提个问题,这可能是因为这个原因吗?在这里抓吸管。
https://stackoverflow.com/questions/73059306
复制相似问题