web-dev-qa-db-ja.com

Amazon SES Eメールアドレスが検証されていません

私はAmazonサーバーから始めて、SESについて勉強し始めました。私はasp.net C#を使用しており、コードベースのチュートリアルを作成しました。すでにドメインを確認し、テストを実行するメールも確認しました。

そのため、コードを実行すると、次のエラーメッセージが生成されます。トランザクションが失敗しました。サーバーの応答:メッセージが拒否されました:電子メールアドレスが検証されていません。

私はそれが何であるか分かりません、なぜなら私はすべての可能なステップを踏んだからです。単一の詳細はまだ生産へのアクセスのリリースを命じられていません。

しかし、私はそれができないと思う、私はまだサービスをテストしています。

私のコード

public void enviarSES02()
        {
            try
            {
                const String FROM = "verified email address"; 
                const String TO = "verified email address"; 

                const String SUBJECT = "Amazon SES test (SMTP interface accessed using C#)";
                const String BODY = "This email was sent through the Amazon SES SMTP interface by using C#.";

                const String SMTP_USERNAME = "my username";  // Replace with your SMTP username. 
                const String SMTP_PASSWORD = "my password";  // Replace with your SMTP password.

                const String Host = "email-smtp.us-west-2.amazonaws.com";

                const int PORT = 25;//already tried with all recommended ports

                SmtpClient client = new SmtpClient(Host, PORT);
                client.Credentials = new System.Net.NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD);

                client.EnableSsl = true;

                try
                {
                    Console.WriteLine("Attempting to send an email through the Amazon SES SMTP interface...");
                    client.Send(FROM, TO, SUBJECT, BODY);
                    Response.Write("ENVIADO");
                }
                catch (Exception ex)
                {
                    Response.Write("<br>O e-mail não foi enviado.<br>");
                    Response.Write("Olhao erro: " + ex.Message);
                }

            }
            catch (Exception ex)
            {
                Response.Write("Error message: " + ex.Message);
            }

        }
28
leedream

コードは、us-west-2経由で送信しようとしていることを示しています。その地域で本番アクセスをリクエストしましたか?Fromアドレスは確認されていますか? Amazon SESの本番アクセスはリージョンに依存しないため、リクエストする必要があります 各リージョンごとに

本番アクセス権がない場合は、FromアドレスとToアドレスの両方が検証されていることを確認する必要があります。 Amazon SESコンソールには、us-west-2の-​​ 検証済みメールアドレス および 検証済みドメイン がリストされます。 Amazon SESブログには、us-west-2での設定方法に関する 追加のガイダンス があります。

本番アクセス権がないかどうかをすばやく確認する方法: Amazon SESコンソールダッシュボード にログインすると、ページ上部に次のテキストと青いボタンが表示され、リクエストするボタンが表示されます本番アクセス:

Amazon SESアカウントには、米国西部(オレゴン)リージョンで「サンドボックス」アクセスがあります。サンドボックスアクセスでは、Amazon SESメールボックスシミュレーター、および確認済みのメールアドレスまたはドメインにのみメールを送信できます。もっと詳しく知る。

既存のアカウント設定が見つかりませんか?アカウントは別のAWSリージョンで設定される場合があります。コンソールの右上隅でリージョンを切り替えてみてください。

54
Rohan Deshpande

まだ「サンドボックス」モードで実行されていますか?あなたがいる場合、事前に確認されたアドレスにのみメールを送信できます。

Amazonから:

メールアドレスが検証されていません-アカウントはサンドボックスにあり、受信者のメールアドレスの1つは検証されていません。これは、「Sender」、「Return-Path」、または「From」アドレスに適用される場合があります。

Amazon SESへの本番アクセスをリクエストしていない場合、Amazon SESメールボックスシミュレーターによって提供された受信者を除き、すべての受信者Eメールアドレスを確認する必要があります。また、独自の「差出人」アドレスを確認する必要があります。詳細については、「Amazon SESでのEメールアドレスとドメインの検証」および「Amazon SES Eメール送信のテスト」を参照してください。

詳細はこちら: http://docs.aws.Amazon.com/ses/latest/DeveloperGuide/ses-errors.html

5
E.J. Brennan

また、本番モードで実行されていないこと、および/または送信先アドレスがサンドボックスモードで確認されていることを確認してください。

AWS SESサンドボックスモードの制限:

  • メールを送信できるのは、Amazon SESメールボックスシミュレーターと検証済みのEメールアドレスとドメインのみです。
  • 確認済みのメールアドレスとドメインからのみメールを送信できます。
  • 24時間ごとに最大200件のメッセージを送信できます。
  • Amazon SESは、アカウントから1秒あたり最大1つのメッセージを受け入れることができます。

http://docs.aws.Amazon.com/ses/latest/DeveloperGuide/request-production-access.html

2
Humza Javaid

数週間いじってから、ようやくこれを整理しました。そのため、サンドボックスの外にいる場合は、デフォルトの地域に注意して、ドメインとFROMメールアドレスを確認してください。既にご存知のように(推測に過ぎません)、サンドボックスからの脱出は地域固有です(検証済みのメールとドメインも同様)。

私の問題は、AWS SDK Javaでメールを送信する方法のすべての順列で、明示的な地域を指定できず、米国アカウントが地域を米国西部にデフォルト設定していたことです。私がすべての検証を行った(およびサンドボックスから出ていた)私の地域は、ヨーロッパ西部(email-smtp.eu-west-1.amazonaws.com)でした。また、AWSアクセスキーであるAmazon SES APIの適切な認証情報を使用することを忘れないでください。私の場合(以下)、これらのキーは2つのキーと値のペアを持つクラスパスのファイルにあります。

accessKey = AKI...
secretKey = AsVyp...

そして、ここにコードがあります:

import Java.io.IOException;

import Java.util.ArrayList;
import Java.util.Properties;
import Java.util.Arrays;


import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.simpleemail.AWSJavaMailTransport;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient;
import com.amazonaws.services.simpleemail.model.ListVerifiedEmailAddressesResult;
import com.amazonaws.services.simpleemail.model.VerifyEmailAddressRequest;
//import com.amazonaws.services.ec2.model.Region;
import com.amazonaws.services.simpleemail.*;
import com.amazonaws.services.simpleemail.model.*;
import com.amazonaws.regions.*;

public class AmazonSESSample {

static final String FROM = "[email protected]";  
static final String TO = "[email protected]";                                                       // 
static final String BODY = "This email was sent through Amazon SES by using the AWS SDK for Java.";
static final String SUBJECT = "Amazon SES test (AWS SDK for Java)";


public static void main(String[] args) throws IOException {     

    // Construct an object to contain the recipient address.
    Destination destination = new Destination().withToAddresses(new String[]{TO});

    // Create the subject and body of the message.
    Content subject = new Content().withData(SUBJECT);
    Content textBody = new Content().withData(BODY); 
    Body body = new Body().withText(textBody);

    PropertiesCredentials credentials = new PropertiesCredentials(
            AmazonSESSample.class
                    .getResourceAsStream("AwsCredentials.properties"));

    Message message = new Message().withSubject(subject).withBody(body);
    SendEmailRequest request = new SendEmailRequest().withSource(FROM).withDestination(destination).withMessage(message);

    try
    {        

        AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(credentials);
        Region REGION = Region.getRegion(Regions.EU_WEST_1);
        client.setRegion(REGION);
        client.sendEmail(request);  
        System.out.println("Email sent!");
    }
    catch (Exception ex) 
    {
        System.out.println("The email was not sent.");
        System.out.println("Error message: " + ex.getMessage());
    }
}

}

2
tom