001 package railo.runtime.spooler.mail; 002 003 import javax.mail.internet.InternetAddress; 004 005 import railo.commons.lang.StringUtil; 006 import railo.runtime.config.Config; 007 import railo.runtime.config.ConfigWeb; 008 import railo.runtime.exp.PageException; 009 import railo.runtime.net.mail.MailException; 010 import railo.runtime.net.smtp.SMTPClient; 011 import railo.runtime.op.Caster; 012 import railo.runtime.spooler.ExecutionPlan; 013 import railo.runtime.spooler.ExecutionPlanImpl; 014 import railo.runtime.spooler.SpoolerTaskSupport; 015 import railo.runtime.type.Struct; 016 import railo.runtime.type.StructImpl; 017 import railo.runtime.type.util.ArrayUtil; 018 019 public class MailSpoolerTask extends SpoolerTaskSupport { 020 private static final ExecutionPlan[] EXECUTION_PLANS = new ExecutionPlan[]{ 021 new ExecutionPlanImpl(1,60), 022 new ExecutionPlanImpl(1,5*60), 023 new ExecutionPlanImpl(1,3600), 024 new ExecutionPlanImpl(2,24*3600), 025 }; 026 027 028 private SMTPClient client; 029 030 public MailSpoolerTask(ExecutionPlan[] plans,SMTPClient client) { 031 super(plans); 032 this.client=client; 033 } 034 public MailSpoolerTask(SMTPClient client) { 035 this(EXECUTION_PLANS,client); 036 } 037 038 039 @Override 040 public String getType() { 041 return "mail"; 042 } 043 044 public String subject() { 045 return client.getSubject(); 046 } 047 048 public Struct detail() { 049 StructImpl sct = new StructImpl(); 050 sct.setEL("subject", client.getSubject()); 051 052 if(client.hasHTMLText())sct.setEL("body", StringUtil.max(client.getHTMLTextAsString(),1024,"...")); 053 else if(client.hasPlainText())sct.setEL("body", StringUtil.max(client.getPlainTextAsString(),1024,"...")); 054 055 sct.setEL("from", toString(client.getFrom())); 056 057 InternetAddress[] adresses = client.getTos(); 058 sct.setEL("to", toString(adresses)); 059 060 adresses = client.getCcs(); 061 if(!ArrayUtil.isEmpty(adresses))sct.setEL("cc", toString(adresses)); 062 063 adresses = client.getBccs(); 064 if(!ArrayUtil.isEmpty(adresses))sct.setEL("bcc", toString(adresses)); 065 066 return sct; 067 } 068 069 private static String toString(InternetAddress[] adresses) { 070 if(adresses==null) return ""; 071 072 StringBuffer sb=new StringBuffer(); 073 for(int i=0;i<adresses.length;i++) { 074 if(i>0)sb.append(", "); 075 sb.append(toString(adresses[i])); 076 } 077 return sb.toString(); 078 } 079 private static String toString(InternetAddress address) { 080 if(address==null) return ""; 081 String addr = address.getAddress(); 082 String per = address.getPersonal(); 083 if(StringUtil.isEmpty(per)) return addr; 084 if(StringUtil.isEmpty(addr)) return per; 085 086 087 return per+" ("+addr+")"; 088 } 089 public Object execute(Config config) throws PageException { 090 try { 091 client._send((ConfigWeb)config); 092 } 093 catch (MailException e) { 094 throw Caster.toPageException(e); 095 } 096 return null; 097 } 098 099 }