Khoyendra Pande
Khoyendra Pande

Reputation: 1649

Unable to send email from Amazon EC2 Server in Java

Trying to send mail from Amazon EC2 server with java code but getting an exception like -

Exception in thread "main" Status Code: 403, AWS Request ID: 3e9319ec-bc62-11e1-b2ea-6bde1b4f192c, AWS Error Code: AccessDenied, AWS Error Message: User: arn:aws:iam::696355342546:user/brandzter is not authorized to perform: ses:SendEmail
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:500)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:262)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:166)
at com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient.invoke(AmazonSimpleEmailServiceClient.java:447)
at com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient.sendEmail(AmazonSimpleEmailServiceClient.java:242)
at brandzter.util.SESExample.SendMail(SESExample.java:46)
at brandzter.util.SESExample.<init>(SESExample.java:31)
at brandzter.util.SESExample.main(SESExample.java:52)

Java Result: 1

My credential is ok don't know why I am unable to send email here. will I need to configure/update any setting in server?

Upvotes: 11

Views: 5829

Answers (2)

Vova Bilyachat
Vova Bilyachat

Reputation: 19514

In my case i Went to IAm console, choose my user and attach policy AmazonSESFullAccess

Upvotes: 6

Jeffrey Hulten
Jeffrey Hulten

Reputation: 772

You user is not authorized in Identity and Access Management (IAM) to send email to SES.

Error 403 refers to the HTTP code 403 Unauthorized.

The error at the end tells you what permission you are lacking.

arn:aws:iam::696355342546:user/brandzter is not authorized to perform: ses:SendEmail

Alternately your AWS account may not be signed up for the Simple Email Service, but I doubt that is the problem.

You can add a group to IAM that is allowed just the sendEmail action with the following policy:

{
  "Statement": [
    {
      "Action": [
        "ses:SendEmail"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    }
  ]
}

Alternately you can give it a policy that allows it to execute any action on SES with:

{
  "Statement": [
    {
      "Action": [
        "ses:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    }
  ]
}

Upvotes: 11

Related Questions