aboutsummaryrefslogtreecommitdiff
path: root/juick-api/src/main/java/com/juick/api/EmailManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-api/src/main/java/com/juick/api/EmailManager.java')
-rw-r--r--juick-api/src/main/java/com/juick/api/EmailManager.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/juick-api/src/main/java/com/juick/api/EmailManager.java b/juick-api/src/main/java/com/juick/api/EmailManager.java
new file mode 100644
index 00000000..8e868ca0
--- /dev/null
+++ b/juick-api/src/main/java/com/juick/api/EmailManager.java
@@ -0,0 +1,56 @@
+package com.juick.api;
+
+import com.juick.Message;
+import com.juick.server.component.MessageEvent;
+import com.juick.server.util.HttpBadRequestException;
+import com.juick.service.EmailService;
+import com.juick.service.SubscriptionService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+import javax.inject.Inject;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
+import static com.juick.formatters.PlainTextFormatter.formatPost;
+
+@Component
+public class EmailManager implements ApplicationListener<MessageEvent> {
+ private static final Logger logger = LoggerFactory.getLogger(EmailManager.class);
+ @Inject
+ EmailService emailService;
+ @Inject
+ SubscriptionService subscriptionService;
+ @Override
+ public void onApplicationEvent(MessageEvent event) {
+ Message msg = event.getMessage();
+ if (msg.getRid() == 0) {
+ subscriptionService.getSubscribedUsers(msg.getUser().getUid(), msg.getMid())
+ .forEach(user -> emailService.getEmails(user.getUid())
+ .forEach(email -> emailNotify(email, msg)));
+ } else {
+ subscriptionService.getUsersSubscribedToComments(msg.getMid(), msg.getUser().getUid())
+ .forEach(user -> emailService.getEmails(user.getUid())
+ .forEach(email -> emailNotify(email, msg)));
+ }
+ }
+
+ void emailNotify(String email, Message msg) {
+ Session session = Session.getDefaultInstance(System.getProperties());
+ try {
+ MimeMessage message = new MimeMessage(session);
+ message.setFrom(new InternetAddress("noreply@mail.juick.com"));
+ message.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(email));
+ message.setSubject(String.format("New message from %s", msg.getUser().getName()));
+ message.setText(formatPost(msg));
+ Transport.send(message);
+ } catch (MessagingException ex) {
+ logger.error("mail exception", ex);
+ }
+ }
+}