From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Sat, 30 Apr 2016 04:19:14 -0400 Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates --- src/main/java/com/gitblit/manager/NotificationManager.java | 118 +++++++++++++++++++++-------------------------------------- 1 files changed, 42 insertions(+), 76 deletions(-) diff --git a/src/main/java/com/gitblit/manager/NotificationManager.java b/src/main/java/com/gitblit/manager/NotificationManager.java index eae563f..4bbc2ab 100644 --- a/src/main/java/com/gitblit/manager/NotificationManager.java +++ b/src/main/java/com/gitblit/manager/NotificationManager.java @@ -15,24 +15,22 @@ */ package com.gitblit.manager; -import java.text.MessageFormat; import java.util.Collection; -import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMultipart; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gitblit.IStoredSettings; import com.gitblit.Keys; -import com.gitblit.MailExecutor; +import com.gitblit.models.Mailing; +import com.gitblit.service.MailService; +import com.google.inject.Inject; +import com.google.inject.Singleton; /** * The notification manager dispatches notifications. Currently, email is the @@ -42,6 +40,7 @@ * @author James Moger * */ +@Singleton public class NotificationManager implements INotificationManager { private final Logger logger = LoggerFactory.getLogger(getClass()); @@ -50,28 +49,35 @@ private final IStoredSettings settings; - private final MailExecutor mailExecutor; + private final MailService mailService; + @Inject public NotificationManager(IStoredSettings settings) { this.settings = settings; - this.mailExecutor = new MailExecutor(settings); + this.mailService = new MailService(settings); } @Override - public IManager setup() { - if (mailExecutor.isReady()) { - logger.info("Mail executor is scheduled to process the message queue every 2 minutes."); - scheduledExecutor.scheduleAtFixedRate(mailExecutor, 1, 2, TimeUnit.MINUTES); + public NotificationManager start() { + if (mailService.isReady()) { + int period = 2; + logger.info("Mail service will process the queue every {} minutes.", period); + scheduledExecutor.scheduleAtFixedRate(mailService, 1, period, TimeUnit.MINUTES); } else { - logger.warn("Mail server is not properly configured. Mail services disabled."); + logger.warn("Mail service disabled."); } return this; } @Override - public IManager stop() { + public NotificationManager stop() { scheduledExecutor.shutdownNow(); return this; + } + + @Override + public boolean isSendingMail() { + return mailService.isReady(); } /** @@ -82,8 +88,11 @@ */ @Override public void sendMailToAdministrators(String subject, String message) { - List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses); - sendMail(subject, message, toAddresses); + Mailing mail = Mailing.newPlain(); + mail.subject = subject; + mail.content = message; + mail.setRecipients(settings.getStrings(Keys.mail.adminAddresses)); + send(mail); } /** @@ -95,41 +104,11 @@ */ @Override public void sendMail(String subject, String message, Collection<String> toAddresses) { - this.sendMail(subject, message, toAddresses.toArray(new String[0])); - } - - /** - * Notify users by email of something. - * - * @param subject - * @param message - * @param toAddresses - */ - @Override - public void sendMail(String subject, String message, String... toAddresses) { - if (toAddresses == null || toAddresses.length == 0) { - logger.debug(MessageFormat.format("Dropping message {0} because there are no recipients", subject)); - return; - } - try { - Message mail = mailExecutor.createMessage(toAddresses); - if (mail != null) { - mail.setSubject(subject); - - MimeBodyPart messagePart = new MimeBodyPart(); - messagePart.setText(message, "utf-8"); - messagePart.setHeader("Content-Type", "text/plain; charset=\"utf-8\""); - messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable"); - - MimeMultipart multiPart = new MimeMultipart(); - multiPart.addBodyPart(messagePart); - mail.setContent(multiPart); - - mailExecutor.queue(mail); - } - } catch (MessagingException e) { - logger.error("Messaging error", e); - } + Mailing mail = Mailing.newPlain(); + mail.subject = subject; + mail.content = message; + mail.setRecipients(toAddresses); + send(mail); } /** @@ -141,40 +120,27 @@ */ @Override public void sendHtmlMail(String subject, String message, Collection<String> toAddresses) { - this.sendHtmlMail(subject, message, toAddresses.toArray(new String[0])); + Mailing mail = Mailing.newHtml(); + mail.subject = subject; + mail.content = message; + mail.setRecipients(toAddresses); + send(mail); } /** * Notify users by email of something. * - * @param subject - * @param message - * @param toAddresses + * @param mailing */ @Override - public void sendHtmlMail(String subject, String message, String... toAddresses) { - if (toAddresses == null || toAddresses.length == 0) { - logger.debug(MessageFormat.format("Dropping message {0} because there are no recipients", subject)); + public void send(Mailing mailing) { + if (!mailing.hasRecipients()) { + logger.debug("Dropping message {} because there are no recipients", mailing.subject); return; } - try { - Message mail = mailExecutor.createMessage(toAddresses); - if (mail != null) { - mail.setSubject(subject); - - MimeBodyPart messagePart = new MimeBodyPart(); - messagePart.setText(message, "utf-8"); - messagePart.setHeader("Content-Type", "text/html; charset=\"utf-8\""); - messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable"); - - MimeMultipart multiPart = new MimeMultipart(); - multiPart.addBodyPart(messagePart); - mail.setContent(multiPart); - - mailExecutor.queue(mail); - } - } catch (MessagingException e) { - logger.error("Messaging error", e); + Message msg = mailService.createMessage(mailing); + if (msg != null) { + mailService.queue(msg); } } -- Gitblit v1.9.1