package railo.runtime.tag; import railo.commons.io.res.Resource; import railo.runtime.exp.ApplicationException; import railo.runtime.exp.PageException; import railo.runtime.ext.tag.TagImpl; import railo.runtime.net.mail.MailClient; import railo.runtime.op.Caster; import railo.runtime.type.util.ArrayUtil; import railo.runtime.type.util.ListUtil; /** * Retrieves and deletes e-mail messages from a POP mail server. */ public abstract class _Mail extends TagImpl { private String server; private int port=-1; private String username; private String password; private String action="getheaderonly"; private String name; private String[] messageNumber; private String[] uid; private Resource attachmentPath; private int timeout=60; private int startrow=1; private int maxrows=-1; private boolean generateUniqueFilenames=false; @Override public void release() { port=-1; username=null; password=null; action="getheaderonly"; name=null; messageNumber=null; uid=null; attachmentPath=null; timeout=60; startrow=1; maxrows=-1; generateUniqueFilenames=false; super.release(); } /** * @param server The server to set. */ public void setServer(String server) { this.server = server; } /** * @param port The port to set. */ public void setPort(double port) { this.port = (int)port; } /** * @param username The username to set. */ public void setUsername(String username) { this.username = username; } /** * @param password The password to set. */ public void setPassword(String password) { this.password = password; } /** * @param action The action to set. */ public void setAction(String action) { this.action = action.trim().toLowerCase(); } /** * @param name The name to set. */ public void setName(String name) { this.name = name; } /** * @param messageNumber The messageNumber to set. * @throws PageException */ public void setMessagenumber(String messageNumber) throws PageException { this.messageNumber = ArrayUtil.trim(ListUtil.toStringArray(ListUtil.listToArrayRemoveEmpty(messageNumber,','))); if(this.messageNumber.length==0)this.messageNumber=null; } /** * @param uid The uid to set. * @throws PageException */ public void setUid(String uid) throws PageException { this.uid = ArrayUtil.trim(ListUtil.toStringArray(ListUtil.listToArrayRemoveEmpty(uid,','))); if(this.uid.length==0)this.uid=null; } /** * @param attachmentPath The attachmentPath to set. * @throws PageException */ public void setAttachmentpath(String attachmentPath) throws PageException { //try { Resource attachmentDir=pageContext.getConfig().getResource(attachmentPath); if(!attachmentDir.exists() && !attachmentDir.mkdir()) { attachmentDir=pageContext.getConfig().getTempDirectory().getRealResource(attachmentPath); if(!attachmentDir.exists() && !attachmentDir.mkdir()) throw new ApplicationException("directory ["+attachmentPath+"] doesent exist and can't created"); } if(!attachmentDir.isDirectory())throw new ApplicationException("file ["+attachmentPath+"] is not a directory"); pageContext.getConfig().getSecurityManager().checkFileLocation(attachmentDir); this.attachmentPath = attachmentDir; /*} catch(IOException ioe) { throw Caster.toPageException(ioe); }*/ } /** * @param maxrows The maxrows to set. */ public void setMaxrows(double maxrows) { this.maxrows = (int)maxrows; } /** * @param startrow The startrow to set. */ public void setStartrow(double startrow) { this.startrow = (int)startrow; } /** * @param timeout The timeout to set. */ public void setTimeout(double timeout) { this.timeout = (int)timeout; } /** * @param generateUniqueFilenames The generateUniqueFilenames to set. */ public void setGenerateuniquefilenames(boolean generateUniqueFilenames) { this.generateUniqueFilenames = generateUniqueFilenames; } /** * @param debug The debug to set. */ public void setDebug(boolean debug) { // does nothing this.debug = debug; } @Override public int doStartTag() throws PageException { // check attrs if(port==-1)port=getDefaultPort(); //PopClient client = new PopClient(server,port,username,password); MailClient client = MailClient.getInstance(getType(),server,port,username,password); client.setTimeout(timeout*1000); client.setMaxrows(maxrows); if(startrow>1)client.setStartrow(startrow-1); client.setUniqueFilenames(generateUniqueFilenames); if(attachmentPath!=null)client.setAttachmentDirectory(attachmentPath); if(uid!=null)messageNumber=null; try { client.connect(); if(action.equals("getheaderonly")) { required(getTagName(),action,"name",name); pageContext.setVariable(name,client.getMails(messageNumber,uid,false)); } else if(action.equals("getall")) { required(getTagName(),action,"name",name); pageContext.setVariable(name,client.getMails(messageNumber,uid,true)); } else if(action.equals("delete")) { client.deleteMails(messageNumber,uid); } else throw new ApplicationException("invalid value for attribute action, valid values are [getHeaderOnly,getAll,delete]"); } catch(Exception e) { throw Caster.toPageException(e); } finally{ client.disconnectEL(); } return SKIP_BODY; } protected abstract int getType(); protected abstract int getDefaultPort(); protected abstract String getTagName(); }