01: /****************************************************************
02: * Licensed to the Apache Software Foundation (ASF) under one *
03: * or more contributor license agreements. See the NOTICE file *
04: * distributed with this work for additional information *
05: * regarding copyright ownership. The ASF licenses this file *
06: * to you under the Apache License, Version 2.0 (the *
07: * "License"); you may not use this file except in compliance *
08: * with the License. You may obtain a copy of the License at *
09: * *
10: * http://www.apache.org/licenses/LICENSE-2.0 *
11: * *
12: * Unless required by applicable law or agreed to in writing, *
13: * software distributed under the License is distributed on an *
14: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
15: * KIND, either express or implied. See the License for the *
16: * specific language governing permissions and limitations *
17: * under the License. *
18: ****************************************************************/package org.apache.james.transport.matchers;
19:
20: import org.apache.mailet.GenericMatcher;
21: import org.apache.mailet.Mail;
22:
23: import javax.mail.MessagingException;
24: import javax.mail.Multipart;
25: import javax.mail.Part;
26: import javax.mail.internet.MimeMessage;
27: import java.util.Collection;
28:
29: /**
30: * Checks whether this message has an attachment
31: *
32: * @version CVS $Revision: 494012 $ $Date: 2007-01-08 11:23:58 +0100 (Mo, 08 Jan 2007) $
33: */
34: public class HasAttachment extends GenericMatcher {
35:
36: /**
37: * Either every recipient is matching or neither of them.
38: * @throws MessagingException if no attachment is found and at least one exception was thrown
39: */
40: public Collection match(Mail mail) throws MessagingException {
41:
42: Exception anException = null;
43:
44: try {
45: MimeMessage message = mail.getMessage();
46: Object content;
47:
48: /**
49: * if there is an attachment and no inline text,
50: * the content type can be anything
51: */
52: if (message.getContentType() == null) {
53: return null;
54: }
55:
56: content = message.getContent();
57: if (content instanceof Multipart) {
58: Multipart multipart = (Multipart) content;
59: for (int i = 0; i < multipart.getCount(); i++) {
60: try {
61: Part part = multipart.getBodyPart(i);
62: String fileName = part.getFileName();
63: if (fileName != null) {
64: return mail.getRecipients(); // file found
65: }
66: } catch (MessagingException e) {
67: anException = e;
68: } // ignore any messaging exception and process next bodypart
69: }
70: } else {
71: String fileName = message.getFileName();
72: if (fileName != null) {
73: return mail.getRecipients(); // file found
74: }
75: }
76: } catch (Exception e) {
77: anException = e;
78: }
79:
80: // if no attachment was found and at least one exception was catched rethrow it up
81: if (anException != null) {
82: throw new MessagingException("Malformed message",
83: anException);
84: }
85:
86: return null; // no attachment found
87: }
88: }
|