Skip to content

Instantly share code, notes, and snippets.

@dagvadorj
Last active December 10, 2015 01:48
Show Gist options
  • Save dagvadorj/4362741 to your computer and use it in GitHub Desktop.
Save dagvadorj/4362741 to your computer and use it in GitHub Desktop.
Message listener sending e-mails
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