带有附件的AWS-Pinpoint电子邮件通知不起作用

时间:2019-10-09 12:09:02

标签: amazon-web-services aws-sdk aws-pinpoint

我正在尝试使用POW精确定位发送电子邮件的POC。简单的电子邮件可以正常工作,但是当我尝试发送带有附件的电子邮件时,我无法确定什么是正确的方法。 在文档中,此链接描述了需要做什么

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发送附件,请帮助创建包含附件,主题和正文的消息。 谢谢

1 个答案:

答案 0 :(得分:0)

要使用Amazon PinpointEmail发送带有附件的电子邮件,您需要(为简单起见)

  • JavaMail库:一种API,通过使用 BodyPart < em> MimeBodyPart

以下是我已测试正常运行的示例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个步骤:

  1. 获取会话
  2. 创建MimeBodyPart对象
  3. 创建MimeMultiPart对象
  4. 创建数据源(定义附件)
  5. 将零件添加到MimeMultiPart
  6. 通过AmazonPinpointEmail API发送电子邮件

您可以在github

中找到完整的代码

希望这会有所帮助。