2014-03-02 3 views
27

Ich beginne mit den Amazon-Servern und fing an, über SES zu studieren. Ich benutze asp.net C# und machte meine Code-basierte Tutorials. Ich habe bereits die Domain überprüft und auch die E-Mails überprüft, in denen ich den Test durchführen werde.Amazon SES E-Mail-Adresse ist nicht verifiziert

So, wenn ich meinen Code ausführen, wird folgende Fehlermeldung generiert: Transaktion fehlgeschlagen. Die Serverantwort lautete: Nachricht abgelehnt: E-Mail-Adresse wurde nicht verifiziert.

Ich weiß nicht, was es ist, weil ich alle möglichen Schritte befolgte, einzelnes Detail ist noch nicht die Freigabe des Zugangs zur Produktion bestellt.

Aber ich denke, es kann nicht sein, ich teste immer noch den Service.

My-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); 
      } 

     } 

Antwort

54

Ihr Code zeigt an, dass Sie über us-west-2 zu senden versuchen. Haben Sie in dieser Region Produktionszugriff angefordert und ist Ihre From Adresse verifiziert? Der Produktionszugriff für Amazon SES ist regionalunabhängig und Sie müssen ihn anfordern separately for each region. Wenn Sie keinen Produktionszugriff haben, sollten Sie sicherstellen, dass sowohl From als auch To Adressen verifiziert sind. Die Amazon SES-Konsole listet Ihre verified email addresses und verified domains für us-west-2 auf. Der Amazon SES Blog hat additional guidance auf, wie Sie in us-west-2 eingerichtet werden können.

Eine schnelle Art und Weise zu sagen, wenn Sie nicht über die Produktion Zugriff haben: die Amazon SES console dashboard melden Sie sich an, um und es wird mit dem folgenden Text am oberen Rand der Seite mit einem Knopf zu beantragen Produktion Zugang eine blaue Fahne anzuzeigen:

Ihr Amazon SES Konto hat "Sandbox" -Zugriff in der Region US West (Oregon). Mit dem Sandbox-Zugang können Sie nur E-Mails an den Amazon SSS-Mailbox-Simulator senden und Adressen oder Domains per E-Mail senden, die Sie unter verifiziert haben. Mehr erfahren.

Sie können Ihre bestehenden Kontoeinstellungen nicht finden? Ihr Konto kann möglicherweise in einer anderen AWS-Region als eingerichtet werden. Versuchen Sie Regionen in der oberen rechten Ecke Ecke der Konsole zu wechseln.

+0

das ist einfach so subtil. hätte es fast für einen zufälligen Vorschlag gehalten und es verpasst. Sie sollten ein Tab-Menü für "Produktionszugriff anfordern" haben. Trotzdem danke. – roopunk

+5

Ich bin verloren, nicht im Sandbox-Modus, verifizierte Domain, von Adresse überprüft, und immer noch die "nicht vrriified E-Mail" -Fehler. noch mehr Tipps ?? – tom

+0

Genau das gleiche Problem hier @tom Hast du es herausgefunden? – Sharry

5

Sind Sie zufällig noch in 'Sandbox' -Modus läuft? Wenn dies der Fall ist, können Sie E-Mails nur an Adressen senden, die vorab verifiziert wurden.

Von Amazon:

E-Mail-Adresse nicht -Ihr Konto verifiziert ist in der Sandbox und ein der Empfänger E-Mail-Adressen nicht überprüft worden. Dies könnte gelten für "Absender", "Return-Path" oder "Von" -Adressen.

Wenn Sie nicht die Produktion Zugriff auf Amazon SES angefordert haben, müssen Sie jede Adresse des Empfängers E-Mail bestätigen mit Ausnahme der Empfänger durch die Amazon SES Mailbox-Simulator zur Verfügung gestellt. Sie müssen auch Ihre eigene "Von" Adresse verifizieren. Weitere Informationen finden Sie unter Überprüfen der E-Mail-Adresse Adressen und Domänen in Amazon SES und Testen der Amazon SES-E-Mail Senden.

Weitere Informationen hier: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/ses-errors.html

+0

Ich fühle mich irgendwie verwirrt, um zu überprüfen, ob die Feststellung des Bedienfeldes (http://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses .html) Habe ich schon gemacht. – leedream

+0

das funktioniert gut für mich danke. – Asif

2

Nach wochenlangem Herumalbern habe ich das endlich aussortiert. Wenn Sie also nicht in der Sandbox sind, haben Sie Ihre Domain und Ihre FROM-E-Mail-Adresse verifiziert. Achten Sie auf die Standardregion. Wie Sie bereits wissen (nur eine Vermutung), ist das Verlassen der Sandbox regional (ebenso wie die verifizierte E-Mail und Domain).

Mein Problem war, dass ich war, dass in allen von den Permutationen, wie eine E-Mail mit AWS SDK Java zu schicken, ich nicht in der Lage war, einen expliziten Region und meine USA-Konto wurde säumige die Region USA West angeben. Meine Region, in der ich alle Verifizierungen durchgeführt habe (und aus der Sandbox verschwunden war), war Europe West (email-smtp.eu-west-1.amazonaws.com). Vergessen Sie auch nicht, die richtigen Anmeldeinformationen für Amazon SES API zu verwenden, die die AWS-Zugriffsschlüssel sind. In meinem Fall (unten) die Tasten sind in einer Datei, in dem Classpath mit zwei Schlüssel-Wert-Paare:

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

Und hier ist der 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()); 
    } 
} 

}

+0

zwei Regionen ... Boom – cubsker

2

Auch Doppel Vergewissern Sie sich, dass Sie nicht im Produktionsmodus arbeiten und/oder vergewissern Sie sich, dass Ihre Versandadresse im Sandbox-Modus verifiziert ist.

Einschränkungen von AWS SES Sandbox-Modus:

  • Sie nur E-Mail an das Amazon SES Mailbox Simulator senden und E-Mail-Adressen und Domains überprüft.
  • Sie können nur E-Mails von verifizierten E-Mail-Adressen und Domänen senden.
  • Sie können maximal 200 Nachrichten pro 24 Stunden senden.
  • Amazon SES kann pro Sekunde maximal eine Nachricht von Ihrem Konto annehmen.

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