使用AWS SDK发邮件遇无效安全令牌:仅用AccessKey和SecretKey可行吗?
问题解答
仅使用长期的AccessKey和SecretKey是可以发送AWS SES邮件的,不需要额外生成临时安全令牌。你遇到的The security token included in the request is invalid.错误,通常不是因为缺少令牌,而是以下几个常见原因导致:
- 密钥配置错误:检查你的AccessKey ID和SecretAccessKey是否输入正确,注意不要包含多余空格或特殊字符,严格区分大小写。
- 密钥权限不足:确保对应的IAM用户拥有SES发送邮件的权限,比如附加
AmazonSESFullAccess策略(或更精细的自定义策略,允许ses:SendEmail/ses:SendRawEmail操作)。 - 区域不匹配:确认AWS SDK配置的区域和你启用SES服务的区域一致(SES仅在部分区域可用,比如us-east-1、eu-west-1等)。
- 密钥状态异常:登录AWS控制台,检查该IAM用户的密钥是否处于启用状态,是否未过期。
这里提供一个正确使用长期密钥的C#示例:
using Amazon.SimpleEmail; using Amazon.SimpleEmail.Model; using System.Collections.Generic; using System.Threading.Tasks; class SesSender { static async Task Main() { // 替换为你的密钥和目标区域 var client = new AmazonSimpleEmailServiceClient("你的AccessKeyID", "你的SecretAccessKey", Amazon.RegionEndpoint.USEast1); var sendRequest = new SendEmailRequest { Source = "sender@example.com", Destination = new Destination { ToAddresses = new List<string> { "recipient@example.com" } }, Message = new Message { Subject = new Content("SES测试邮件"), Body = new Body { Text = new Content("这是通过AWS SES发送的测试内容") } } }; await client.SendEmailAsync(sendRequest); } }
如果以上配置都没问题,还可以用AWS CLI验证密钥有效性,执行以下命令(替换对应参数):
aws ses send-email --from sender@example.com --to recipient@example.com --subject "CLI测试" --text "测试内容" --region us-east-1
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

