use of org.apache.mailet.base.mail.MimeMultipartReport in project nhin-d by DirectProject.
the class MDNFactory method create.
/**
* Answers a MimeMultipartReport containing a
* Message Delivery Notification as specified by RFC 2298.
*
* @param humanText
* @param reporting_UA_name
* @param reporting_UA_product
* @param original_recipient
* @param final_recipient
* @param original_message_id
* @param disposition
* @return MimeMultipartReport
* @throws MessagingException
*/
public static MimeMultipartReport create(String humanText, String reporting_UA_name, String reporting_UA_product, String original_recipient, String final_recipient, String original_message_id, String error, MdnGateway gateway, Disposition disposition) throws MessagingException {
if (disposition == null)
throw new IllegalArgumentException("Disposition can not be null.");
// Create the message parts. According to RFC 2298, there are two
// compulsory parts and one optional part...
MimeMultipartReport multiPart = new MimeMultipartReport();
multiPart.setReportType("disposition-notification");
// Part 1: The 'human-readable' part
MimeBodyPart humanPart = new MimeBodyPart();
humanPart.setText(humanText);
multiPart.addBodyPart(humanPart);
// Part 2: MDN Report Part
// 1) reporting-ua-field
StringBuilder mdnReport = new StringBuilder(128);
if (reporting_UA_name != null && !reporting_UA_name.isEmpty()) {
mdnReport.append("Reporting-UA: ");
mdnReport.append((reporting_UA_name == null ? "" : reporting_UA_name));
mdnReport.append("; ");
mdnReport.append((reporting_UA_product == null ? "" : reporting_UA_product));
mdnReport.append("\r\n");
}
// 2) original-recipient-field
if (original_recipient != null && !original_recipient.isEmpty()) {
mdnReport.append("Original-Recipient: ");
mdnReport.append("rfc822; ");
mdnReport.append(original_recipient);
mdnReport.append("\r\n");
}
// 3) final-recipient-field
if (final_recipient != null && !final_recipient.isEmpty()) {
mdnReport.append("Final-Recipient: ");
mdnReport.append("rfc822; ");
mdnReport.append(final_recipient);
mdnReport.append("\r\n");
}
// 4) original-message-id-field
if (original_message_id != null && !original_message_id.isEmpty()) {
mdnReport.append("Original-Message-ID: ");
mdnReport.append(original_message_id);
mdnReport.append("\r\n");
}
// 5) mdn-gateway-field
if (gateway != null) {
mdnReport.append("MDN-Gateway: ");
mdnReport.append(gateway.toString());
mdnReport.append("\r\n");
}
// 6) error-field
if (error != null && !error.isEmpty()) {
mdnReport.append("Error: ");
mdnReport.append(error);
mdnReport.append("\r\n");
}
mdnReport.append(disposition.toString());
mdnReport.append("\r\n");
MimeBodyPart mdnPart = new MimeBodyPart();
try {
// using a DataSource gets around some of the issues with the JAF dynamically loading content handlers that may not work, speicifically
// the java dsn library and the DispostionNotification class which doesn't know how to handle byte arrays
ByteArrayDataSource dataSource = new ByteArrayDataSource(new ByteArrayInputStream(mdnReport.toString().getBytes()), "message/disposition-notification");
mdnPart.setDataHandler(new DataHandler(dataSource));
multiPart.addBodyPart(mdnPart);
} catch (IOException e) {
/*no-op*/
}
// described in RFC 1892. It would be a useful addition!
return multiPart;
}
use of org.apache.mailet.base.mail.MimeMultipartReport in project nhin-d by DirectProject.
the class MDNFactory method create.
/**
* Answers a MimeMultipartReport containing a
* Message Delivery Notification as specified by RFC 2298.
*
* @param humanText
* @param reporting_UA_name
* @param reporting_UA_product
* @param original_recipient
* @param final_recipient
* @param original_message_id
* @param disposition
* @param warning
* @param failure
* @param extensions
* @return MimeMultipartReport
* @throws MessagingException
*/
public static MimeMultipartReport create(String humanText, String reporting_UA_name, String reporting_UA_product, String original_recipient, String final_recipient, String original_message_id, String error, MdnGateway gateway, Disposition disposition, String warning, String failure, Collection<String> extensions) throws MessagingException {
if (disposition == null)
throw new IllegalArgumentException("Disposition can not be null.");
// Create the message parts. According to RFC 2298, there are two
// compulsory parts and one optional part...
MimeMultipartReport multiPart = new MimeMultipartReport();
multiPart.setReportType("disposition-notification");
// Part 1: The 'human-readable' part
MimeBodyPart humanPart = new MimeBodyPart();
humanPart.setText(humanText);
multiPart.addBodyPart(humanPart);
// Part 2: MDN Report Part
// 1) reporting-ua-field
StringBuilder mdnReport = new StringBuilder(128);
if (reporting_UA_name != null && !reporting_UA_name.isEmpty()) {
mdnReport.append("Reporting-UA: ");
mdnReport.append((reporting_UA_name == null ? "" : reporting_UA_name));
mdnReport.append("; ");
mdnReport.append((reporting_UA_product == null ? "" : reporting_UA_product));
mdnReport.append("\r\n");
}
// 2) original-recipient-field
if (original_recipient != null && !original_recipient.isEmpty()) {
mdnReport.append("Original-Recipient: ");
mdnReport.append("rfc822; ");
mdnReport.append(original_recipient);
mdnReport.append("\r\n");
}
// 3) final-recipient-field
if (final_recipient != null && !final_recipient.isEmpty()) {
mdnReport.append("Final-Recipient: ");
mdnReport.append("rfc822; ");
mdnReport.append(final_recipient);
mdnReport.append("\r\n");
}
// 4) original-message-id-field
if (original_message_id != null && !original_message_id.isEmpty()) {
mdnReport.append("Original-Message-ID: ");
mdnReport.append(original_message_id);
mdnReport.append("\r\n");
}
// 5) mdn-gateway-field
if (gateway != null) {
mdnReport.append("MDN-Gateway: ");
mdnReport.append(gateway.toString());
mdnReport.append("\r\n");
}
// 6) error-field
if (error != null && !error.isEmpty()) {
mdnReport.append("Error: ");
mdnReport.append(error);
mdnReport.append("\r\n");
}
// 7) warning-field
if (warning != null && !warning.isEmpty()) {
mdnReport.append("Warning: ");
mdnReport.append(warning);
mdnReport.append("\r\n");
}
// 8) failure-field
if (failure != null && !failure.isEmpty()) {
mdnReport.append("Failure: ");
mdnReport.append(failure);
mdnReport.append("\r\n");
}
// 8) extension-fields
if (extensions != null && !extensions.isEmpty()) {
for (String extension : extensions) {
if (!extension.isEmpty()) {
mdnReport.append(extension + (extension.contains(":") ? "" : ": "));
mdnReport.append("\r\n");
}
}
}
mdnReport.append(disposition.toString());
mdnReport.append("\r\n");
MimeBodyPart mdnPart = new MimeBodyPart();
try {
// using a DataSource gets around some of the issues with the JAF dynamically loading content handlers that may not work, speicifically
// the java dsn library and the DispostionNotification class which doesn't know how to handle byte arrays
ByteArrayDataSource dataSource = new ByteArrayDataSource(new ByteArrayInputStream(mdnReport.toString().getBytes()), "message/disposition-notification");
mdnPart.setDataHandler(new DataHandler(dataSource));
multiPart.addBodyPart(mdnPart);
} catch (IOException e) {
/*no-op*/
}
// described in RFC 1892. It would be a useful addition!
return multiPart;
}
use of org.apache.mailet.base.mail.MimeMultipartReport in project nhin-d by DirectProject.
the class MDNFactory_createTest method testCreate_withExtensionNameOnly.
public void testCreate_withExtensionNameOnly() throws Exception {
final Disposition disp = new Disposition(NotificationType.Processed);
final MdnGateway gateway = new MdnGateway("junitGateway");
MimeMultipartReport report = MDNFactory.create("test", "junitUA", "junitProduct", "sender@send.com", "final@final.com", "12345", "", gateway, disp, "", "junit failure", Arrays.asList("X-EXTENSION"));
assertNotNull(report);
final InternetHeaders headers = getNotificationFieldsAsHeaders(report);
assertEquals("", headers.getHeader("X-EXTENSION", ","));
}
use of org.apache.mailet.base.mail.MimeMultipartReport in project nhin-d by DirectProject.
the class MDNFactory_createTest method testCreate_withError.
public void testCreate_withError() throws Exception {
final Disposition disp = new Disposition(NotificationType.Processed);
final MdnGateway gateway = new MdnGateway("junitGateway");
MimeMultipartReport report = MDNFactory.create("test", "junitUA", "junitProduct", "sender@send.com", "final@final.com", "12345", "junit error", gateway, disp, "", "", new ArrayList<String>());
assertNotNull(report);
final InternetHeaders headers = getNotificationFieldsAsHeaders(report);
assertEquals("junit error", headers.getHeader("Error", ","));
}
Aggregations