/** * Endpoint can be in the form of pop3://username:[email protected] * * @param endpointUri * @param timeout * @return * @throws Exception */ public UMOMessage receive(UMOEndpointURI endpointUri, long timeout) throws Exception { initialise(endpointUri); long t0 = System.currentTimeMillis(); if (timeout < 0) { timeout = Long.MAX_VALUE; } do { int count = folder.getMessageCount(); if (count > 0) { Message message = folder.getMessage(1); // so we don't get the same message again message.setFlag(Flags.Flag.DELETED, true); return new MuleMessage(connector.getMessageAdapter(message)); } else if (count == -1) { throw new MessagingException( "Cannot monitor folder: " + folder.getFullName() + " as folder is closed"); } long sleep = Math.min(this.connector.getCheckFrequency(), timeout - (System.currentTimeMillis() - t0)); if (sleep > 0) { if (logger.isDebugEnabled()) { logger.debug("No results, sleeping for " + sleep); } Thread.sleep(sleep); } else { logger.debug("Timeout"); return null; } } while (true); }
public void doInitialise() throws InitialisationException { super.doInitialise(); System.setProperty("mail." + getProtocol() + ".ssl", "true"); System.setProperty("mail." + getProtocol() + ".socketFactory.class", getSocketFactory()); System.setProperty( "mail." + getProtocol() + ".socketFactory.fallback", getSocketFactoryFallback()); if (getTrustStore() != null) { System.setProperty("javax.net.ssl.trustStore", getTrustStore()); if (getTrustStorePassword() != null) { System.setProperty("javax.net.ssl.trustStorePassword", getTrustStorePassword()); } } }
protected void initialise(UMOEndpointURI endpoint) throws MessagingException { if (!initialised.get()) { String inbox = null; if (connector.getProtocol().equals("imap") && endpoint.getParams().get("folder") != null) { inbox = (String) endpoint.getParams().get("folder"); } else { inbox = Pop3Connector.MAILBOX; } URLName url = new URLName( endpoint.getScheme(), endpoint.getHost(), endpoint.getPort(), inbox, endpoint.getUsername(), endpoint.getPassword()); session = MailUtils.createMailSession(url); session.setDebug(logger.isDebugEnabled()); Store store = session.getStore(url); store.connect(); folder = store.getFolder(inbox); if (!folder.isOpen()) { try { // Depending on Server implementation it's not always // necessary // to open the folder to check it // Opening folders can be exprensive! // folder.open(Folder.READ_ONLY); folder.open(Folder.READ_WRITE); } catch (MessagingException e) { logger.warn("Failed to open folder: " + folder.getFullName(), e); } } } }