I'm trying to send an email via the AWS SES API using the SDK.
I based my code off the official documentation here: https://docs.aws.amazon.com/ses/latest/DeveloperGuide/examples-send-using-sdk.html
I'm getting as far as await client.SendEmailAsync(sendRequest);
and receive the error message:
Failed to retrieve credentials from EC2 Instance Metadata Service.
// initialization
var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2);
var response = new SendEmailResponse();
// build email
var sendRequest = new SendEmailRequest
{
Source = ToAddress,
Destination = new Destination
{
ToAddresses =
new List<string> { ReceiverAddress }
},
Message = new Message
{
Subject = new Content(model.Subject),
Body = new Body
{
Html = new Content
{
Charset = "UTF-8",
Data = model.HtmlBody
},
}
},
};
// send async call to api
try
{
var response = await client.SendEmailAsync(sendRequest);
}
catch (Exception ex)
{
}
I've confirmed that my domain is verified via the AWS console and it's also showing as "Enabled for Sending".
Where am I going wrong?
I figured out an answer to my question.
The issue can be resolved by creating an IAM user group and user with access to the SES service.
Then I edited my code to pass the AccessKeyId and SecretAccessKey.
var client = new AmazonSimpleEmailServiceClient(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USWest2);
var response = new SendEmailResponse();
This is working. However to be more secure it's recommended that a Shared Credentials File be used.
Hope this helps someone else.
EDIT:
In V2 of the AWS SES SDK you need to change AmazonSimpleEmailServiceClient
to AmazonSimpleEmailServiceV2Client
.
var client = new AmazonSimpleEmailServiceV2Client(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USWest2);
var response = new SendEmailResponse();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With