1 23 package com.scalagent.joram.mom.dest.mail; 24 25 import java.io.IOException ; 26 import java.util.Enumeration ; 27 import java.util.Properties ; 28 import java.util.Vector ; 29 30 import org.objectweb.joram.mom.dest.Queue; 31 import org.objectweb.joram.mom.dest.QueueImpl; 32 import org.objectweb.joram.mom.notifications.ClientMessages; 33 import org.objectweb.joram.mom.notifications.SpecialAdminRequest; 34 import org.objectweb.joram.shared.admin.SpecialAdmin; 35 import org.objectweb.joram.shared.excepts.RequestException; 36 import org.objectweb.joram.shared.messages.Message; 37 import org.objectweb.joram.shared.selectors.Selector; 38 import org.objectweb.util.monolog.api.BasicLevel; 39 import org.objectweb.util.monolog.api.Logger; 40 41 import fr.dyade.aaa.agent.AgentId; 42 import fr.dyade.aaa.util.Debug; 43 44 48 public class JavaMailQueueImpl extends QueueImpl implements JavaMailQueueImplMBean { 49 public static Logger logger = Debug.getLogger(JavaMailQueueImpl.class.getName()); 50 51 private String smtpServer = null; 52 53 private String to = null; 54 private String cc = null; 55 private String bcc = null; 56 private String from = null; 57 private String subject = null; 58 private String selector = null; 59 60 private long popPeriod = -1; 61 private String popServer = null; 62 private String popUser = null; 63 private String popPassword = null; 64 private boolean expunge = false; 65 66 private Vector senderInfos = null; 67 68 private transient JavaMailUtil javaMailUtil = null; 69 70 77 public JavaMailQueueImpl(AgentId destId, 78 AgentId adminId, 79 Properties prop) { 80 super(destId, adminId, prop); 81 setProperties(prop); 82 83 if (logger.isLoggable(BasicLevel.DEBUG)) 84 logger.log(BasicLevel.DEBUG, 85 "--- " + this + 86 " JavaMailQueueImpl : " + 87 "\nsenderInfos=" + senderInfos + 88 "\npopServer=" + popServer + 89 "\npopUser=" + popUser + 90 "\npopPeriod=" + popPeriod + 91 "\nexpunge=" + expunge); 92 } 93 94 public void setProperties(Properties prop) { 95 smtpServer = prop.getProperty("smtpServer", smtpServer); 96 to = prop.getProperty("to", to); 97 cc = prop.getProperty("cc", cc); 98 bcc = prop.getProperty("bcc", bcc); 99 from = prop.getProperty("from", from); 100 subject = prop.getProperty("subject", subject); 101 selector = prop.getProperty("selector", selector); 102 103 senderInfos = new Vector (); 105 senderInfos.add(new SenderInfo(smtpServer, 106 to, cc, bcc, from, subject, 107 selector)); 108 109 try { 110 popPeriod = Long.valueOf(prop.getProperty("popPeriod")).longValue(); 111 } catch (NumberFormatException exc) { 112 popPeriod = -1; 113 } 114 popServer = prop.getProperty("popServer", popServer); 115 popUser = prop.getProperty("popUser", popUser); 116 popPassword = prop.getProperty("popPassword", popPassword); 117 expunge = Boolean.valueOf(prop.getProperty("expunge")).booleanValue(); 118 } 119 120 128 public String getSMTPServer() { 129 return smtpServer; 130 } 131 132 138 public void setSMTPServer(String smtpServer) { 139 this.smtpServer = smtpServer; 140 } 141 142 147 public String getDefaultTo() { 148 return to; 149 } 150 151 157 public void setDefaultTo(String to) { 158 this.to = to; 159 } 160 161 166 public String getDefaultCC() { 167 return cc; 168 } 169 170 176 public void setDefaultCC(String cc) { 177 this.cc = cc; 178 } 179 180 185 public String getDefaultBcc() { 186 return bcc; 187 } 188 189 195 public void setDefaultBcc(String bcc) { 196 this.bcc = bcc; 197 } 198 199 204 public String getDefaultFrom() { 205 return from; 206 } 207 208 214 public void setDefaultFrom(String from) { 215 this.from = from; 216 } 217 218 223 public String getDefaultSubject() { 224 return subject; 225 } 226 227 233 public void setDefaultSubject(String subject) { 234 this.subject = subject; 235 } 236 237 242 public String getDefaultSelector() { 243 return selector; 244 } 245 246 252 public void setDefaultSelector(String selector) { 253 this.selector = selector; 254 } 255 256 261 public long getPopPeriod() { 262 return popPeriod; 263 } 264 265 271 public void setPopPeriod(long period) { 272 popPeriod = period; 273 } 274 275 280 public String getPopServer() { 281 return popServer; 282 } 283 284 289 public void setPopServer(String server) { 290 this.popServer = popServer; 291 } 292 293 298 public String getPopUser() { 299 return popUser; 300 } 301 302 308 public void setPopUser(String user) { 309 this.popUser = user; 310 } 311 312 317 public String getPopPassword() { 318 return popPassword; 319 } 320 321 327 public void setPopPassword(String pass) { 328 this.popPassword = pass; 329 } 330 331 336 public boolean getExpunge() { 337 return expunge; 338 } 339 340 346 public void setExpunge(boolean expunge) { 347 this.expunge = expunge; 348 } 349 350 352 public String toString() { 353 return "JavaMailQueueImpl:" + destId.toString(); 354 } 355 356 protected Object specialAdminProcess(SpecialAdminRequest not) 357 throws RequestException { 358 359 try { 360 SpecialAdmin req = not.getRequest(); 361 362 if (logger.isLoggable(BasicLevel.DEBUG)) 363 logger.log(BasicLevel.DEBUG, 364 "--- " + this + 365 " specialAdminProcess : " + 366 req); 367 if (req instanceof AddSenderInfo) 368 addSenderInfo(((AddSenderInfo) req).si, 369 ((AddSenderInfo) req).index); 370 else if (req instanceof RemoveSenderInfo) { 371 if (((RemoveSenderInfo) req).index > -1) 372 removeSenderInfo(((RemoveSenderInfo) req).index); 373 else 374 removeSenderInfo(((RemoveSenderInfo) req).si); 375 } else if (req instanceof UpdateSenderInfo) 376 updateSenderInfo(((UpdateSenderInfo) req).oldSi, 377 ((UpdateSenderInfo) req).newSi); 378 379 if (logger.isLoggable(BasicLevel.DEBUG)) 380 logger.log(BasicLevel.DEBUG, 381 "--- " + this + 382 " specialAdminProcess senderInfos=" + 383 senderInfos); 384 } catch (Exception exc) { 385 if (logger.isLoggable(BasicLevel.WARN)) 386 logger.log(BasicLevel.WARN, 387 "--- " + this + 388 " specialAdminProcess", 389 exc); 390 throw new RequestException(exc.getMessage()); 391 } 392 return "done"; 393 } 394 395 protected void addSenderInfo(SenderInfo si, int index) 396 throws ArrayIndexOutOfBoundsException { 397 if (index > -1) 398 senderInfos.add(index,si); 399 else 400 senderInfos.add(si); 401 } 402 403 protected SenderInfo removeSenderInfo(int index) 404 throws ArrayIndexOutOfBoundsException { 405 return (SenderInfo) senderInfos.remove(index); 406 } 407 408 protected boolean removeSenderInfo(SenderInfo si) { 409 return senderInfos.remove(si); 410 } 411 412 protected boolean updateSenderInfo(SenderInfo oldSi, SenderInfo newSi) 413 throws ArrayIndexOutOfBoundsException { 414 int index = senderInfos.indexOf(oldSi); 415 if (index > -1) return false; 416 senderInfos.set(index,newSi); 417 return true; 418 } 419 420 public ClientMessages preProcess(AgentId from, ClientMessages not) { 421 for (Enumeration msgs = not.getMessages().elements(); 422 msgs.hasMoreElements();) { 423 Message msg = (Message) msgs.nextElement(); 424 SenderInfo si = match(msg); 425 426 if (logger.isLoggable(BasicLevel.DEBUG)) 427 logger.log(BasicLevel.DEBUG, 428 "--- " + this + 429 " match=" + (si!=null)); 430 if (si != null) { 431 try { 432 javaMailUtil.sendJavaMail(si, new MailMessage(msg)); 433 } catch (Exception exc) { 434 ClientMessages deadM = 435 new ClientMessages(not.getClientContext(), 436 not.getRequestId()); 437 438 deadM.addMessage(msg); 439 sendToDMQ(deadM,not.getDMQId()); 440 441 logger.log(BasicLevel.WARN, 442 "JavaMailQueueImpl.sendJavaMail", 443 exc); 444 } 445 not.getMessages().remove(msg); 446 } 447 } 448 if (not.getMessages().size() > 0) { 449 return not; 450 } 451 return null; 452 } 453 454 protected SenderInfo match(Message msg) { 455 for (Enumeration e = senderInfos.elements(); e.hasMoreElements(); ) { 456 SenderInfo si = (SenderInfo) e.nextElement(); 457 if (si.selector == null) return si; 458 if (Selector.matches(msg,si.selector)) 459 return si; 460 } 461 return null; 462 } 463 464 public void doPop() { 465 long count = 0; 466 Vector toExpunge = new Vector (); 467 javax.mail.Message [] msgs = javaMailUtil.popMail(popServer, 468 popUser, 469 popPassword, 470 expunge); 471 if (msgs != null) { 472 for (int i = 0; i < msgs.length; i++) { 473 if (logger.isLoggable(BasicLevel.DEBUG)) 474 logger.log(BasicLevel.DEBUG, 475 "--- " + this + 476 " doPop : msgs[" + i + "] = " + msgs[i]); 477 try { 478 count++; 479 Properties prop = javaMailUtil.getMOMProperties(msgs[i]); 480 MailMessage m = 481 javaMailUtil.createMessage(prop, 482 destId.toString()+"mail_"+count, 483 Queue.getDestinationType(), 484 destId.toString(), 485 Queue.getDestinationType()); 486 storeMessage(new org.objectweb.joram.mom.messages.Message(m.getSharedMessage())); 487 488 if (logger.isLoggable(BasicLevel.DEBUG)) 489 logger.log(BasicLevel.DEBUG, 490 "--- " + this + 491 " doPop : storeMessage m = " + m); 492 if (expunge) 493 toExpunge.add(msgs[i]); 494 } catch (Exception exc) { 495 if (logger.isLoggable(BasicLevel.DEBUG)) 496 logger.log(BasicLevel.DEBUG, 497 "--- " + this + 498 " doPop", exc); 499 continue; 500 } 501 } 502 deliverMessages(0); 503 } 504 505 javaMailUtil.closeFolder(toExpunge,expunge); 506 toExpunge.clear(); 507 } 508 509 private void readObject(java.io.ObjectInputStream in) 510 throws IOException , ClassNotFoundException { 511 512 in.defaultReadObject(); 513 514 if (logger.isLoggable(BasicLevel.DEBUG)) 515 logger.log(BasicLevel.DEBUG, 516 "--- " + this + 517 " JavaMailQueueImpl.readObject : " + 518 "\nsenderInfos=" + senderInfos + 519 "\npopServer=" + popServer + 520 "\npopUser=" + popUser + 521 "\npopPeriod=" + popPeriod + 522 "\nexpunge=" + expunge); 523 javaMailUtil = new JavaMailUtil(); 524 } 525 } 526 | Popular Tags |