带附件的 AWS-Pinpoint 电子邮件通知不起作用
AWS-Pinpoint email notification with attachment not working
我正在尝试做一个 POC,我在其中使用 aws pinpoint 发送电子邮件。简单的电子邮件工作正常,但当我尝试发送带附件的电子邮件时,我无法确定什么是正确的方式。
在文档中,此 link 描述了需要做什么
https://docs.aws.amazon.com/pinpoint-email/latest/APIReference/API_RawMessage.html
以下是我在各个网站上找到的代码:
// Create a new email client
AmazonPinpointEmail client = AmazonPinpointEmailClientBuilder.standard()
.withRegion(region).build();
// Combine all of the components of the email to create a request.
SendEmailRequest request = new SendEmailRequest()
.withFromEmailAddress(senderAddress)
.withConfigurationSetName(configurationSet)
.withDestination(new Destination()
.withToAddresses(toAddresses)
.withCcAddresses(ccAddresses)
.withBccAddresses(bccAddresses)
)
.withContent(new EmailContent()
.withRaw(new RawMessage().withData())
//the withData takes type buffer, how to create a message which contains attachement.
client.sendEmail(request);
System.out.println("Email sent!");
System.out.println(request);
有人用这个 api 发送附件,请帮助创建包含附件、主题和正文的消息。
谢谢
要使用 Amazon PinpointEmail 发送带附件的电子邮件,您需要(为简单起见):
- JavaMail Library : 一个API,用于利用[=]之类的类来撰写、编写和阅读电子信息22=]BodyPart, MimeBodyPart e.t.c
下面是我测试过的示例 java 代码片段 :
Session session = Session.getDefaultInstance(new Properties());
// Create a new MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Add subject, from and to lines.
message.setSubject(subject, "UTF-8");
message.setFrom(new InternetAddress(senderAddress));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
// Create a multipart/alternative child container.
MimeMultipart msg_body = new MimeMultipart("alternative");
// Create a wrapper for the HTML and text parts.
MimeBodyPart wrap = new MimeBodyPart();
// Define the text part.
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(BODY_TEXT, "text/plain; charset=UTF-8");
// Define the HTML part.
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(BODY_HTML,"text/html; charset=UTF-8");
// Add the text and HTML parts to the child container.
msg_body.addBodyPart(textPart);
msg_body.addBodyPart(htmlPart);
// Add the child container to the wrapper object.
wrap.setContent(msg_body);
// Create a multipart/mixed parent container.
MimeMultipart msg = new MimeMultipart("mixed");
// Add the parent container to the message.
message.setContent(msg);
// Add the multipart/alternative part to the message.
msg.addBodyPart(wrap);
// Define the attachment
MimeBodyPart att = new MimeBodyPart();
DataSource fds = new FileDataSource(ATTACHMENT);
att.setDataHandler(new DataHandler(fds));
att.setFileName(fds.getName());
// Add the attachment to the message.
msg.addBodyPart(att);
// Try to send the email.
try {
System.out.println("===============================================");
System.out.println("Getting Started with Amazon PinpointEmail"
+"using the AWS SDK for Java...");
System.out.println("===============================================\n");
// Instantiate an Amazon PinpointEmail client, which will make the service call with the supplied AWS credentials.
AmazonPinpointEmail client = AmazonPinpointEmailClientBuilder.standard()
.withRegion(Regions.US_EAST_1).build();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
message.writeTo(outputStream);
SendEmailRequest rawEmailRequest = new SendEmailRequest()
.withFromEmailAddress(senderAddress)
.withDestination(new Destination()
.withToAddresses(toAddress)
)
.withContent(new EmailContent()
.withRaw(new RawMessage().withData(ByteBuffer.wrap(outputStream.toByteArray())))
);
client.sendEmail(rawEmailRequest);
System.out.println("Email sent!");
// Display an error if something goes wrong.
} catch (Exception ex) {
System.out.println("Email Failed");
System.err.println("Error message: " + ex.getMessage());
ex.printStackTrace();
}
以上代码可以总结为6个步骤:
- 获取会话
- 创建 MimeBodyPart 对象
- 创建 MimeMultiPart 对象
- 创建数据源(定义附件)
- 将部分添加到 MimeMultiPart
- 通过 AmazonPinpointEmail 发送电子邮件 API
您可以在github
中找到完整的代码
希望对您有所帮助。
我正在尝试做一个 POC,我在其中使用 aws pinpoint 发送电子邮件。简单的电子邮件工作正常,但当我尝试发送带附件的电子邮件时,我无法确定什么是正确的方式。 在文档中,此 link 描述了需要做什么
https://docs.aws.amazon.com/pinpoint-email/latest/APIReference/API_RawMessage.html
以下是我在各个网站上找到的代码:
// Create a new email client
AmazonPinpointEmail client = AmazonPinpointEmailClientBuilder.standard()
.withRegion(region).build();
// Combine all of the components of the email to create a request.
SendEmailRequest request = new SendEmailRequest()
.withFromEmailAddress(senderAddress)
.withConfigurationSetName(configurationSet)
.withDestination(new Destination()
.withToAddresses(toAddresses)
.withCcAddresses(ccAddresses)
.withBccAddresses(bccAddresses)
)
.withContent(new EmailContent()
.withRaw(new RawMessage().withData())
//the withData takes type buffer, how to create a message which contains attachement.
client.sendEmail(request);
System.out.println("Email sent!");
System.out.println(request);
有人用这个 api 发送附件,请帮助创建包含附件、主题和正文的消息。 谢谢
要使用 Amazon PinpointEmail 发送带附件的电子邮件,您需要(为简单起见):
- JavaMail Library : 一个API,用于利用[=]之类的类来撰写、编写和阅读电子信息22=]BodyPart, MimeBodyPart e.t.c
下面是我测试过的示例 java 代码片段 :
Session session = Session.getDefaultInstance(new Properties());
// Create a new MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Add subject, from and to lines.
message.setSubject(subject, "UTF-8");
message.setFrom(new InternetAddress(senderAddress));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
// Create a multipart/alternative child container.
MimeMultipart msg_body = new MimeMultipart("alternative");
// Create a wrapper for the HTML and text parts.
MimeBodyPart wrap = new MimeBodyPart();
// Define the text part.
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(BODY_TEXT, "text/plain; charset=UTF-8");
// Define the HTML part.
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(BODY_HTML,"text/html; charset=UTF-8");
// Add the text and HTML parts to the child container.
msg_body.addBodyPart(textPart);
msg_body.addBodyPart(htmlPart);
// Add the child container to the wrapper object.
wrap.setContent(msg_body);
// Create a multipart/mixed parent container.
MimeMultipart msg = new MimeMultipart("mixed");
// Add the parent container to the message.
message.setContent(msg);
// Add the multipart/alternative part to the message.
msg.addBodyPart(wrap);
// Define the attachment
MimeBodyPart att = new MimeBodyPart();
DataSource fds = new FileDataSource(ATTACHMENT);
att.setDataHandler(new DataHandler(fds));
att.setFileName(fds.getName());
// Add the attachment to the message.
msg.addBodyPart(att);
// Try to send the email.
try {
System.out.println("===============================================");
System.out.println("Getting Started with Amazon PinpointEmail"
+"using the AWS SDK for Java...");
System.out.println("===============================================\n");
// Instantiate an Amazon PinpointEmail client, which will make the service call with the supplied AWS credentials.
AmazonPinpointEmail client = AmazonPinpointEmailClientBuilder.standard()
.withRegion(Regions.US_EAST_1).build();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
message.writeTo(outputStream);
SendEmailRequest rawEmailRequest = new SendEmailRequest()
.withFromEmailAddress(senderAddress)
.withDestination(new Destination()
.withToAddresses(toAddress)
)
.withContent(new EmailContent()
.withRaw(new RawMessage().withData(ByteBuffer.wrap(outputStream.toByteArray())))
);
client.sendEmail(rawEmailRequest);
System.out.println("Email sent!");
// Display an error if something goes wrong.
} catch (Exception ex) {
System.out.println("Email Failed");
System.err.println("Error message: " + ex.getMessage());
ex.printStackTrace();
}
以上代码可以总结为6个步骤:
- 获取会话
- 创建 MimeBodyPart 对象
- 创建 MimeMultiPart 对象
- 创建数据源(定义附件)
- 将部分添加到 MimeMultiPart
- 通过 AmazonPinpointEmail 发送电子邮件 API
您可以在github
中找到完整的代码希望对您有所帮助。