r207 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin faxtomail-ui-web/src/main/webapp/js
Author: echatellier Date: 2014-06-16 11:14:38 +0200 (Mon, 16 Jun 2014) New Revision: 207 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/207 Log: Ajout du test pour la connexion au serveur mail. Ajout du support imap, imaps, pop3, pop3s Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationJsonAction.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java 2014-06-15 10:41:28 UTC (rev 206) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ConfigurationService.java 2014-06-16 09:14:38 UTC (rev 207) @@ -30,7 +30,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.Store; +import javax.mail.URLName; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,6 +50,7 @@ import com.franciaflex.faxtomail.persistence.entities.EmailAccount; import com.franciaflex.faxtomail.persistence.entities.EmailAccountImpl; import com.franciaflex.faxtomail.persistence.entities.EmailAccountTopiaDao; +import com.franciaflex.faxtomail.persistence.entities.EmailProtocol; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserGroup; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserGroupTopiaDao; @@ -205,7 +212,7 @@ emailAccountTopiaDao.create(emailAccount); } } - + emailAccountTopiaDao.deleteAll(emailAccountMap.values()); getPersistenceContext().commit(); } @@ -219,7 +226,7 @@ log.warn("user folders = " + userFolders); FaxToMailUserTopiaDao faxToMailUserTopiaDao = getPersistenceContext().getFaxToMailUserDao(); - + for (Map.Entry<String, Collection<MailFolder>> entry : userFolders.entrySet()) { String userId = entry.getKey(); Collection<MailFolder> mailFolders = entry.getValue(); @@ -231,7 +238,7 @@ } faxToMailUserTopiaDao.update(user); } - + getPersistenceContext().commit(); } @@ -256,7 +263,7 @@ // recuperation de tout les groupes chef dont l'utilsateur est membre GroupChefTopiaDao groupChefTopiaDao = getPersistenceContext().getGroupChefDao(); List<GroupChef> groupChefs = groupChefTopiaDao.forUserGroupIn(user.getUserGroups()).findAll(); - + // recuperation de tous les users des groups gérés FaxToMailUserTopiaDao faxToMailUserTopiaDao = getPersistenceContext().getFaxToMailUserDao(); for (GroupChef groupChef : groupChefs) { @@ -283,7 +290,7 @@ * @param path path * @return file info */ - public Object checkDirectory(String path) { + public Map<String, Object> checkDirectory(String path) { Map<String, Object> result = new HashMap<>(); File file = new File(path); result.put("path", path); @@ -294,4 +301,76 @@ result.put("canExecute", file.canExecute()); return result; } + + /** + * Verification de la connexion à un serveur de mail. + * + * @param account email account to check + * @return + */ + public Map<String, Object> checkMailaccount(EmailAccount account) { + Map<String, Object> result = new HashMap<>(); + + long before = System.currentTimeMillis(); + if (log.isDebugEnabled()) { + log.debug("Check account " + account.getProtocol() + " : " + account.getHost()); + } + + Properties properties = new Properties(); + + if (account.getProtocol() == EmailProtocol.POP3S) { + properties.setProperty("mail.pop3.ssl.enable", "true"); + } + + switch (account.getProtocol()) { + case IMAPS: + properties.setProperty("mail.imap.ssl.enable", "true"); + case IMAP: + properties.setProperty("mail.store.protocol", "imap"); + properties.setProperty("mail.imap.host", account.getHost()); + properties.setProperty("mail.imap.port", String.valueOf(account.getPort())); + properties.setProperty("mail.imap.connectiontimeout", "2000"); + break; + case POP3S: + properties.setProperty("mail.pop3.ssl.enable", "true"); + case POP3: + properties.setProperty("mail.store.protocol", "pop3"); + properties.setProperty("mail.pop3.host", account.getHost()); + properties.setProperty("mail.pop3.port", String.valueOf(account.getPort())); + properties.setProperty("mail.pop3.connectiontimeout", "2000"); + break; + } + + Session session = Session.getInstance(properties); + Store store = null; + + try { + store = session.getStore(); + store.connect(account.getLogin(), account.getPassword()); + store.close(); + + // set result map + result.put("ok", true); + } catch (MessagingException e) { + log.error("Error while getting emails from the mailbox", e); + + // set result map + result.put("ok", false); + result.put("error", e.getMessage()); + } finally { + if (store != null) { + try { + store.close(); + } catch (MessagingException ex) { + // silent close + } + } + } + + if (log.isDebugEnabled()) { + long after = System.currentTimeMillis(); + log.debug("Checked in " + (after - before) + " ms"); + } + return result; + } } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java 2014-06-15 10:41:28 UTC (rev 206) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java 2014-06-16 09:14:38 UTC (rev 207) @@ -96,7 +96,7 @@ Trigger trigger = TriggerBuilder .newTrigger() .withIdentity("mailFiltering", "mailFilteringTrigger") - .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")) + .withSchedule(CronScheduleBuilder.cronSchedule("0 */5 * * * ?")) .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); @@ -107,7 +107,7 @@ trigger = TriggerBuilder .newTrigger() .withIdentity("ediManagement", "ediManagementTrigger") - .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")) + .withSchedule(CronScheduleBuilder.cronSchedule("0 */5 * * * ?")) .build(); scheduler = new StdSchedulerFactory().getScheduler(); Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationJsonAction.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationJsonAction.java 2014-06-15 10:41:28 UTC (rev 206) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationJsonAction.java 2014-06-16 09:14:38 UTC (rev 207) @@ -24,13 +24,9 @@ * #L% */ -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.convention.annotation.Action; import com.franciaflex.faxtomail.persistence.entities.EmailAccount; -import com.franciaflex.faxtomail.persistence.entities.EmailAccountImpl; import com.franciaflex.faxtomail.services.service.ConfigurationService; import com.franciaflex.faxtomail.web.FaxToMailJsonAction; @@ -52,12 +48,9 @@ public void setPath(String path) { this.path = path; } - - public EmailAccount getEmailAccount() { - if (emailAccount == null) { - emailAccount = new EmailAccountImpl(); - } - return emailAccount; + + public void setEmailAccount(String json) { + this.emailAccount = getGson().fromJson(json, EmailAccount.class); } @Action("configuration-check-directory-json") @@ -66,9 +59,9 @@ return SUCCESS; } - @Action("configuration-check-mail-json") + @Action("configuration-check-mailaccount-json") public String checkMail() { - + jsonData = configurationService.checkMailaccount(emailAccount); return SUCCESS; } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-15 10:41:28 UTC (rev 206) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-06-16 09:14:38 UTC (rev 207) @@ -102,9 +102,9 @@ Collection<EmailAccount> emailAccounts = configurationService.getEmailAccounts(); for (EmailAccount account : emailAccounts) { - if (account.getProtocol() == EmailProtocol.POP3) { - checkEmailsOnPop3(account); - } + //if (account.getProtocol() == EmailProtocol.POP3) { + checkEmails(account); + //} } } @@ -112,12 +112,27 @@ * Checks the emails of the account * @param account */ - public void checkEmailsOnPop3(EmailAccount account) { + public void checkEmails(EmailAccount account) { Properties properties = new Properties(); - properties.setProperty("mail.store.protocol", "pop3"); - properties.setProperty("mail.pop3.host", account.getHost()); - properties.setProperty("mail.pop3.user", account.getLogin()); - properties.setProperty("mail.pop3.port", String.valueOf(account.getPort())); + + switch (account.getProtocol()) { + case IMAPS: + properties.setProperty("mail.imap.ssl.enable", "true"); + case IMAP: + properties.setProperty("mail.store.protocol", "imap"); + properties.setProperty("mail.imap.host", account.getHost()); + properties.setProperty("mail.imap.port", String.valueOf(account.getPort())); + properties.setProperty("mail.imap.connectiontimeout", "2000"); + break; + case POP3S: + properties.setProperty("mail.pop3.ssl.enable", "true"); + case POP3: + properties.setProperty("mail.store.protocol", "pop3"); + properties.setProperty("mail.pop3.host", account.getHost()); + properties.setProperty("mail.pop3.port", String.valueOf(account.getPort())); + properties.setProperty("mail.pop3.connectiontimeout", "2000"); + break; + } Session session = Session.getInstance(properties); Store store = null; @@ -125,7 +140,7 @@ Folder inbox = null; try { - store = session.getStore(new URLName("pop3://" + account.getHost())); + store = session.getStore(/*new URLName("pop3://" + account.getHost())*/); store.connect(account.getLogin(), account.getPassword()); defaultFolder = store.getDefaultFolder(); inbox = defaultFolder.getFolder("INBOX"); Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-15 10:41:28 UTC (rev 206) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-16 09:14:38 UTC (rev 207) @@ -28,7 +28,7 @@ <html> <head> <title>Configuration</title> - + <link rel="stylesheet" type="text/css" href="<s:url value='/nuiton-js/faxtomail-configuration.css' />" /> <script type="text/javascript" src="<s:url value='/nuiton-js/faxtomail-configuration.js' />"></script> @@ -53,7 +53,8 @@ 'users': <s:property value="toJson(users)" escapeHtml="false"/>, 'groups': <s:property value="toJson(groups)" escapeHtml="false"/>, // remote service urls - 'remoteCheckFolder': "<s:url action="configuration-check-directory-json" />" + 'remoteCheckFolder': "<s:url action="configuration-check-directory-json" />", + 'remoteCheckEmailAccount': "<s:url action="configuration-check-mailaccount-json" />" }); </script> </head> @@ -889,7 +890,7 @@ <div class="form-group col-xs-2"> <br /> <button type="button" class="btn btn-info" ng-disabled="!newAccount.protocol || !newAccount.host || !newAccount.port || !newAccount.login || addEmailAccountForm.$invalid" - tooltip="Fonctionnalité à venir"> + ng-click="checkEmailAccount()"> <i class="fa fa-cogs"></i> Test </button> <button type="button" class="btn btn-success" ng-disabled="!newAccount.protocol || !newAccount.host || !newAccount.port || !newAccount.login || addEmailAccountForm.$invalid" ng-click="addEmailAccount()"> Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-15 10:41:28 UTC (rev 206) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-16 09:14:38 UTC (rev 207) @@ -547,6 +547,7 @@ } }; + // vérifie sur le serveur que le répertoire existe et a les droits d'écriture $scope.checkRemotePath = function() { $http.get(ConfigurationData.remoteCheckFolder + "?path=" + encodeURIComponent($scope.selectedMailFolder.ediFolder), {cache:true}) @@ -926,8 +927,8 @@ /** * Email accounts controller. */ -ConfigurationModule.controller('ConfigurationEmailAccountsController', ['$scope', '$window', 'ConfigurationData', - function($scope, $window, ConfigurationData) { +ConfigurationModule.controller('ConfigurationEmailAccountsController', ['$scope', '$window', '$http', 'ConfigurationData', + function($scope, $window, $http, ConfigurationData) { //{Array} Email accounts $scope.emailAccounts = ConfigurationData.emailAccounts; //{Array} Port par défaut des protocols @@ -941,7 +942,7 @@ $scope.newAccount = {}; $scope.addEmailAccountForm.$setPristine(); }; - + // suppression d'un compte $scope.removeEmailAccount = function(index) { if ($window.confirm("Êtes-vous sûr de vouloir supprimer ce compte email ?")) { @@ -949,6 +950,20 @@ } }; + // test de connexion au serveur de mail + $scope.checkEmailAccount = function() { + $http.post(ConfigurationData.remoteCheckEmailAccount, "emailAccount=" + angular.toJson($scope.newAccount), + {headers: {'Content-Type': 'application/x-www-form-urlencoded'}}) + .success(function(data, status, headers, config) { + console.log(data, status, headers, config); + if (data.ok) { + $window.alert("Le test de connexion est passé avec succès."); + } else { + $window.alert("Impossible de se connecter au serveur : " + data.error); + } + }); + }; + // selection d'un protocol $scope.$watch("newAccount.protocol", function(newValue, oldValue) { // auto remplissage du port par defaut
participants (1)
-
echatellier@users.forge.codelutin.com