1 22 package org.objectweb.petals.binding.mail.listeners; 23 24 import java.util.Timer ; 25 import java.util.TimerTask ; 26 import java.util.logging.Level ; 27 import java.util.logging.Logger ; 28 29 import javax.jbi.JBIException; 30 import javax.mail.Folder ; 31 import javax.mail.Message ; 32 import javax.mail.MessagingException ; 33 import javax.mail.Session ; 34 import javax.mail.Store ; 35 import javax.mail.Flags.Flag; 36 37 46 public class MailBCExternalListener extends TimerTask { 47 48 protected Timer t; 49 50 protected Logger logger; 51 52 protected String address; 53 54 protected SessionDescriptor sessionDescriptor; 55 56 protected MimeMessageManager processor; 57 58 protected MailSessionManager mailSessionManager; 59 60 76 public MailBCExternalListener(Timer t, Logger log, 77 SessionDescriptor sessionDescriptor, 78 MailSessionManager mailSessionManager, 79 MimeMessageManager processor, String address) { 80 super(); 81 this.logger = log; 82 this.t = t; 83 this.address = address; 84 this.mailSessionManager = mailSessionManager; 85 this.sessionDescriptor = sessionDescriptor; 86 this.processor = processor; 87 } 88 89 96 public void run() { 97 Message [] messages = null; 98 Folder folder = null; 99 Store store = null; 100 try { 101 Session session = mailSessionManager 103 .createSessionPropertiesFromDescriptor(sessionDescriptor); 104 105 store = mailSessionManager.getStoreAndConnect(session, 107 sessionDescriptor); 108 109 folder = mailSessionManager.getFolderAndOpen(store, 111 sessionDescriptor); 112 113 messages = accept(folder); 115 116 for (Message message : messages) { 119 process(message, address); 120 } 121 122 folder.expunge(); 124 } catch (JBIException e) { 125 logError("Error retrieving new mails", e); 126 } catch (MessagingException e) { 127 logWarning("Processed messages can't be deleted from the folder : " 128 + folder, e); 129 } finally { 130 closeFolderAndStore(folder, store); 131 } 132 133 } 134 135 142 protected Message [] accept(Folder folder) throws JBIException { 143 return mailSessionManager.getNewMails(folder); 144 } 145 146 protected void logError(String msg, Throwable e) { 147 if (logger != null) 148 logger.log(Level.SEVERE, e.getMessage(), e); 149 else 150 e.printStackTrace(); 151 } 152 153 protected void logWarning(String msg, Throwable e) { 154 if (logger != null) 155 logger.log(Level.WARNING, e.getMessage(), e); 156 else 157 e.printStackTrace(); 158 } 159 160 168 protected void process(Message message, String address) { 169 if (processor != null) 170 try { 171 processor.process(message, address); 172 } catch (JBIException e) { 173 String msg = "Error processing a mail : " 174 + message.getMessageNumber(); 175 logError(msg, e); 176 } finally { 177 try { 178 message.setFlag(Flag.DELETED, true); 179 } catch (MessagingException e) { 180 logWarning("Mail message can't be marked as deleted. " 181 + "It will not be deleted from the store", e); 182 } 183 } 184 } 185 186 194 protected void closeFolderAndStore(Folder folder, Store store) { 195 try { 196 if ((folder != null) && (folder.isOpen())) { 197 folder.close(false); 198 } 199 } catch (Exception ex) { 200 if (folder != null) { 201 logWarning("Error closing mail Folder :" + folder.toString(), 202 ex); 203 } 204 } 205 try { 206 207 if ((store != null) && (store.isConnected())) { 208 store.close(); 209 } 210 } catch (Exception ex) { 211 if (store != null) { 212 logWarning("Error closing mail Store : " + store.toString(), ex); 213 } 214 } 215 } 216 217 public Timer getT() { 218 return t; 219 } 220 221 } 222 | Popular Tags |