1 package uk.ac.ebi.intenz.webapp.controller;
2
3 import java.io.IOException;
4
5 import javax.mail.Address;
6 import javax.mail.Message;
7 import javax.mail.MessagingException;
8 import javax.mail.Session;
9 import javax.mail.Transport;
10 import javax.mail.internet.InternetAddress;
11 import javax.mail.internet.MimeMessage;
12 import javax.servlet.ServletException;
13 import javax.servlet.ServletRequest;
14 import javax.servlet.ServletResponse;
15 import javax.servlet.http.HttpServlet;
16 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletResponse;
18
19 import org.apache.log4j.Logger;
20
21 import uk.ac.ebi.biobabel.util.StringUtil;
22 import uk.ac.ebi.intenz.webapp.IntEnzConfig;
23
24 public class IntEnzContactServlet extends HttpServlet {
25
26 public static final Logger LOGGER = Logger.getLogger(IntEnzContactServlet.class);
27
28 public void init() throws ServletException {
29 super.init();
30 }
31
32 public void doGet(HttpServletRequest request, HttpServletResponse response)
33 throws ServletException, IOException {
34 getServletContext().getRequestDispatcher("/contact.jsp").forward(request, response);
35 }
36
37 public void doPost(HttpServletRequest request, HttpServletResponse response)
38 throws ServletException, IOException {
39
40 if (request.getParameter("intenzMail") == null){
41 getServletContext().getRequestDispatcher("/contact.jsp").forward(request, response);
42 }
43
44 String from = request.getParameter("email");
45
46 String messageText = request.getParameter("message");
47
48 if (StringUtil.isNullOrEmpty(from)){
49 processError(request, response, "The e-mail address must not be empty!");
50 return;
51 }
52 if (StringUtil.isNullOrEmpty(messageText)){
53 processError(request, response, "The message text must not be empty!");
54 return;
55 }
56
57
58 try {
59 sendMail(from, messageText);
60 request.setAttribute("sent", Boolean.TRUE);
61 getServletContext().getRequestDispatcher("/contact.jsp").forward(request, response);
62 } catch (MessagingException e) {
63 if (e.getMessage().indexOf("553") > -1){
64 processError(request, response, "Sorry, the provided e-mail address is not valid.");
65 } else {
66 processError(request, response, "Sorry, the message could not be sent. Please try again later.");
67 }
68 }
69 }
70
71 private void processError(ServletRequest request, ServletResponse response, String errorText)
72 throws ServletException, IOException {
73 request.setAttribute("sent", Boolean.FALSE);
74 request.setAttribute("error", errorText);
75 getServletContext().getRequestDispatcher("/contact.jsp").forward(request, response);
76 }
77
78 private void sendMail(String from, String messageText)
79 throws MessagingException, IOException{
80 try{
81 Session mailSession = Session.getInstance(
82 IntEnzConfig.getInstance().getMailProperties());
83 MimeMessage message = new MimeMessage(mailSession);
84 Address fromAddress = new InternetAddress(from);
85 message.setFrom(fromAddress);
86 Address[] toAddress =
87 InternetAddress.parse(IntEnzConfig.getInstance().getContactMailTo());
88 message.setRecipients(Message.RecipientType.TO, toAddress);
89 message.setSubject(IntEnzConfig.getInstance().getContactMailSubject());
90 message.setText(messageText);
91 Transport.send(message);
92 } catch (MessagingException e){
93 LOGGER.error("There has been an error sending an email from " + from, e);
94 throw e;
95 }
96
97 }
98 }