2014-01-30 5 views
6

Я рассмотрел другие вопросы о SO, у всех из них нет SES и Java в рамках их вопроса.ПодписьDoesNotMatch, Подписанная вами подпись запроса не соответствует подписи, которую вы предоставили

Исключение

Exception in thread "main" com.amazonaws.AmazonServiceException: Status Code: 403, AWS Service: AmazonSimpleEmailService, AWS Request ID: 6828fb27-8972-11e3-9700-b705133266ce, AWS Error Code: SignatureDoesNotMatch, AWS Error Message: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:773) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:417) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:229) 
    at com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient.invoke(AmazonSimpleEmailServiceClient.java:1254) 
    at com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient.listVerifiedEmailAddresses(AmazonSimpleEmailServiceClient.java:296) 
    at com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient.listVerifiedEmailAddresses(AmazonSimpleEmailServiceClient.java:1132) 
    at com.mcruiseon.server.amazonses.test.AWSJavaMailSample.verifyEmailAddress(AWSJavaMailSample.java:169) 
    at com.mcruiseon.server.amazonses.test.AWSJavaMailSample.main(AWSJavaMailSample.java:84) 

Исходный код

public class AWSJavaMailSample { 
    private static final String TO = "[email protected]"; 
    private static final String FROM = "[email protected]"; 
    private static final String BODY = "Hello World!"; 
    private static final String SUBJECT = "Hello World!"; 

    public static void main(String[] args) throws IOException { 
     AWSCredentials credentials = new ClasspathPropertiesFileCredentialsProvider() 
       .getCredentials(); 
     AmazonSimpleEmailService ses = new AmazonSimpleEmailServiceClient(
       credentials); 
     Region usWest2 = Region.getRegion(Regions.US_EAST_1); 
     ses.setRegion(usWest2); 
     verifyEmailAddress(ses, FROM); 
     // verifyEmailAddress(ses, TO); 
     Properties props = new Properties(); 
     props.setProperty("mail.transport.protocol", "aws"); 
     props.setProperty("mail.aws.user", "ses-smtp-user.some_number") ; 
     props.setProperty("mail.aws.password", "password_setup_for_this_user"); 
     Session session = Session.getInstance(props); 
     try { 
      Message msg = new MimeMessage(session); 
      msg.setFrom(new InternetAddress(FROM)); 
      msg.addRecipient(Message.RecipientType.TO, new InternetAddress(TO)); 
      msg.setSubject(SUBJECT); 
      msg.setText(BODY); 
      msg.saveChanges(); 

      Transport t = new AWSJavaMailTransport(session, null); 
      t.connect(); 
      t.sendMessage(msg, null); 

      t.close(); 
     } catch (AddressException e) { 
      e.printStackTrace(); 
      System.out 
        .println("Caught an AddressException, which means one or more of your " 
          + "addresses are improperly formatted."); 
     } catch (MessagingException e) { 
      e.printStackTrace(); 
      System.out 
        .println("Caught a MessagingException, which means that there was a " 
          + "problem sending your message to Amazon's E-mail Service check the " 
          + "stack trace for more information."); 
     } 
    } 
    private static void verifyEmailAddress(AmazonSimpleEmailService ses, 
      String address) { 
     ListVerifiedEmailAddressesResult verifiedEmails = ses 
       .listVerifiedEmailAddresses(); 
     if (verifiedEmails.getVerifiedEmailAddresses().contains(address)) 
      return; 

     ses.verifyEmailAddress(new VerifyEmailAddressRequest() 
       .withEmailAddress(address)); 
     System.out.println("Please check the email address " + address 
       + " to verify it"); 
     System.exit(0); 
    } 
} 

SES Setup

  1. Добавлено myproductdomain.com Домены.
  2. Добавлено [email protected] в адрес электронной почты.

AwsCredentials.properties

  1. Для SecretKey = "AWS сайт логин пароль"
  2. Для Accesskey = "https://console.aws.amazon.com/iam/home#users , учетные данные безопасности, для ses-smtp-user.some_number, ключ доступа "

Я пробовал« мир привет »SES из плагина eclipse. Должно было работать прямо из коробки.

ответ

1

Я считаю, что проблема заключается в том, что вы используете «ses-smtp-user.some_number». Вы видите, что с SES существует два способа отправки писем.

  • с помощью веб-сервиса (AmazonSimpleEmailServiceClient)
  • с использованием SMTP

Пользователь, который был создан был для Smtp, SES-Smtp-user.some_number. Вы используете эти учетные данные для вызова веб-службы.

Мое предложение - создать нормального пользователя (не на экране SES) и назначить разрешения SES. Обратите внимание, что недавно созданные учетные данные теперь не будут работать с SMTP.

Если вы хотите верительных, который работает с обоими, SMTP и веб-сервис, вы можете прочитать об этом: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html#smtp-credentials-convert

Смежные вопросы

 Смежные вопросы