web-dev-qa-db-fra.com

L'adresse e-mail d'Amazon SES n'est pas vérifiée

Je commence avec les serveurs Amazon et j'ai commencé à étudier SES. J'utilise asp.net C # et ai fait mes tutoriels basés sur du code. J'ai déjà vérifié le domaine et également vérifié les e-mails dans lesquels je vais exécuter le test.

Ainsi, lorsque j'exécute mon code, il génère le message d'erreur suivant: La transaction a échoué. La réponse du serveur a été: Message rejeté: l'adresse e-mail n'est pas vérifiée.

Je ne sais pas ce que c'est car j'ai suivi toutes les étapes possibles, le moindre détail n'a pas encore ordonné la libération de l'accès à la production.

Mais je pense que cela ne peut pas être, je teste toujours le service.

Mon code

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

Votre code indique que vous essayez d'envoyer via us-west-2. Avez-vous demandé l'accès à la production dans cette région et votre adresse From est-elle vérifiée? L'accès à la production pour Amazon SES est indépendant de la région et vous devez le demander séparément pour chaque région .

Si vous n'avez pas accès à la production, vous devez vous assurer que les adresses From et To sont vérifiées. La console Amazon SES répertoriera vos adresses e-mail vérifiées et domaines vérifiés pour us-west-2. Le blog Amazon SES a conseils supplémentaires sur la façon dont vous pouvez vous installer dans us-west-2.

Un moyen rapide de savoir si vous n'avez pas accès à la production: connectez-vous au tableau de bord de la console Amazon SES et il affichera une bannière bleue avec le texte suivant en haut de la page avec un bouton pour demander accès à la production:

Votre compte Amazon SES dispose d'un accès "bac à sable" dans la région US West (Oregon). Avec l'accès au bac à sable, vous ne pouvez envoyer des e-mails qu'au simulateur de boîte aux lettres Amazon SES et aux adresses e-mail ou domaines que vous avez vérifiés. Apprendre encore plus.

Vous ne trouvez pas vos paramètres de compte existants? Votre compte peut être configuré dans une autre région AWS. Essayez de changer de région dans le coin supérieur droit de la console.

54
Rohan Deshpande

Êtes-vous par hasard toujours en mode "bac à sable"? Si vous l'êtes, vous ne pouvez envoyer des e-mails qu'à des adresses qui ont été pré-vérifiées.

Depuis Amazon:

L'adresse e-mail n'est pas vérifiée - Votre compte est dans le bac à sable et l'une des adresses e-mail du destinataire n'a pas été vérifiée. Cela peut s'appliquer aux adresses "Sender", "Return-Path" ou "From".

Si vous n'avez pas demandé l'accès de production à Amazon SES, vous devez vérifier chaque adresse e-mail de destinataire à l'exception des destinataires fournis par le simulateur de boîte aux lettres Amazon SES. Vous devez également vérifier votre propre adresse "De". Pour plus d'informations, consultez Vérification des adresses e-mail et des domaines dans Amazon SES et Test de l'envoi d'e-mails Amazon SES.

Plus d'informations ici: http://docs.aws.Amazon.com/ses/latest/DeveloperGuide/ses-errors.html

5
E.J. Brennan

Vérifiez également que vous ne travaillez pas en mode production et/ou assurez-vous que votre adresse d'envoi TO est vérifiée en mode Sandbox.

Limitations du mode AWS SES Sandbox:

  • Vous ne pouvez envoyer des messages qu'au simulateur de boîte aux lettres Amazon SES et à des adresses e-mail et des domaines vérifiés.
  • Vous ne pouvez envoyer du courrier qu'à partir d'adresses e-mail et de domaines vérifiés.
  • Vous pouvez envoyer un maximum de 200 messages par période de 24 heures.
  • Amazon SES peut accepter au maximum un message de votre compte par seconde.

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

2
Humza Javaid

Après des semaines à déconner, j'ai finalement réglé cela. Donc, si vous êtes hors du bac à sable, avez vérifié votre domaine et votre adresse e-mail FROM, méfiez-vous de la région par défaut. Comme vous le savez déjà (juste une supposition), être hors du bac à sable est spécifique à la région (ainsi que l'e-mail et le domaine vérifiés).

Mon problème était que j'étais dans toutes les permutations de la façon d'envoyer un e-mail avec AWS SDK Java, je ne pouvais pas spécifier une région explicite et mon compte USA faisait par défaut la région à USA West. Ma région où j'ai effectué toute la vérification (et qui était hors du bac à sable) était Europe West (email-smtp.eu-west-1.amazonaws.com). N'oubliez pas non plus d'utiliser les informations d'identification appropriées pour l'API Amazon SES, qui sont les clés d'accès AWS. Dans mon cas (ci-dessous), ces clés sont dans un fichier, dans le chemin de classe avec deux paires clé-valeur:

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

Et voici le code:

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