我使用下面提到的代码发送电子邮件。
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:我们计算的请求签名与您提供的签名不匹配。检查您的AWS Secret Access Key和签名方法。有关详细信息,请参阅服务文档 此请求的规范字符串应该是 “POST /
主机: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-日期:20160223T062544Z
主机;用户代理; X-AMZ-日期 4c1f25e3dcf887bd49756ddd01c5e923cf49f2affa73adfc7059d00140032edf'
(服务:AmazonSimpleEmailService;状态代码:403;错误代码:SignatureDoesNotMatch;
答案 0 :(得分:0)
您提供的凭据不正确。您正在提供IAM用户名和密码。相反,您必须提供access_key_id
和access_key_id
。
AWSCredentials credentials = new BasicAWSCredentials(access_key_id, secret_access_key)
答案 1 :(得分:0)
这是使用Amazon SES发送电子邮件的示例代码。 最初,当您创建Amazon SES帐户时,该帐户将处于沙盒模式,该模式仅允许您发送200封电子邮件。要将其切换到生产模式,您需要“请求”以扩展电子邮件限制。请仔细阅读文档。
先决条件: 您需要激活Amazon SES帐户。 如果您当前处于沙盒模式,请验证电子邮件地址(去往和来自)或域。 在导航栏中的“ SMTP设置”下,您可以生成SMTP凭据。 这将包括smtp用户名和密码。您也可以下载包含此详细信息的csv文件。
使用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();
}
}
}