blob: 0b514b26aa9692dd613dabd7d1368fa19e49e471 [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.jsieve.mailet.mdn;
import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
import org.apache.mailet.base.mail.MimeMultipartReport;
/**
* Class <code>MDNFactory</code> creates MimeMultipartReports containing
* Message Delivery Notifications as specified by RFC 2298.
*/
public class MDNFactory
{
/**
* Default Constructor
*/
private MDNFactory()
{
super();
}
/**
* 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
*/
static public MimeMultipartReport create(String humanText,
String reporting_UA_name,
String reporting_UA_product,
String original_recipient,
String final_recipient,
String original_message_id,
Disposition disposition) throws MessagingException
{
// 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);
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 (null != original_recipient)
{
mdnReport.append("Original-Recipient: ");
mdnReport.append("rfc822; ");
mdnReport.append(original_recipient);
mdnReport.append("\r\n");
}
// 3) final-recipient-field
mdnReport.append("Final-Recepient: ");
mdnReport.append("rfc822; ");
mdnReport.append((final_recipient == null ? "" : final_recipient));
mdnReport.append("\r\n");
// 4) original-message-id-field
mdnReport.append("Original-Message-ID: ");
mdnReport.append((original_message_id == null ? "" : original_message_id));
mdnReport.append("\r\n");
// 5) disposition-field
mdnReport.append(disposition.toString());
mdnReport.append("\r\n");
MimeBodyPart mdnPart = new MimeBodyPart();
mdnPart.setContent(mdnReport.toString(), "message/disposition-notification");
multiPart.addBodyPart(mdnPart);
// Part 3: The optional third part, the original message is omitted.
// We don't want to propogate over-sized, virus infected or
// other undesirable mail!
// There is the option of adding a Text/RFC822-Headers part, which
// includes only the RFC 822 headers of the failed message. This is
// described in RFC 1892. It would be a useful addition!
return multiPart;
}
}