You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ba...@apache.org on 2008/09/27 15:39:57 UTC
svn commit: r699642 - in /james/mailet/standard/trunk/src:
main/java/org/apache/james/transport/mailets/
test/java/org/apache/james/transport/mailets/
Author: bago
Date: Sat Sep 27 06:39:56 2008
New Revision: 699642
URL: http://svn.apache.org/viewvc?rev=699642&view=rev
Log:
Fix formatting for JAMES conventions. Remove non-ascii chars.
Modified:
james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/RecoverAttachment.java
james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
james/mailet/standard/trunk/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
Modified: james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/RecoverAttachment.java
URL: http://svn.apache.org/viewvc/james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/RecoverAttachment.java?rev=699642&r1=699641&r2=699642&view=diff
==============================================================================
--- james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/RecoverAttachment.java (original)
+++ james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/RecoverAttachment.java Sat Sep 27 06:39:56 2008
@@ -18,12 +18,13 @@
/**
* <p>
- * This mailet takes an attachment stored in an attribute and
- * attach it back to the message
+ * This mailet takes an attachment stored in an attribute and attach it back to
+ * the message
* </p>
* <p>
- * This may be used to place back attachment stripped by StripAttachment and stored in the
- * attribute <code>org.apache.james.transport.mailets.StripAttachment.saved</code>
+ * This may be used to place back attachment stripped by StripAttachment and
+ * stored in the attribute
+ * <code>org.apache.james.transport.mailets.StripAttachment.saved</code>
* </p>
* <p>
*
@@ -37,82 +38,88 @@
*/
public class RecoverAttachment extends GenericMailet {
- public static final String ATTRIBUTE_PARAMETER_NAME = "attribute";
- private String attributeName = null;
+ public static final String ATTRIBUTE_PARAMETER_NAME = "attribute";
- /**
- * Checks if the mandatory parameters are present
- *
- * @throws MailetException
- */
- public void init() throws MailetException {
- attributeName = getInitParameter(ATTRIBUTE_PARAMETER_NAME);
-
- if (attributeName == null) {
- throw new MailetException(ATTRIBUTE_PARAMETER_NAME+" is a mandatory parameter");
- }
-
- log("RecoverAttachment is initialised with attribute ["+attributeName+"]");
- }
-
- /**
- * Service the mail: check for the attribute and attach the attachment
- * to the mail.
- *
- * @param mail
- * The mail to service
- * @throws MailetException
- * Thrown when an error situation is encountered.
- */
- public void service(Mail mail) throws MailetException {
- Map attachments = (Map) mail.getAttribute(attributeName);
- if (attachments != null) {
-
- MimeMessage message = null;
- try {
- message = mail.getMessage();
- } catch (MessagingException e) {
- throw new MailetException("Could not retrieve message from Mail object",
- e);
- }
-
- Iterator i = attachments.values().iterator();
- try {
- while (i.hasNext()) {
- byte[] bytes = (byte[]) i.next();
- InputStream is = new BufferedInputStream(new ByteArrayInputStream(bytes));
- MimeBodyPart p = new MimeBodyPart(is);
- if (!(message.isMimeType("multipart/*") && (message.getContent() instanceof MimeMultipart))) {
- Object content = message.getContent();
- String contentType = message.getContentType();
- MimeMultipart mimeMultipart = new MimeMultipart();
- message.setContent(mimeMultipart);
- // This saveChanges is required when the MimeMessage has been created from
- // an InputStream, otherwise it is not saved correctly.
- message.saveChanges();
- mimeMultipart.setParent(message);
- MimeBodyPart bodyPart = new MimeBodyPart();
- mimeMultipart.addBodyPart(bodyPart);
- bodyPart.setContent(content, contentType);
- }
- ((MimeMultipart) message.getContent()).addBodyPart(p);
- }
- message.saveChanges();
- } catch (MessagingException e) {
- log("MessagingException in recoverAttachment", e);
- } catch (IOException e) {
- log("IOException in recoverAttachment", e);
- }
- }
- }
-
- /**
- * returns a String describing this mailet.
- *
- * @return A desciption of this mailet
- */
- public String getMailetInfo() {
- return "RecoverAttachment Mailet";
- }
+ private String attributeName = null;
+
+ /**
+ * Checks if the mandatory parameters are present
+ *
+ * @throws MailetException
+ */
+ public void init() throws MailetException {
+ attributeName = getInitParameter(ATTRIBUTE_PARAMETER_NAME);
+
+ if (attributeName == null) {
+ throw new MailetException(ATTRIBUTE_PARAMETER_NAME
+ + " is a mandatory parameter");
+ }
+
+ log("RecoverAttachment is initialised with attribute [" + attributeName
+ + "]");
+ }
+
+ /**
+ * Service the mail: check for the attribute and attach the attachment to
+ * the mail.
+ *
+ * @param mail
+ * The mail to service
+ * @throws MailetException
+ * Thrown when an error situation is encountered.
+ */
+ public void service(Mail mail) throws MailetException {
+ Map attachments = (Map) mail.getAttribute(attributeName);
+ if (attachments != null) {
+
+ MimeMessage message = null;
+ try {
+ message = mail.getMessage();
+ } catch (MessagingException e) {
+ throw new MailetException(
+ "Could not retrieve message from Mail object", e);
+ }
+
+ Iterator i = attachments.values().iterator();
+ try {
+ while (i.hasNext()) {
+ byte[] bytes = (byte[]) i.next();
+ InputStream is = new BufferedInputStream(
+ new ByteArrayInputStream(bytes));
+ MimeBodyPart p = new MimeBodyPart(is);
+ if (!(message.isMimeType("multipart/*") && (message
+ .getContent() instanceof MimeMultipart))) {
+ Object content = message.getContent();
+ String contentType = message.getContentType();
+ MimeMultipart mimeMultipart = new MimeMultipart();
+ message.setContent(mimeMultipart);
+ // This saveChanges is required when the MimeMessage has
+ // been created from
+ // an InputStream, otherwise it is not saved correctly.
+ message.saveChanges();
+ mimeMultipart.setParent(message);
+ MimeBodyPart bodyPart = new MimeBodyPart();
+ mimeMultipart.addBodyPart(bodyPart);
+ bodyPart.setContent(content, contentType);
+ }
+ ((MimeMultipart) message.getContent()).addBodyPart(p);
+ }
+ message.saveChanges();
+ } catch (MessagingException e) {
+ log("MessagingException in recoverAttachment", e);
+ } catch (IOException e) {
+ log("IOException in recoverAttachment", e);
+ }
+ }
+ }
+
+ /**
+ * returns a String describing this mailet.
+ *
+ * @return A desciption of this mailet
+ */
+ public String getMailetInfo() {
+ return "RecoverAttachment Mailet";
+ }
}
Modified: james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
URL: http://svn.apache.org/viewvc/james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/StripAttachment.java?rev=699642&r1=699641&r2=699642&view=diff
==============================================================================
--- james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/StripAttachment.java (original)
+++ james/mailet/standard/trunk/src/main/java/org/apache/james/transport/mailets/StripAttachment.java Sat Sep 27 06:39:56 2008
@@ -27,8 +27,8 @@
/**
* <p>
- * Remove attachments from a Message.
- * Supports simple removal, storing to file, or storing to mail attributes.
+ * Remove attachments from a Message. Supports simple removal, storing to file,
+ * or storing to mail attributes.
* </p>
* <p>
* Configuration:
@@ -49,318 +49,365 @@
*/
public class StripAttachment extends GenericMailet {
- public static final String PATTERN_PARAMETER_NAME = "pattern";
- public static final String NOTPATTERN_PARAMETER_NAME = "notpattern";
- public static final String ATTRIBUTE_PARAMETER_NAME = "attribute";
- public static final String DIRECTORY_PARAMETER_NAME = "directory";
- public static final String REMOVE_ATTACHMENT_PARAMETER_NAME = "remove"; // either "no", "matched", "all"
- public static final String DECODE_FILENAME_PARAMETER_NAME = "decodeFilename"; // either "true", "false"
- public static final String REPLACE_FILENAME_PATTERN_PARAMETER_NAME = "replaceFilenamePattern";
- public static final String REMOVE_NONE = "no";
- public static final String REMOVE_ALL = "all";
- public static final String REMOVE_MATCHED = "matched";
- public static final String REMOVED_ATTACHMENTS_ATTRIBUTE_KEY = "org.apache.james.transport.mailets.StripAttachment.removed";
- public static final String SAVED_ATTACHMENTS_ATTRIBUTE_KEY = "org.apache.james.transport.mailets.StripAttachment.saved";
-
- private String patternString = null;
- private String notpatternString = null;
- private String removeAttachments = null;
- private String directoryName = null;
- private String attributeName = null;
- private Pattern regExPattern = null;
- private Pattern notregExPattern = null;
-
- private boolean decodeFilename = false;
- private Pattern[] replaceFilenamePatterns = null;
- private String[] replaceFilenameSubstitutions = null;
- private Integer[] replaceFilenameFlags = null;
-
- private static boolean getBooleanParameter(String v, boolean def) {
- return def ?
- !(v != null && (v.equalsIgnoreCase("false") || v.equalsIgnoreCase("no"))) :
- v != null && (v.equalsIgnoreCase("true") || v.equalsIgnoreCase("yes")) ;
- }
-
- /**
- * Checks if the mandatory parameters are present, creates the directory to
- * save the files ni (if not present).
- *
- * @throws MailetException
- */
- public void init() throws MailetException {
- patternString = getInitParameter(PATTERN_PARAMETER_NAME);
- notpatternString = getInitParameter(NOTPATTERN_PARAMETER_NAME);
- if (patternString == null && notpatternString == null) {
- throw new MailetException("No value for " + PATTERN_PARAMETER_NAME
- + " parameter was provided.");
- }
-
- directoryName = getInitParameter(DIRECTORY_PARAMETER_NAME);
- attributeName = getInitParameter(ATTRIBUTE_PARAMETER_NAME);
-
- removeAttachments = getInitParameter(REMOVE_ATTACHMENT_PARAMETER_NAME,
- REMOVE_NONE).toLowerCase();
- if (!REMOVE_MATCHED.equals(removeAttachments)
- && !REMOVE_ALL.equals(removeAttachments)) {
- removeAttachments = REMOVE_NONE;
- }
-
- try {
- //if (patternString != null) regExPattern = new Perl5Compiler().compile(patternString);
- if (patternString != null) regExPattern = Pattern.compile(patternString);
- } catch (Exception e) {
- throw new MailetException("Could not compile regex [" + patternString + "].");
- }
- try {
- //if (notpatternString != null) notregExPattern = new Perl5Compiler().compile(notpatternString);
- if (notpatternString != null) notregExPattern = Pattern.compile(notpatternString);
- } catch (Exception e) {
- throw new MailetException("Could not compile regex [" + notpatternString + "].");
- }
-
- if (directoryName != null) {
- try {
- File saveDirectory = null;
- saveDirectory = new File(directoryName);
- if (!saveDirectory.exists()) {
- saveDirectory.mkdirs();
- }
- } catch (Exception e) {
- throw new MailetException("Could not create directory ["
- + directoryName + "].", e);
- }
- }
-
- decodeFilename = getBooleanParameter(getInitParameter(DECODE_FILENAME_PARAMETER_NAME), decodeFilename);
- if (getInitParameter(REPLACE_FILENAME_PATTERN_PARAMETER_NAME) != null) {
- List[] pl = ReplaceContent.getPatternsFromString(getInitParameter(REPLACE_FILENAME_PATTERN_PARAMETER_NAME));
- replaceFilenamePatterns = (Pattern[]) pl[0].toArray(new Pattern[0]);
- replaceFilenameSubstitutions = (String[]) pl[1].toArray(new String[0]);
- replaceFilenameFlags = (Integer[]) pl[2].toArray(new Integer[0]);
- }
-
- String toLog = "StripAttachment is initialised with regex pattern ["
- + patternString + " / " + notpatternString + "]";
- if (directoryName != null) {
- toLog += " and will save to directory [" + directoryName + "]";
- }
- if (attributeName != null) {
- toLog += " and will store attachments to attribute [" + attributeName + "]";
- }
- log(toLog);
- }
-
- /**
- * Service the mail: scan it for attchemnts matching the pattern, store the
- * content of a matchin attachment in the given directory.
- *
- * @param mail
- * The mail to service
- * @throws MailetException
- * Thrown when an error situation is encountered.
- */
- public void service(Mail mail) throws MailetException {
- MimeMessage message = null;
- try {
- message = mail.getMessage();
- } catch (MessagingException e) {
- throw new MailetException("Could not retrieve message from Mail object",
- e);
- }
- // All MIME messages with an attachment are multipart, so we do nothing if
- // it is not mutlipart
- try {
- if (message.isMimeType("multipart/*")) {
- analyseMultipartPartMessage(message, mail);
- }
- } catch (MessagingException e) {
- throw new MailetException("Could not retrieve contenttype of message.", e);
- } catch (Exception e) {
- throw new MailetException("Could not analyse message.", e);
- }
- }
-
- /**
- * returns a String describing this mailet.
- *
- * @return A desciption of this mailet
- */
- public String getMailetInfo() {
- return "StripAttachment";
- }
-
- /**
- * Checks every part in this part (if it is a Multipart) for having a filename
- * that matches the pattern. If the name matches, the content of the part is
- * stored (using its name) in te given diretcory.
- *
- * Note: this method is recursive.
- *
- * @param part
- * The part to analyse.
- * @param mail
- * @return
- * @throws Exception
- */
- private boolean analyseMultipartPartMessage(Part part, Mail mail)
- throws Exception {
- if (part.isMimeType("multipart/*")) {
- try {
- Multipart multipart = (Multipart) part.getContent();
- boolean atLeastOneRemoved = false;
- int numParts = multipart.getCount();
- for (int i = 0; i < numParts; i++) {
- Part p = multipart.getBodyPart(i);
- if (p.isMimeType("multipart/*")) {
- atLeastOneRemoved |= analyseMultipartPartMessage(p, mail);
- } else {
- boolean removed = checkMessageRemoved(p, mail);
- if (removed) {
- multipart.removeBodyPart(i);
- atLeastOneRemoved = true;
- i--;
- numParts--;
- }
- }
- }
- if (atLeastOneRemoved) {
- part.setContent(multipart);
- if (part instanceof Message) {
- ((Message) part).saveChanges();
- }
- }
- return atLeastOneRemoved;
- } catch (Exception e) {
- log("Could not analyse part.", e);
- }
- }
- return false;
- }
-
- private boolean checkMessageRemoved(Part part, Mail mail)
- throws MessagingException, Exception {
- String fileName = null;
- fileName = part.getFileName();
-
- // filename or name of part can be null, so we have to be careful
-
- boolean ret = false;
-
- if (fileName != null) {
- if (decodeFilename) fileName = MimeUtility.decodeText(fileName);
-
- if (replaceFilenamePatterns != null)
- fileName = ReplaceContent.applyPatterns(replaceFilenamePatterns, replaceFilenameSubstitutions, replaceFilenameFlags, fileName, 0, this);
-
- if (fileNameMatches(fileName)) {
- if (directoryName != null) {
- String filename = saveAttachmentToFile(part, fileName);
- if (filename != null) {
- Collection c = (Collection) mail
- .getAttribute(SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
- if (c == null) {
- c = new ArrayList();
- mail.setAttribute(SAVED_ATTACHMENTS_ATTRIBUTE_KEY,(ArrayList) c);
- }
- c.add(filename);
- }
- }
- if (attributeName != null) {
- Map m = (Map) mail.getAttribute(attributeName);
- if (m == null) {
- m = new LinkedHashMap();
- mail.setAttribute(attributeName, (LinkedHashMap) m);
- }
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- OutputStream os = new BufferedOutputStream(byteArrayOutputStream);
- part.writeTo(os);
- m.put(fileName, byteArrayOutputStream.toByteArray());
- }
- if (removeAttachments.equals(REMOVE_MATCHED)) {
- ret = true;
- }
- }
- if (!ret) {
- ret = removeAttachments.equals(REMOVE_ALL);
- }
- if (ret) {
- Collection c = (Collection) mail
- .getAttribute(REMOVED_ATTACHMENTS_ATTRIBUTE_KEY);
- if (c == null) {
- c = new ArrayList();
- mail.setAttribute(REMOVED_ATTACHMENTS_ATTRIBUTE_KEY,(ArrayList) c);
- }
- c.add(fileName);
- }
- }
- return ret;
- }
-
- /**
- * Checks if the given name matches the pattern.
- *
- * @param name
- * The name to check for a match.
- * @return True if a match is found, false otherwise.
- */
- private boolean fileNameMatches(String name) {
- boolean result = true;
- if (regExPattern != null)
- result = regExPattern.matcher(name).matches();
- if (result && notregExPattern != null)
- result = !notregExPattern.matcher(name).matches();
-
- String log = "attachment "+name+" ";
- if (!result) log += "does not match";
- else log += "matches";
- log(log);
- return result;
- }
-
- /**
- * Saves the content of the part to a file in the given directoy, using the
- * name of the part. If a file with that name already exists, it will
- *
- * @param part
- * The MIME part to save.
- * @return
- * @throws Exception
- */
- private String saveAttachmentToFile(Part part, String fileName) throws Exception {
- BufferedOutputStream os = null;
- InputStream is = null;
- File f = null;
- try {
- if (fileName == null) fileName = part.getFileName();
- int pos = -1;
- if (fileName != null) {
- pos = fileName.lastIndexOf(".");
- }
- String prefix = pos > 0 ? (fileName.substring(0, pos)) : fileName;
- String suffix = pos > 0 ? (fileName.substring(pos)) : ".bin";
- while (prefix.length() < 3) prefix += "_";
- if (suffix.length() == 0) suffix = ".bin";
- f = File.createTempFile(prefix,suffix,new File(directoryName));
- log("saving content of " + f.getName() + "...");
- os = new BufferedOutputStream(new FileOutputStream(f));
- is = part.getInputStream();
- if (!(is instanceof BufferedInputStream)) {
- is = new BufferedInputStream(is);
- }
- int c;
- while ((c = is.read()) != -1) {
- os.write(c);
- }
-
- return f.getName();
- } catch (Exception e) {
- log("Error while saving contents of ["
- + (f != null ? f.getName() : (part != null ? part.getFileName() : "NULL")) + "].", e);
- throw e;
- } finally {
- is.close();
- os.close();
- }
- }
+ public static final String PATTERN_PARAMETER_NAME = "pattern";
+
+ public static final String NOTPATTERN_PARAMETER_NAME = "notpattern";
+
+ public static final String ATTRIBUTE_PARAMETER_NAME = "attribute";
+
+ public static final String DIRECTORY_PARAMETER_NAME = "directory";
+
+ // Either "no", "matched", "all"
+ public static final String REMOVE_ATTACHMENT_PARAMETER_NAME = "remove";
+
+ // Either "true", "false"
+ public static final String DECODE_FILENAME_PARAMETER_NAME = "decodeFilename";
+
+ public static final String REPLACE_FILENAME_PATTERN_PARAMETER_NAME = "replaceFilenamePattern";
+
+ public static final String REMOVE_NONE = "no";
+
+ public static final String REMOVE_ALL = "all";
+
+ public static final String REMOVE_MATCHED = "matched";
+
+ public static final String REMOVED_ATTACHMENTS_ATTRIBUTE_KEY = "org.apache.james.transport.mailets.StripAttachment.removed";
+
+ public static final String SAVED_ATTACHMENTS_ATTRIBUTE_KEY = "org.apache.james.transport.mailets.StripAttachment.saved";
+
+ private String patternString = null;
+
+ private String notpatternString = null;
+
+ private String removeAttachments = null;
+
+ private String directoryName = null;
+
+ private String attributeName = null;
+
+ private Pattern regExPattern = null;
+
+ private Pattern notregExPattern = null;
+
+ private boolean decodeFilename = false;
+
+ private Pattern[] replaceFilenamePatterns = null;
+
+ private String[] replaceFilenameSubstitutions = null;
+
+ private Integer[] replaceFilenameFlags = null;
+
+ private static boolean getBooleanParameter(String v, boolean def) {
+ return def ? !(v != null && (v.equalsIgnoreCase("false") || v
+ .equalsIgnoreCase("no"))) : v != null
+ && (v.equalsIgnoreCase("true") || v.equalsIgnoreCase("yes"));
+ }
+
+ /**
+ * Checks if the mandatory parameters are present, creates the directory to
+ * save the files ni (if not present).
+ *
+ * @throws MailetException
+ */
+ public void init() throws MailetException {
+ patternString = getInitParameter(PATTERN_PARAMETER_NAME);
+ notpatternString = getInitParameter(NOTPATTERN_PARAMETER_NAME);
+ if (patternString == null && notpatternString == null) {
+ throw new MailetException("No value for " + PATTERN_PARAMETER_NAME
+ + " parameter was provided.");
+ }
+
+ directoryName = getInitParameter(DIRECTORY_PARAMETER_NAME);
+ attributeName = getInitParameter(ATTRIBUTE_PARAMETER_NAME);
+
+ removeAttachments = getInitParameter(REMOVE_ATTACHMENT_PARAMETER_NAME,
+ REMOVE_NONE).toLowerCase();
+ if (!REMOVE_MATCHED.equals(removeAttachments)
+ && !REMOVE_ALL.equals(removeAttachments)) {
+ removeAttachments = REMOVE_NONE;
+ }
+
+ try {
+ // if (patternString != null) regExPattern = new
+ // Perl5Compiler().compile(patternString);
+ if (patternString != null)
+ regExPattern = Pattern.compile(patternString);
+ } catch (Exception e) {
+ throw new MailetException("Could not compile regex ["
+ + patternString + "].");
+ }
+ try {
+ // if (notpatternString != null) notregExPattern = new
+ // Perl5Compiler().compile(notpatternString);
+ if (notpatternString != null)
+ notregExPattern = Pattern.compile(notpatternString);
+ } catch (Exception e) {
+ throw new MailetException("Could not compile regex ["
+ + notpatternString + "].");
+ }
+
+ if (directoryName != null) {
+ try {
+ File saveDirectory = null;
+ saveDirectory = new File(directoryName);
+ if (!saveDirectory.exists()) {
+ saveDirectory.mkdirs();
+ }
+ } catch (Exception e) {
+ throw new MailetException("Could not create directory ["
+ + directoryName + "].", e);
+ }
+ }
+
+ decodeFilename = getBooleanParameter(
+ getInitParameter(DECODE_FILENAME_PARAMETER_NAME),
+ decodeFilename);
+ if (getInitParameter(REPLACE_FILENAME_PATTERN_PARAMETER_NAME) != null) {
+ List[] pl = ReplaceContent
+ .getPatternsFromString(getInitParameter(REPLACE_FILENAME_PATTERN_PARAMETER_NAME));
+ replaceFilenamePatterns = (Pattern[]) pl[0].toArray(new Pattern[0]);
+ replaceFilenameSubstitutions = (String[]) pl[1]
+ .toArray(new String[0]);
+ replaceFilenameFlags = (Integer[]) pl[2].toArray(new Integer[0]);
+ }
+
+ String toLog = "StripAttachment is initialised with regex pattern ["
+ + patternString + " / " + notpatternString + "]";
+ if (directoryName != null) {
+ toLog += " and will save to directory [" + directoryName + "]";
+ }
+ if (attributeName != null) {
+ toLog += " and will store attachments to attribute ["
+ + attributeName + "]";
+ }
+ log(toLog);
+ }
+
+ /**
+ * Service the mail: scan it for attchemnts matching the pattern, store the
+ * content of a matchin attachment in the given directory.
+ *
+ * @param mail
+ * The mail to service
+ * @throws MailetException
+ * Thrown when an error situation is encountered.
+ */
+ public void service(Mail mail) throws MailetException {
+ MimeMessage message = null;
+ try {
+ message = mail.getMessage();
+ } catch (MessagingException e) {
+ throw new MailetException(
+ "Could not retrieve message from Mail object", e);
+ }
+ // All MIME messages with an attachment are multipart, so we do nothing
+ // if it is not mutlipart
+ try {
+ if (message.isMimeType("multipart/*")) {
+ analyseMultipartPartMessage(message, mail);
+ }
+ } catch (MessagingException e) {
+ throw new MailetException(
+ "Could not retrieve contenttype of message.", e);
+ } catch (Exception e) {
+ throw new MailetException("Could not analyse message.", e);
+ }
+ }
+
+ /**
+ * returns a String describing this mailet.
+ *
+ * @return A desciption of this mailet
+ */
+ public String getMailetInfo() {
+ return "StripAttachment";
+ }
+
+ /**
+ * Checks every part in this part (if it is a Multipart) for having a
+ * filename that matches the pattern. If the name matches, the content of
+ * the part is stored (using its name) in te given diretcory.
+ *
+ * Note: this method is recursive.
+ *
+ * @param part
+ * The part to analyse.
+ * @param mail
+ * @return
+ * @throws Exception
+ */
+ private boolean analyseMultipartPartMessage(Part part, Mail mail)
+ throws Exception {
+ if (part.isMimeType("multipart/*")) {
+ try {
+ Multipart multipart = (Multipart) part.getContent();
+ boolean atLeastOneRemoved = false;
+ int numParts = multipart.getCount();
+ for (int i = 0; i < numParts; i++) {
+ Part p = multipart.getBodyPart(i);
+ if (p.isMimeType("multipart/*")) {
+ atLeastOneRemoved |= analyseMultipartPartMessage(p,
+ mail);
+ } else {
+ boolean removed = checkMessageRemoved(p, mail);
+ if (removed) {
+ multipart.removeBodyPart(i);
+ atLeastOneRemoved = true;
+ i--;
+ numParts--;
+ }
+ }
+ }
+ if (atLeastOneRemoved) {
+ part.setContent(multipart);
+ if (part instanceof Message) {
+ ((Message) part).saveChanges();
+ }
+ }
+ return atLeastOneRemoved;
+ } catch (Exception e) {
+ log("Could not analyse part.", e);
+ }
+ }
+ return false;
+ }
+
+ private boolean checkMessageRemoved(Part part, Mail mail)
+ throws MessagingException, Exception {
+ String fileName = null;
+ fileName = part.getFileName();
+
+ // filename or name of part can be null, so we have to be careful
+ boolean ret = false;
+
+ if (fileName != null) {
+ if (decodeFilename)
+ fileName = MimeUtility.decodeText(fileName);
+
+ if (replaceFilenamePatterns != null)
+ fileName = ReplaceContent.applyPatterns(
+ replaceFilenamePatterns, replaceFilenameSubstitutions,
+ replaceFilenameFlags, fileName, 0, this);
+
+ if (fileNameMatches(fileName)) {
+ if (directoryName != null) {
+ String filename = saveAttachmentToFile(part, fileName);
+ if (filename != null) {
+ Collection c = (Collection) mail
+ .getAttribute(SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
+ if (c == null) {
+ c = new ArrayList();
+ mail.setAttribute(SAVED_ATTACHMENTS_ATTRIBUTE_KEY,
+ (ArrayList) c);
+ }
+ c.add(filename);
+ }
+ }
+ if (attributeName != null) {
+ Map m = (Map) mail.getAttribute(attributeName);
+ if (m == null) {
+ m = new LinkedHashMap();
+ mail.setAttribute(attributeName, (LinkedHashMap) m);
+ }
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ OutputStream os = new BufferedOutputStream(
+ byteArrayOutputStream);
+ part.writeTo(os);
+ m.put(fileName, byteArrayOutputStream.toByteArray());
+ }
+ if (removeAttachments.equals(REMOVE_MATCHED)) {
+ ret = true;
+ }
+ }
+ if (!ret) {
+ ret = removeAttachments.equals(REMOVE_ALL);
+ }
+ if (ret) {
+ Collection c = (Collection) mail
+ .getAttribute(REMOVED_ATTACHMENTS_ATTRIBUTE_KEY);
+ if (c == null) {
+ c = new ArrayList();
+ mail.setAttribute(REMOVED_ATTACHMENTS_ATTRIBUTE_KEY,
+ (ArrayList) c);
+ }
+ c.add(fileName);
+ }
+ }
+ return ret;
+ }
+
+ /**
+ * Checks if the given name matches the pattern.
+ *
+ * @param name
+ * The name to check for a match.
+ * @return True if a match is found, false otherwise.
+ */
+ private boolean fileNameMatches(String name) {
+ boolean result = true;
+ if (regExPattern != null)
+ result = regExPattern.matcher(name).matches();
+ if (result && notregExPattern != null)
+ result = !notregExPattern.matcher(name).matches();
+
+ String log = "attachment " + name + " ";
+ if (!result)
+ log += "does not match";
+ else
+ log += "matches";
+ log(log);
+ return result;
+ }
+
+ /**
+ * Saves the content of the part to a file in the given directoy, using the
+ * name of the part. If a file with that name already exists, it will
+ *
+ * @param part
+ * The MIME part to save.
+ * @return
+ * @throws Exception
+ */
+ private String saveAttachmentToFile(Part part, String fileName)
+ throws Exception {
+ BufferedOutputStream os = null;
+ InputStream is = null;
+ File f = null;
+ try {
+ if (fileName == null)
+ fileName = part.getFileName();
+ int pos = -1;
+ if (fileName != null) {
+ pos = fileName.lastIndexOf(".");
+ }
+ String prefix = pos > 0 ? (fileName.substring(0, pos)) : fileName;
+ String suffix = pos > 0 ? (fileName.substring(pos)) : ".bin";
+ while (prefix.length() < 3)
+ prefix += "_";
+ if (suffix.length() == 0)
+ suffix = ".bin";
+ f = File.createTempFile(prefix, suffix, new File(directoryName));
+ log("saving content of " + f.getName() + "...");
+ os = new BufferedOutputStream(new FileOutputStream(f));
+ is = part.getInputStream();
+ if (!(is instanceof BufferedInputStream)) {
+ is = new BufferedInputStream(is);
+ }
+ int c;
+ while ((c = is.read()) != -1) {
+ os.write(c);
+ }
+
+ return f.getName();
+ } catch (Exception e) {
+ log("Error while saving contents of ["
+ + (f != null ? f.getName() : (part != null ? part
+ .getFileName() : "NULL")) + "].", e);
+ throw e;
+ } finally {
+ is.close();
+ os.close();
+ }
+ }
}
Modified: james/mailet/standard/trunk/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
URL: http://svn.apache.org/viewvc/james/mailet/standard/trunk/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java?rev=699642&r1=699641&r2=699642&view=diff
==============================================================================
--- james/mailet/standard/trunk/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java (original)
+++ james/mailet/standard/trunk/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java Sat Sep 27 06:39:56 2008
@@ -26,289 +26,311 @@
public class StripAttachmentTest extends TestCase {
- public void testNoAttachment() {
+ public void testNoAttachment() {
- }
+ }
+
+ public void testSimpleAttachment() throws MessagingException, IOException {
+ Mailet mailet = initMailet();
+
+ MimeMessage message = new MimeMessage(Session
+ .getDefaultInstance(new Properties()));
+
+ MimeMultipart mm = new MimeMultipart();
+ MimeBodyPart mp = new MimeBodyPart();
+ mp.setText("simple text");
+ mm.addBodyPart(mp);
+ String body = "\u0023\u00A4\u00E3\u00E0\u00E9";
+ MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body).getBytes()));
+ mp2.setDisposition("attachment");
+ mp2.setFileName("10.tmp");
+ mm.addBodyPart(mp2);
+ String body2 = "\u0014\u00A3\u00E1\u00E2\u00E4";
+ MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body2).getBytes()));
+ mp3.setDisposition("attachment");
+ mp3.setFileName("temp.zip");
+ mm.addBodyPart(mp3);
+ message.setSubject("test");
+ message.setContent(mm);
+ message.saveChanges();
+
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ mailet.service(mail);
+
+ ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
+ mail.getMessage().writeTo(rawMessage,
+ new String[] { "Bcc", "Content-Length", "Message-ID" });
+ String res = rawMessage.toString();
+
+ System.out.println(res);
+
+ Collection c = (Collection) mail
+ .getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
+ assertNotNull(c);
+
+ assertEquals(1, c.size());
+
+ String name = (String) c.iterator().next();
+
+ File f = new File("c:/" + name);
+ InputStream is = new FileInputStream(f);
+ String savedFile = toString(is);
+ is.close();
+ assertEquals(body, savedFile);
+
+ f.delete();
+
+ }
+
+ public String toString(final InputStream is) throws IOException {
+ final ByteArrayOutputStream sw = new ByteArrayOutputStream();
+ final byte[] buffer = new byte[1024];
+ int n = 0;
+ while (-1 != (n = is.read(buffer))) {
+ sw.write(buffer, 0, n);
+ }
+ return sw.toString();
+ }
+
+ public void testSimpleAttachment2() throws MessagingException, IOException {
+ Mailet mailet = new StripAttachment();
+
+ MockMailetConfig mci = new MockMailetConfig("Test",
+ new MockMailContext());
+ mci.setProperty("directory", "c:/");
+ mci.setProperty("remove", "all");
+ mci.setProperty("notpattern", "^(winmail\\.dat$)");
+ mailet.init(mci);
+
+ MimeMessage message = new MimeMessage(Session
+ .getDefaultInstance(new Properties()));
+
+ MimeMultipart mm = new MimeMultipart();
+ MimeBodyPart mp = new MimeBodyPart();
+ mp.setText("simple text");
+ mm.addBodyPart(mp);
+ String body = "\u0023\u00A4\u00E3\u00E0\u00E9";
+ MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body).getBytes()));
+ mp2.setDisposition("attachment");
+ mp2.setFileName("temp.tmp");
+ mm.addBodyPart(mp2);
+ String body2 = "\u0014\u00A3\u00E1\u00E2\u00E4";
+ MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body2).getBytes()));
+ mp3.setDisposition("attachment");
+ mp3.setFileName("winmail.dat");
+ mm.addBodyPart(mp3);
+ message.setSubject("test");
+ message.setContent(mm);
+ message.saveChanges();
+
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ mailet.service(mail);
+
+ ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
+ mail.getMessage().writeTo(rawMessage,
+ new String[] { "Bcc", "Content-Length", "Message-ID" });
+ String res = rawMessage.toString();
+
+ System.out.println(res);
+
+ Collection c = (Collection) mail
+ .getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
+ assertNotNull(c);
+
+ assertEquals(1, c.size());
+
+ String name = (String) c.iterator().next();
+
+ File f = new File("c:/" + name);
+ InputStream is = new FileInputStream(f);
+ String savedFile = IOUtil.toString(is);
+ is.close();
+ assertEquals(body, savedFile);
+
+ f.delete();
- public void testSimpleAttachment() throws MessagingException, IOException {
- Mailet mailet = initMailet();
+ }
+
+ public void testSimpleAttachment3() throws MessagingException, IOException {
+ Mailet mailet = initMailet();
+
+ // System.setProperty("mail.mime.decodefilename", "true");
+
+ MimeMessage message = new MimeMessage(Session
+ .getDefaultInstance(new Properties()));
+
+ MimeMultipart mm = new MimeMultipart();
+ MimeBodyPart mp = new MimeBodyPart();
+ mp.setText("simple text");
+ mm.addBodyPart(mp);
+ String body = "\u0023\u00A4\u00E3\u00E0\u00E9";
+ MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body).getBytes()));
+ mp2.setDisposition("attachment");
+ mp2
+ .setFileName("=?iso-8859-15?Q?=E9_++++Pubblicit=E0_=E9_vietata____Milano9052.tmp?=");
+ mm.addBodyPart(mp2);
+ String body2 = "\u0014\u00A3\u00E1\u00E2\u00E4";
+ MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body2).getBytes()));
+ mp3.setDisposition("attachment");
+ mp3.setFileName("temp.zip");
+ mm.addBodyPart(mp3);
+ message.setSubject("test");
+ message.setContent(mm);
+ message.saveChanges();
+
+ // message.writeTo(System.out);
+ // System.out.println("--------------------------\n\n\n");
+
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ mailet.service(mail);
+
+ ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
+ mail.getMessage().writeTo(rawMessage,
+ new String[] { "Bcc", "Content-Length", "Message-ID" });
+ String res = rawMessage.toString();
+
+ System.out.println(res);
+
+ Collection c = (Collection) mail
+ .getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
+ assertNotNull(c);
+
+ assertEquals(1, c.size());
+
+ String name = (String) c.iterator().next();
+ // System.out.println("--------------------------\n\n\n");
+ // System.out.println(name);
+
+ assertTrue(name.startsWith("e_Pubblicita_e_vietata_Milano9052"));
+
+ File f = new File("c:/" + name);
+ InputStream is = new FileInputStream(f);
+ String savedFile = IOUtil.toString(is);
+ is.close();
+ assertEquals(body, savedFile);
+
+ f.delete();
- MimeMessage message = new MimeMessage(Session
- .getDefaultInstance(new Properties()));
-
- MimeMultipart mm = new MimeMultipart();
- MimeBodyPart mp = new MimeBodyPart();
- mp.setText("simple text");
- mm.addBodyPart(mp);
- String body = "ùàòòùàòùàòùàòùàòù";
- MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body).getBytes()));
- mp2.setDisposition("attachment");
- mp2.setFileName("10.tmp");
- mm.addBodyPart(mp2);
- String body2 = "dglkjhdfòlgkj";
- MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body2).getBytes()));
- mp3.setDisposition("attachment");
- mp3.setFileName("temp.zip");
- mm.addBodyPart(mp3);
- message.setSubject("test");
- message.setContent(mm);
- message.saveChanges();
-
- Mail mail = new MockMail();
- mail.setMessage(message);
-
- mailet.service(mail);
-
- ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
- mail.getMessage().writeTo(rawMessage,
- new String[] { "Bcc", "Content-Length", "Message-ID" });
- String res = rawMessage.toString();
-
- System.out.println(res);
-
- Collection c = (Collection) mail.getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
- assertNotNull(c);
-
- assertEquals(1,c.size());
-
- String name = (String) c.iterator().next();
-
- File f = new File("c:/"+name);
- InputStream is = new FileInputStream(f);
- String savedFile = toString(is);
- is.close();
- assertEquals(body,savedFile);
-
- f.delete();
-
- }
-
- public String toString( final InputStream is ) throws IOException {
- final ByteArrayOutputStream sw = new ByteArrayOutputStream();
- final byte[] buffer = new byte[1024];
- int n = 0;
- while (-1 != (n = is.read(buffer))) {
- sw.write( buffer, 0, n );
}
- return sw.toString();
- }
- public void testSimpleAttachment2() throws MessagingException, IOException {
- Mailet mailet = new StripAttachment();
+ public void testToAndFromAttributes() throws MessagingException,
+ IOException {
+ Mailet strip = new StripAttachment();
+ MockMailetConfig mci = new MockMailetConfig("Test",
+ new MockMailContext());
+ mci.setProperty("attribute", "my.attribute");
+ mci.setProperty("remove", "all");
+ mci.setProperty("notpattern", ".*\\.tmp.*");
+ strip.init(mci);
+
+ Mailet recover = new RecoverAttachment();
+ MockMailetConfig mci2 = new MockMailetConfig("Test",
+ new MockMailContext());
+ mci2.setProperty("attribute", "my.attribute");
+ recover.init(mci2);
+
+ Mailet onlyText = new OnlyText();
+ onlyText.init(new MockMailetConfig("Test", new MockMailContext()));
+
+ MimeMessage message = new MimeMessage(Session
+ .getDefaultInstance(new Properties()));
+
+ MimeMultipart mm = new MimeMultipart();
+ MimeBodyPart mp = new MimeBodyPart();
+ mp.setText("simple text");
+ mm.addBodyPart(mp);
+ String body = "\u0023\u00A4\u00E3\u00E0\u00E9";
+ MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body).getBytes()));
+ mp2.setDisposition("attachment");
+ mp2
+ .setFileName("=?iso-8859-15?Q?=E9_++++Pubblicit=E0_=E9_vietata____Milano9052.tmp?=");
+ mm.addBodyPart(mp2);
+ String body2 = "\u0014\u00A3\u00E1\u00E2\u00E4";
+ MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(
+ ("Content-Transfer-Encoding: 8bit\r\n\r\n" + body2).getBytes()));
+ mp3.setDisposition("attachment");
+ mp3.setFileName("temp.zip");
+ mm.addBodyPart(mp3);
+ message.setSubject("test");
+ message.setContent(mm);
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ assertTrue(mail.getMessage().getContent() instanceof MimeMultipart);
+ assertEquals(3, ((MimeMultipart) mail.getMessage().getContent())
+ .getCount());
+
+ strip.service(mail);
+
+ assertTrue(mail.getMessage().getContent() instanceof MimeMultipart);
+ assertEquals(1, ((MimeMultipart) mail.getMessage().getContent())
+ .getCount());
+
+ onlyText.service(mail);
+
+ assertFalse(mail.getMessage().getContent() instanceof MimeMultipart);
+
+ // prova per caricare il mime message da input stream che altrimenti
+ // javamail si comporta differentemente.
+ String mimeSource = "Message-ID: <26...@bagovista>\r\nSubject: test\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=us-ascii\r\nContent-Transfer-Encoding: 7bit\r\n\r\nsimple text";
+
+ MimeMessage mmNew = new MimeMessage(Session
+ .getDefaultInstance(new Properties()),
+ new ByteArrayInputStream(mimeSource.getBytes()));
+
+ mmNew.writeTo(System.out);
+
+ recover.service(mail);
+
+ assertTrue(mail.getMessage().getContent() instanceof MimeMultipart);
+ assertEquals(2, ((MimeMultipart) mail.getMessage().getContent())
+ .getCount());
- MockMailetConfig mci = new MockMailetConfig("Test",new MockMailContext());
- mci.setProperty("directory","c:/");
- mci.setProperty("remove","all");
- mci.setProperty("notpattern","^(winmail\\.dat$)");
- mailet.init(mci);
-
- MimeMessage message = new MimeMessage(Session
- .getDefaultInstance(new Properties()));
-
- MimeMultipart mm = new MimeMultipart();
- MimeBodyPart mp = new MimeBodyPart();
- mp.setText("simple text");
- mm.addBodyPart(mp);
- String body = "ùàòòùàòùàòùàòùàòù";
- MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body).getBytes()));
- mp2.setDisposition("attachment");
- mp2.setFileName("temp.tmp");
- mm.addBodyPart(mp2);
- String body2 = "dglkjhdfòlgkj";
- MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body2).getBytes()));
- mp3.setDisposition("attachment");
- mp3.setFileName("winmail.dat");
- mm.addBodyPart(mp3);
- message.setSubject("test");
- message.setContent(mm);
- message.saveChanges();
-
- Mail mail = new MockMail();
- mail.setMessage(message);
-
- mailet.service(mail);
-
- ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
- mail.getMessage().writeTo(rawMessage,
- new String[] { "Bcc", "Content-Length", "Message-ID" });
- String res = rawMessage.toString();
-
- System.out.println(res);
-
- Collection c = (Collection) mail.getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
- assertNotNull(c);
-
- assertEquals(1,c.size());
-
- String name = (String) c.iterator().next();
-
- File f = new File("c:/"+name);
- InputStream is = new FileInputStream(f);
- String savedFile = IOUtil.toString(is);
- is.close();
- assertEquals(body,savedFile);
-
- f.delete();
-
- }
-
- public void testSimpleAttachment3() throws MessagingException, IOException {
- Mailet mailet = initMailet();
-
- //System.setProperty("mail.mime.decodefilename", "true");
-
- MimeMessage message = new MimeMessage(Session
- .getDefaultInstance(new Properties()));
-
- MimeMultipart mm = new MimeMultipart();
- MimeBodyPart mp = new MimeBodyPart();
- mp.setText("simple text");
- mm.addBodyPart(mp);
- String body = "ùàòòùàòùàòùàòùàòù";
- MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body).getBytes()));
- mp2.setDisposition("attachment");
- mp2.setFileName("=?iso-8859-15?Q?=E9_++++Pubblicit=E0_=E9_vietata____Milano9052.tmp?=");
- mm.addBodyPart(mp2);
- String body2 = "dglkjhdfòlgkj";
- MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body2).getBytes()));
- mp3.setDisposition("attachment");
- mp3.setFileName("temp.zip");
- mm.addBodyPart(mp3);
- message.setSubject("test");
- message.setContent(mm);
- message.saveChanges();
-
- //message.writeTo(System.out);
- //System.out.println("--------------------------\n\n\n");
-
- Mail mail = new MockMail();
- mail.setMessage(message);
-
- mailet.service(mail);
-
- ByteArrayOutputStream rawMessage = new ByteArrayOutputStream();
- mail.getMessage().writeTo(rawMessage,
- new String[] { "Bcc", "Content-Length", "Message-ID" });
- String res = rawMessage.toString();
-
- System.out.println(res);
-
- Collection c = (Collection) mail.getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
- assertNotNull(c);
-
- assertEquals(1,c.size());
-
- String name = (String) c.iterator().next();
- //System.out.println("--------------------------\n\n\n");
- //System.out.println(name);
-
- assertTrue(name.startsWith("e_Pubblicita_e_vietata_Milano9052"));
-
- File f = new File("c:/"+name);
- InputStream is = new FileInputStream(f);
- String savedFile = IOUtil.toString(is);
- is.close();
- assertEquals(body,savedFile);
-
- f.delete();
-
- }
-
- public void testToAndFromAttributes() throws MessagingException, IOException {
- Mailet strip = new StripAttachment();
- MockMailetConfig mci = new MockMailetConfig("Test",new MockMailContext());
- mci.setProperty("attribute","my.attribute");
- mci.setProperty("remove","all");
- mci.setProperty("notpattern",".*\\.tmp.*");
- strip.init(mci);
-
- Mailet recover = new RecoverAttachment();
- MockMailetConfig mci2 = new MockMailetConfig("Test",new MockMailContext());
- mci2.setProperty("attribute","my.attribute");
- recover.init(mci2);
-
- Mailet onlyText = new OnlyText();
- onlyText.init(new MockMailetConfig("Test", new MockMailContext()));
-
- MimeMessage message = new MimeMessage(Session
- .getDefaultInstance(new Properties()));
-
- MimeMultipart mm = new MimeMultipart();
- MimeBodyPart mp = new MimeBodyPart();
- mp.setText("simple text");
- mm.addBodyPart(mp);
- String body = "\u0023\u00A4\u00E3\u00E0\u00E9";
- MimeBodyPart mp2 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body).getBytes()));
- mp2.setDisposition("attachment");
- mp2.setFileName("=?iso-8859-15?Q?=E9_++++Pubblicit=E0_=E9_vietata____Milano9052.tmp?=");
- mm.addBodyPart(mp2);
- String body2 = "dglkjhdfòlgkj";
- MimeBodyPart mp3 = new MimeBodyPart(new ByteArrayInputStream(("Content-Transfer-Encoding: 8bit\r\n\r\n"+body2).getBytes()));
- mp3.setDisposition("attachment");
- mp3.setFileName("temp.zip");
- mm.addBodyPart(mp3);
- message.setSubject("test");
- message.setContent(mm);
- message.saveChanges();
- Mail mail = new MockMail();
- mail.setMessage(message);
-
- assertTrue(mail.getMessage().getContent() instanceof MimeMultipart);
- assertEquals(3, ((MimeMultipart) mail.getMessage().getContent()).getCount());
-
- strip.service(mail);
-
- assertTrue(mail.getMessage().getContent() instanceof MimeMultipart);
- assertEquals(1, ((MimeMultipart) mail.getMessage().getContent()).getCount());
-
- onlyText.service(mail);
-
- assertFalse(mail.getMessage().getContent() instanceof MimeMultipart);
-
- // prova per caricare il mime message da input stream che altrimenti javamail si comporta differentemente.
- String mimeSource = "Message-ID: <26...@bagovista>\r\nSubject: test\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=us-ascii\r\nContent-Transfer-Encoding: 7bit\r\n\r\nsimple text";
-
- MimeMessage mmNew = new MimeMessage(Session
- .getDefaultInstance(new Properties()), new ByteArrayInputStream(mimeSource.getBytes()));
-
- mmNew.writeTo(System.out);
-
- recover.service(mail);
-
- assertTrue(mail.getMessage().getContent() instanceof MimeMultipart);
- assertEquals(2, ((MimeMultipart) mail.getMessage().getContent()).getCount());
-
- assertEquals(body2, (((MimeMultipart) mail.getMessage().getContent()).getBodyPart(1).getContent()));
-
- }
-
-
- private Mailet initMailet() throws MessagingException {
- Mailet mailet = new StripAttachment();
-
- MockMailetConfig mci = new MockMailetConfig("Test",new MockMailContext());
- mci.setProperty("directory","c:/");
- mci.setProperty("remove","all");
- mci.setProperty("pattern",".*\\.tmp");
- mci.setProperty("decodeFilename", "true");
- mci.setProperty("replaceFilenamePattern",
- "/[\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5]/A//,"+
- "/[\u00C6]/AE//,"+
- "/[\u00C8\u00C9\u00CA\u00CB]/E//,"+
- "/[\u00CC\u00CD\u00CE\u00CF]/I//,"+
- "/[\u00D2\u00D3\u00D4\u00D5\u00D6]/O//,"+
- "/[\u00D7]/x//,"+
- "/[\u00D9\u00DA\u00DB\u00DC]/U//,"+
- "/[\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]/a//,"+
- "/[\u00E6]/ae//,"+
- "/[\u00E8\u00E9\u00EA\u00EB]/e//,"+
- "/[\u00EC\u00ED\u00EE\u00EF]/i//,"+
- "/[\u00F2\u00F3\u00F4\u00F5\u00F6]/o//,"+
- "/[\u00F9\u00FA\u00FB\u00FC]/u//,"+
- "/[^A-Za-z0-9._-]+/_//");
-
- mailet.init(mci);
- return mailet;
- }
+ assertEquals(body2, (((MimeMultipart) mail.getMessage().getContent())
+ .getBodyPart(1).getContent()));
+
+ }
+
+ private Mailet initMailet() throws MessagingException {
+ Mailet mailet = new StripAttachment();
+
+ MockMailetConfig mci = new MockMailetConfig("Test",
+ new MockMailContext());
+ mci.setProperty("directory", "c:/");
+ mci.setProperty("remove", "all");
+ mci.setProperty("pattern", ".*\\.tmp");
+ mci.setProperty("decodeFilename", "true");
+ mci.setProperty("replaceFilenamePattern",
+ "/[\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5]/A//,"
+ + "/[\u00C6]/AE//,"
+ + "/[\u00C8\u00C9\u00CA\u00CB]/E//,"
+ + "/[\u00CC\u00CD\u00CE\u00CF]/I//,"
+ + "/[\u00D2\u00D3\u00D4\u00D5\u00D6]/O//,"
+ + "/[\u00D7]/x//," + "/[\u00D9\u00DA\u00DB\u00DC]/U//,"
+ + "/[\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]/a//,"
+ + "/[\u00E6]/ae//,"
+ + "/[\u00E8\u00E9\u00EA\u00EB]/e//,"
+ + "/[\u00EC\u00ED\u00EE\u00EF]/i//,"
+ + "/[\u00F2\u00F3\u00F4\u00F5\u00F6]/o//,"
+ + "/[\u00F9\u00FA\u00FB\u00FC]/u//,"
+ + "/[^A-Za-z0-9._-]+/_//");
+
+ mailet.init(mci);
+ return mailet;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org