亚马逊SES电子邮件地址未经验证



我从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);
}
}

您的代码表明您正试图通过us-west-2发送。您是否请求访问该地区的生产,您的From地址是否已验证?亚马逊SES的生产访问是独立于地区的,您需要为每个地区单独申请。

如果您没有生产访问权限,则应确保验证了FromTo地址。亚马逊SES控制台将列出您已验证的us-west-2电子邮件地址和已验证的域。亚马逊SES博客提供了关于如何在us-west-2中设置的额外指导。

如果你没有生产访问权限,一个快速的方法可以告诉你:登录亚马逊SES控制台面板,它会在页面顶部显示一条蓝色横幅,上面有以下文本,并有一个请求生产访问的按钮:

您的亚马逊SES帐户在美国西部地区拥有"沙箱"访问权限(俄勒冈州)。使用沙盒访问,您只能向亚马逊发送电子邮件SES邮箱模拟器和您拥有的电子邮件地址或域已证实的了解更多信息。

找不到您现有的帐户设置?您的帐户可能已设置在不同的AWS区域。尝试切换右上角的区域控制台的角落。

您是否仍在"沙箱"模式下运行?如果是,则只能将电子邮件发送到经过预验证的地址。

来自亚马逊:

未验证电子邮件地址--您的帐户在沙盒中个收件人电子邮件地址尚未验证。这可能适用于"发件人"、"返回路径"或"发件人"地址。

如果您没有请求访问亚马逊SES的生产,您必须验证除收件人之外的每个收件人电子邮件地址由亚马逊SES邮箱模拟器提供。您还必须验证您自己的"发件人"地址。有关详细信息,请参阅验证电子邮件地址和域在亚马逊SES和测试亚马逊SES电子邮件正在发送。

此处提供更多信息:http://docs.aws.amazon.com/ses/latest/DeveloperGuide/ses-errors.html

经过几周的折腾,我终于解决了这个问题。所以,如果你离开了沙箱,已经验证了你的域和FROM电子邮件地址,请注意默认的Region。正如你已经知道的(只是猜测),脱离沙箱是特定于地区的(以及经过验证的电子邮件和域)。

我的问题是,在如何使用AWS SDK Java发送电子邮件的所有排列中,我无法指定明确的地区,我的美国帐户将该地区默认为美国西部。我进行所有验证的地区(已退出沙盒)是欧洲西部(email-smtp.eu-West-1.amazonaws.com)。此外,不要忘记使用亚马逊SES API的正确凭据,即AWS访问密钥。在我的例子中(如下),这些键在类路径中的一个文件中,有两个键值对:

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 = "john@myappsdomain.com";  
static final String TO = "me@mypersonalaccount.com";                                                       // 
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());
}
}

}

还要仔细检查以确保您没有在生产模式下运行和/或确保您的发送to地址在沙盒模式下得到验证。

AWS SES沙盒模式的局限性:

  • 您只能将邮件发送到Amazon SES邮箱模拟器以及已验证的电子邮件地址和域
  • 您只能从已验证的电子邮件地址和域发送邮件
  • 您每24小时最多可以发送200条消息
  • 亚马逊SES每秒最多可以接受来自您帐户的一条消息

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

相关内容

  • 没有找到相关文章

最新更新