gpt4 book ai didi

java - 无法使用 Java 中的 Amazon SES 发送电子邮件

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:53 25 4
gpt4 key购买 nike

我正在使用下面提到的代码发送电子邮件。

public static void send(String email, String subject, String body) {
try {
fromEmail = "abc.@xyz.com";
Content subjectContent = new Content(subject);

Destination destination = new Destination().withToAddresses(new String[] { "cde@gmail.com" });

Content htmlContent = new Content().withData("<h1>Hello - I hope you're having a good day.</h1>");
Body msgBody = new Body().withHtml(htmlContent);

// Create a message with the specified subject and body.
Message message = new Message().withSubject(subjectContent).withBody(msgBody);

SendEmailRequest request = new SendEmailRequest()
.withSource(fromEmail)
.withDestination(destination)
.withMessage(message);

SendRawEmailRequest sendRawEmailRequest = new SendRawEmailRequest()
.withSource(fromEmail)
.withDestinations(destination.getBccAddresses())
.withRawMessage(new RawMessage());
AWSCredentials credentials = new BasicAWSCredentials(userName,password);

AmazonSimpleEmailServiceClient sesClient = new AmazonSimpleEmailServiceClient(credentials);
// ListVerifiedEmailAddressesResult verifiedEmails =
// sesClient.listVerifiedEmailAddresses();
SendRawEmailResult result = sesClient.sendRawEmail(sendRawEmailRequest);
System.out.println(result + "Email sent");
} catch (Exception e) {
logger.error("Caught a MessagingException, which means that there was a "
+ "problem sending your message to Amazon's E-mail Service check the "
+ "stack trace for more information.{}" + e.getMessage());
e.printStackTrace();
}
}

我收到下面提到的错误。

com.amazonaws.AmazonServiceException: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. The Canonical String for this request should have been 'POST /

host:email.us-east-1.amazonaws.com user-agent:aws-sdk-java/1.9.0 Linux/3.19.0-25-generic Java_HotSpot(TM)_64-Bit_Server_VM/25.66-b17/1.8.0_66 x-amz-date:20160223T062544Z

host;user-agent;x-amz-date 4c1f25e3dcf887bd49756ddd01c5e923cf49f2affa73adfc7059d00140032edf'

(Service: AmazonSimpleEmailService; Status Code: 403; Error Code: SignatureDoesNotMatch;

最佳答案

这是使用 Amazon SES 发送电子邮件的示例代码。最初,当您创建 Amazon SES 账户时,该账户将处于沙盒模式,仅允许您发送 200 封电子邮件。要将其切换到生产模式,您需要“请求”扩大电子邮件限制。请仔细阅读文档。

先决条件:您需要激活 Amazon SES 账户。如果您当前处于沙盒模式,请验证电子邮件地址(发件人和发件人)或域。在导航栏的“SMTP 设置”下,您可以生成 SMTP 凭据。这将包括 smtp 用户名和密码。您也可以下载包含此详细信息的 csv 文件。

generate smtp credentials

使用 Java 发送电子邮件:

public class AmazonSESExample {


static final String FROM = "your from email address";
static final String FROMNAME = "From name";

// Replace recipient@example.com with a "To" address. If your account
// is still in the sandbox, this address must be verified.
static final String TO = "receiver email address";

// Replace smtp_username with your Amazon SES SMTP user name.
static final String SMTP_USERNAME = "username generated under smtp settings";

// Replace smtp_password with your Amazon SES SMTP password.
static final String SMTP_PASSWORD = "password generated under smtp settings";

// Amazon SES SMTP host name. This example uses the US West (Oregon) region.
// See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
// for more information.
static final String HOST = "email-smtp.us-east-1.amazonaws.com";

// The port you will connect to on the Amazon SES SMTP endpoint.
static final int PORT = 25;

static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";

static final String BODY = String.join(
System.getProperty("line.separator"),
"<h1>Amazon SES SMTP Email Test</h1>",
"<p>This email was sent with Amazon SES using the ",
"<a href='https://github.com/javaee/javamail'>Javamail Package</a>",
" for <a href='https://www.java.com'>Java</a>."
);

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

// Create a Properties object to contain connection configuration information.
Properties props = System.getProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");

// Create a Session object to represent a mail session with the specified properties.
Session session = Session.getDefaultInstance(props);

// Create a message with the specified information.
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(FROM, FROMNAME));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
msg.setSubject(SUBJECT);
msg.setContent(BODY, "text/html");


// Create a transport.
Transport transport = session.getTransport();

// Send the message.
try {
System.out.println("Sending...");

// Connect to Amazon SES using the SMTP username and password you specified above.
transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);

// Send the email.
transport.sendMessage(msg, msg.getAllRecipients());
System.out.println("Email sent!");
} catch (Exception ex) {
System.out.println("The email was not sent.");
System.out.println("Error message: " + ex.getMessage());
} finally {
// Close and terminate the connection.
transport.close();
}
}

}

关于java - 无法使用 Java 中的 Amazon SES 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com