我从亚马逊服务器开始,开始研究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);
}
}
答案 0 :(得分:54)
您的代码表明您尝试通过us-west-2
发送。您是否已请求该地区的生产访问权限,并且您的From
地址是否经过验证? Amazon SES的生产访问权限与地区无关,您需要申请separately for each region。
如果您没有生产访问权限,则应确保已验证From
和To
地址。 Amazon SES控制台将为us-west-2
列出您的verified email addresses和verified domains。 Amazon SES博客additional guidance介绍了如何在us-west-2
中设置。
快速判断您是否没有生产访问权限:登录Amazon SES console dashboard,它将在页面顶部显示带有以下文本的蓝色横幅,其中包含一个请求生产访问权限的按钮:
您的Amazon SES帐户在美国西部地区拥有“沙盒”访问权限 (俄勒冈州)。通过沙盒访问,您只能向亚马逊发送电子邮件 SES邮箱模拟器以及您拥有的电子邮件地址或域 验证。了解更多。
找不到您现有的帐户设置?您的帐户可能已设置完毕 在不同的AWS区域。尝试切换右上角的区域 控制台的一角。
答案 1 :(得分:5)
您是否仍然在'沙盒'模式下运行?如果是,您只能向已经过预验证的地址发送电子邮件。
来自亚马逊:
电子邮件地址未经过验证 - 您的帐户位于沙盒中,而且位于沙箱中 收件人电子邮件地址尚未经过验证。这有可能 适用于“发件人”,“退货路径”或“发件人”地址。
如果您尚未请求对Amazon SES的生产访问,则必须 验证除收件人之外的每个收件人电子邮件地址 由Amazon SES邮箱模拟器提供。你还必须验证 你自己的“发件人”地址。有关更多信息,请参阅验证电子邮件 Amazon SES中的地址和域以及Amazon SES电子邮件测试 发送。
此处提供更多信息:http://docs.aws.amazon.com/ses/latest/DeveloperGuide/ses-errors.html
答案 2 :(得分:2)
经过几周的捣乱,我终于把它排除了。因此,如果您不在沙箱中,请验证您的域名和您的FROM电子邮件地址,请注意默认区域。正如您已经知道的那样(只是猜测),离开沙箱是特定于区域的(以及经过验证的电子邮件和域名)。
我的问题是,在所有关于如何使用AWS SDK Java发送电子邮件的排列中,我无法指定显式区域,而我的美国帐户将该区域默认为USA West。我执行所有验证(并且已经离开Sandbox)的我所在的地区是Europe West(email-smtp.eu-west-1.amazonaws.com)。另外,请不要忘记使用适用于AWS访问密钥的Amazon SES API的正确凭据。在我的情况下(下面),这些键位于一个文件中,在带有两个键值对的类路径中:
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());
}
}
}
答案 3 :(得分:2)
另外,请仔细检查以确保您未在生产模式下运行和/或确保在沙盒模式下验证您的发送TO地址。
AWS SES沙盒模式的限制:
http://docs.aws.amazon.com/ses/latest/DeveloperGuide/request-production-access.html