diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/org/traccar/notification/NotificationMail.java | 117 |
1 files changed, 64 insertions, 53 deletions
diff --git a/src/org/traccar/notification/NotificationMail.java b/src/org/traccar/notification/NotificationMail.java index 7033c4a11..443018221 100644 --- a/src/org/traccar/notification/NotificationMail.java +++ b/src/org/traccar/notification/NotificationMail.java @@ -30,6 +30,7 @@ import org.traccar.Context; import org.traccar.database.DataManager; import org.traccar.helper.Log; import org.traccar.model.Event; +import org.traccar.model.Extensible; import org.traccar.model.Position; import org.traccar.model.User; @@ -38,81 +39,91 @@ public final class NotificationMail { private NotificationMail() { } - public static void sendMailSync(long userId, Event event, Position position) { + private static Properties getConfigProperies() { Config config = Context.getConfig(); + Properties result = new Properties(); + String host = config.getString("mail.smtp.host", null); + if (host != null) { + result.put("mail.smtp.host", host); + result.put("mail.smtp.port", config.getString("mail.smtp.port", "25")); + + if (config.getBoolean("mail.smtp.starttls.enable")) { + result.put("mail.smtp.starttls.enable", + config.getBoolean("mail.smtp.starttls.enable")); + } else if (config.getBoolean("mail.smtp.ssl.enable")) { + result.put("mail.smtp.socketFactory.port", + result.getProperty("mail.smtp.port")); + result.put("mail.smtp.socketFactory.class", + "javax.net.ssl.SSLSocketFactory"); + } + + result.put("mail.smtp.auth", config.getBoolean("mail.smtp.auth")); + result.put("mail.smtp.user", config.getString("mail.smtp.username", null)); + result.put("mail.smtp.password", config.getString("mail.smtp.password", null)); + result.put("mail.smtp.from", config.getString("mail.smtp.from", null)); + } + return result; + } + + private static Properties getAttributesProperties(Extensible object) { + Properties result = new Properties(); + + if (object.getAttributes().containsKey("mail.smtp.host")) { + result.put("mail.smtp.host", object.getAttributes().get("mail.smtp.host")); + String port = (String) object.getAttributes().get("mail.smtp.port"); + result.put("mail.smtp.port", (port != null) ? port : "25"); + if (object.getAttributes().containsKey("mail.smtp.starttls.enable")) { + boolean tls = Boolean.parseBoolean((String) object.getAttributes().get("mail.smtp.starttls.enable")); + result.put("mail.smtp.starttls.enable", tls); + } else if (object.getAttributes().containsKey("mail.smtp.ssl.enable")) { + boolean ssl = Boolean.parseBoolean((String) object.getAttributes().get("mail.smtp.ssl.enable")); + if (ssl) { + result.put("mail.smtp.socketFactory.port", + result.getProperty("mail.smtp.port")); + result.put("mail.smtp.socketFactory.class", + "javax.net.ssl.SSLSocketFactory"); + } + } + boolean auth = Boolean.parseBoolean((String) object.getAttributes().get("mail.smtp.auth")); + result.put("mail.smtp.auth", auth); + + result.put("mail.smtp.username", object.getAttributes().get("mail.smtp.username")); + result.put("mail.smtp.password", object.getAttributes().get("mail.smtp.password")); + result.put("mail.smtp.from", object.getAttributes().get("mail.smtp.from")); + } + return result; + } + + public static void sendMailSync(long userId, Event event, Position position) { DataManager dataManager = Context.getDataManager(); Properties mailServerProperties; Session mailSession; MimeMessage mailMessage; - String from = null; - String username = null; - String password = null; - try { User user = dataManager.getUser(userId); - mailServerProperties = new Properties(); - String host = config.getString("mail.smtp.host", null); - if (host != null) { - mailServerProperties.put("mail.smtp.host", host); - mailServerProperties.put("mail.smtp.port", config.getString("mail.smtp.port", "25")); - - if (config.getBoolean("mail.smtp.starttls.enable")) { - mailServerProperties.put("mail.smtp.starttls.enable", - config.getBoolean("mail.smtp.starttls.enable")); - } else if (config.getBoolean("mail.smtp.ssl.enable")) { - mailServerProperties.put("mail.smtp.socketFactory.port", - mailServerProperties.getProperty("mail.smtp.port")); - mailServerProperties.put("mail.smtp.socketFactory.class", - "javax.net.ssl.SSLSocketFactory"); - } - - mailServerProperties.put("mail.smtp.auth", config.getBoolean("mail.smtp.auth")); - username = config.getString("mail.smtp.username", null); - password = config.getString("mail.smtp.password", null); - from = config.getString("mail.smtp.from", null); - } else if (user.getAttributes().containsKey("mail.smtp.host")) { - mailServerProperties.put("mail.smtp.host", user.getAttributes().get("mail.smtp.host")); - String port = (String) user.getAttributes().get("mail.smtp.port"); - mailServerProperties.put("mail.smtp.port", (port != null) ? port : "25"); - if (user.getAttributes().containsKey("mail.smtp.starttls.enable")) { - boolean tls = Boolean.parseBoolean((String) user.getAttributes().get("mail.smtp.starttls.enable")); - mailServerProperties.put("mail.smtp.starttls.enable", tls); - } else if (user.getAttributes().containsKey("mail.smtp.ssl.enable")) { - boolean ssl = Boolean.parseBoolean((String) user.getAttributes().get("mail.smtp.ssl.enable")); - if (ssl) { - mailServerProperties.put("mail.smtp.socketFactory.port", - mailServerProperties.getProperty("mail.smtp.port")); - mailServerProperties.put("mail.smtp.socketFactory.class", - "javax.net.ssl.SSLSocketFactory"); - } + mailServerProperties = getConfigProperies(); + if (!mailServerProperties.containsKey("mail.smtp.host")) { + mailServerProperties = getAttributesProperties(user); + if (!mailServerProperties.containsKey("mail.smtp.host")) { + return; } - boolean auth = Boolean.parseBoolean((String) user.getAttributes().get("mail.smtp.auth")); - mailServerProperties.put("mail.smtp.auth", auth); - - username = (String) user.getAttributes().get("mail.smtp.username"); - password = (String) user.getAttributes().get("mail.smtp.password"); - from = (String) user.getAttributes().get("mail.smtp.from"); - } else { - return; } - mailSession = Session.getDefaultInstance(mailServerProperties, null); mailMessage = new MimeMessage(mailSession); - if (from != null) { - mailMessage.setFrom(new InternetAddress(from)); - } mailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress( Context.getDataManager().getUser(userId).getEmail())); mailMessage.setSubject(NotificationFormatter.formatTitle(userId, event, position)); mailMessage.setText(NotificationFormatter.formatMessage(userId, event, position)); Transport transport = mailSession.getTransport("smtp"); - transport.connect(mailServerProperties.getProperty("mail.smtp.host"), username, password); + transport.connect(mailServerProperties.getProperty("mail.smtp.host"), + mailServerProperties.getProperty("mail.smtp.username"), + mailServerProperties.getProperty("mail.smtp.password")); transport.sendMessage(mailMessage, mailMessage.getAllRecipients()); transport.close(); |