@Override public String toString() { return formattedValue(); } }
public BodyPart computeReportPart() throws MessagingException { MimeBodyPart mdnPart = new MimeBodyPart(); mdnPart.setContent(report.formattedValue(), DISPOSITION_CONTENT_TYPE); return mdnPart; }
private MessageAttachment convertReportToAttachment(MDNReport mdnReport) { Attachment attachment = Attachment.builder() .bytes(mdnReport.formattedValue().getBytes(StandardCharsets.UTF_8)) .type(MDN.DISPOSITION_CONTENT_TYPE) .build(); return MessageAttachment.builder() .attachment(attachment) .isInline(true) .build(); }
private Multipart asMime4JMultipart() throws IOException { MultipartBuilder builder = MultipartBuilder.create(REPORT_SUB_TYPE); builder.addContentTypeParameter(new NameValuePair("report-type", DISPOSITION_NOTIFICATION_REPORT_TYPE)); builder.addBodyPart(BodyPartBuilder.create() .use(new BasicBodyFactory()) .setBody(humanReadableText, Charsets.UTF_8) .setContentType("text/plain", UTF_8_CHARSET)); builder.addBodyPart(BodyPartBuilder.create() .use(new BasicBodyFactory()) .setBody(report.formattedValue(), Charsets.UTF_8) .setContentType(DISPOSITION_CONTENT_TYPE, UTF_8_CHARSET)); return builder.build(); }
@Test public void generateMDNReportShouldFormatNullOriginalRecipient() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Deleted) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatUnknownAddressTypeForOriginalRecipient() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.ofUnknown(Text.fromRawText("#$%*"))) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: unknown; #$%*\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatWhenMissingOriginalMessageId() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Deleted) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatNoModifier() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Deleted) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;deleted\r\n"); }
@Test public void generateMDNReportShouldFormatAllModifier() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Deleted) .addModifiers(DispositionModifier.Error, DispositionModifier.Expired, DispositionModifier.Failed, DispositionModifier.MailboxTerminated, DispositionModifier.Superseded, DispositionModifier.Warning) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;deleted/error,expired,failed,mailbox-terminated,superseded,warning\r\n"); }
@Test public void generateMDNReportShouldFormatNullUserAgentProduct() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Deleted) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; \r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatOneModifier() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Deleted) .addModifier(DispositionModifier.Error) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;deleted/error\r\n"); }
@Test public void generateMDNReportShouldFormatTypeDisplayed() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Displayed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;displayed/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatAutomaticActions() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatUnknownModifier() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Deleted) .addModifier(new DispositionModifier("new")) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;deleted/new\r\n"); }
@Test public void generateMDNReportShouldFormatTypeDispatcher() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Dispatched) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;dispatched/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatManualActions() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;processed/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatTypeDeleted() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Deleted) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: manual-action/MDN-sent-manually;deleted/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatExoticAddressTypeForOriginalRecipient() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().addressType(new AddressType("roomNumber")).originalRecipient(Text.fromRawText("385")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: roomNumber; 385\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n"); }
@Test public void generateMDNReportShouldFormatOneExtension() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .withExtensionField(ExtensionField.builder().fieldName("X-OPENPAAS-IP").rawValue("177.177.177.77").build()) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n" + "X-OPENPAAS-IP: 177.177.177.77\r\n"); }
@Test public void generateMDNReportShouldFormatGateway() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); String report = MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .gatewayField(Gateway.builder().name(Text.fromRawText("host.com")).build()) .finalRecipientField(FinalRecipient.builder().finalRecipient(Text.fromRawText("final_recipient")).build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build() .formattedValue(); assertThat(report) .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + "MDN-Gateway: dns;host.com\r\n" + "Original-Recipient: rfc822; originalRecipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Original-Message-ID: original_message_id\r\n" + "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n"); }