Last active
December 10, 2015 01:48
-
-
Save dagvadorj/4362741 to your computer and use it in GitHub Desktop.
Message listener sending e-mails
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.ubdynamics.testapp.ejb.service; | |
import java.io.ByteArrayOutputStream; | |
import java.io.FileNotFoundException; | |
import java.io.IOException; | |
import java.text.SimpleDateFormat; | |
import java.util.ArrayList; | |
import java.util.Date; | |
import java.util.List; | |
import java.util.Locale; | |
import javax.activation.DataHandler; | |
import javax.activation.DataSource; | |
import javax.annotation.Resource; | |
import javax.ejb.ActivationConfigProperty; | |
import javax.ejb.EJB; | |
import javax.ejb.MessageDriven; | |
import javax.jms.JMSException; | |
import javax.jms.Message; | |
import javax.jms.MessageListener; | |
import javax.jms.ObjectMessage; | |
import javax.mail.MessagingException; | |
import javax.mail.Session; | |
import javax.mail.Transport; | |
import javax.mail.internet.InternetAddress; | |
import javax.mail.internet.MimeBodyPart; | |
import javax.mail.internet.MimeMessage; | |
import javax.mail.internet.MimeMultipart; | |
import javax.mail.util.ByteArrayDataSource; | |
import jxl.Workbook; | |
import jxl.WorkbookSettings; | |
import jxl.write.Label; | |
import jxl.write.Number; | |
import jxl.write.WritableSheet; | |
import jxl.write.WritableWorkbook; | |
import jxl.write.WriteException; | |
import jxl.write.biff.RowsExceededException; | |
import org.ubdynamics.testapp.ejb.type.MailRequest; | |
import org.ubdynamics.testapp.jpa.entity.User; | |
import org.ubdynamics.testapp.jpa.entity.Document; | |
/** | |
* Message-Driven Bean implementation class for: MailingListener | |
* | |
*/ | |
@MessageDriven(mappedName = "jms/TestQ", activationConfig = | |
{ | |
@ActivationConfigProperty(propertyName = "destinationType", | |
propertyValue = "javax.jms.Queue") | |
} | |
) | |
public class MailingListener implements MessageListener { | |
@EJB | |
private GeneralService generalService; | |
@Resource(mappedName = "mail/TestSession") | |
private Session mailSession; | |
public MailingListener() { | |
System.out.println("Listener starting..."); | |
} | |
public void onMessage(Message message) { | |
System.out.println("Got message: " + message); | |
MailRequest mailRequest; | |
try { | |
mailRequest = (MailRequest) ((ObjectMessage) message) | |
.getObject(); | |
} catch (JMSException e) { | |
System.out.println(e); | |
return; | |
} | |
User user = mailingRequest.getUser(); | |
List<Document> documents = new ArrayList<Document>(); | |
Document document; | |
try { | |
document = getDocument(user); | |
} catch (RowsExceededException e) { | |
System.out.println(e); | |
return; | |
} catch (FileNotFoundException e) { | |
System.out.println(e); | |
return; | |
} catch (WriteException e) { | |
System.out.println(e); | |
return; | |
} catch (IOException e) { | |
System.out.println(e); | |
return; | |
} | |
documents.add(document); | |
OutgoingMail outgoingMail = new OutgoingMail(); | |
String body = "Dear " + user.getName(); | |
body += "\n\n"; | |
body += "We are hereby attaching document "; | |
body += "\n\n"; | |
outgoingMail.setTitle("Mail subject"); | |
outgoingMail.setContent(body); | |
outgoingMail.setReceiver(user.getEmail()); | |
outgoingMail.setAttachments(documents); | |
try { | |
System.out.println("Mail session: " + mailSession); | |
MimeMessage mailMessage = new MimeMessage(mailSession); | |
mailMessage.setFrom(new InternetAddress(mailSession | |
.getProperty("mail.from"))); | |
mailMessage.setRecipients(javax.mail.Message.RecipientType.TO, | |
InternetAddress.parse(outgoingMail.getReceiver())); | |
mailMessage.setSubject(outgoingMail.getTitle()); | |
MimeMultipart messageParts = new MimeMultipart(); | |
MimeBodyPart textPart = new MimeBodyPart(); | |
textPart.setText(outgoingMail.getContent()); | |
messageParts.addBodyPart(textPart); | |
List<Document> attachments = outgoingMail.getAttachments(); | |
for (Document attachment : attachments) { | |
DataSource dataSource = new ByteArrayDataSource( | |
attachment.getContent(), attachment.getContentType()); | |
MimeBodyPart attachmentPart = new MimeBodyPart(); | |
attachmentPart.setDataHandler(new DataHandler(dataSource)); | |
attachmentPart.setFileName(attachment.getName()); | |
messageParts.addBodyPart(attachmentPart); | |
} | |
mailMessage.setContent(messageParts); | |
Transport.send(mailMessage); | |
System.out.println("Done"); | |
} catch (MessagingException e) { | |
System.out.println(e); | |
} | |
System.out.println(outgoingMail); | |
} | |
private Document getDocument(User user) throws FileNotFoundException, | |
IOException, RowsExceededException, WriteException { | |
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); | |
WorkbookSettings wbSettings = new WorkbookSettings(); | |
wbSettings.setLocale(new Locale("en", "EN")); | |
WritableWorkbook workbook = Workbook.createWorkbook(outputStream, | |
wbSettings); | |
workbook.createSheet("Sheet 1", 0); | |
WritableSheet excelSheet = workbook.getSheet(0); | |
// TODO Populate Excel document | |
workbook.write(); | |
workbook.close(); | |
Document document = new Document(); | |
document.setName(user.getUsername() + ".xls"); | |
document.setCreatedDate(new Date()); | |
document.setContent(outputStream.toByteArray()); | |
document.setContentType("application/octet-stream"); | |
return document; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment