Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send an email from jsp/servlet?

Tags:

java

jsp

servlets

How to send an email from JSP/servlet? Is it necessary to download some jars or can you send an email from JSP/servlets without any jars?

  • What would my Java code look like?

  • What would my HTML code look like (if any)?

  • Are multiple classes necessary, or can you use just one class?

like image 810
mihir.gandhrokiya Avatar asked Sep 21 '10 05:09

mihir.gandhrokiya


People also ask

Which is the valid statement to send an email in JSP?

Using Forms to Send EmailgetParameter("from"); String subject = request. getParameter("subject"); String messageText = request. getParameter("body"); Once you have all the information, you can use the above mentioned programs to send email.

Which method is used to send response of one servlet into another?

sendRedirect() method redirects the response to another resource, inside or outside the server. It makes the client/browser to create a new request to get to the resource. It sends a temporary redirect response to the client using the specified redirect location URL.

What is request getParameter in Java?

getParameter. java.lang.String getParameter(java.lang.String name) Returns the value of a request parameter as a String , or null if the parameter does not exist. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.

Which of the following is a feature of JSP?

As you know JSP stands for Java Server Pages, one of the main feature of JSP is to allow Java code to be added in between your HTML code, in order to give our webpage the power of Java and make it further powerful and interactive.


1 Answers

The mailer logic should go in its own standalone class which you can reuse everywhere. The JSP file should contain presentation logic and markup only. The Servlet class should just process the request the appropriate way and call the mailer class. Here are the steps which you need to take:

  1. First decide which SMTP server you'd like to use so that you would be able to send emails. The one of your ISP? The one of Gmail? Yahoo? Website hosting provider? A self-maintained one? Regardless, figure the hostname, port, username and password of this SMTP server. You're going to need this information.


  2. Create a plain vanilla Java class which uses JavaMail API to send a mail message. The JavaMail API comes with an excellent tutorial and FAQ. Name the class Mailer and give it a send() method (or whatever you want). Test it using some tester class with a main() method like this:

    public class TestMail {
        public static void main(String... args) throws Exception {
            // Create mailer.
            String hostname = "smtp.example.com";
            int port = 2525;
            String username = "nobody";
            String password = "idonttellyou";
            Mailer mailer = new Mailer(hostname, port, username, password);
    
            // Send mail.
            String from = "[email protected]";
            String to = "[email protected]";
            String subject = "Interesting news";
            String message = "I've got JavaMail to work!";
            mailer.send(from, to, subject, message);
        }
    }
    

    You can make it as simple or advanced as you want. It doesn't matter, as long as you have a class with which you can send a mail like that.


  3. Now the JSP part, it's not entirely clear why you mentioned JSP, but since a JSP is supposed to represent only HTML, I bet that you'd like to have something like a contact form in a JSP. Here's a kickoff example:

    <form action="contact" method="post">
        <p>Your email address: <input name="email"></p>
        <p>Mail subject: <input name="subject"></p>
        <p>Mail message: <textarea name="message"></textarea></p>
        <p><input type="submit"><span class="message">${message}</span></p>
    </form>
    

    Yes, plain simple, just markup/style it whatever way you want.


  4. Now, create a Servlet class which listens on an url-pattern of /contact (the same as the form is submitting to) and implement the doPost() method (the same method as the form is using) as follows:

    public class ContactServlet extends HttpServlet {
        private Mailer mailer;
        private String to;
    
        public void init() {
            // Create mailer. You could eventually obtain the settings as
            // web.xml init parameters or from some properties file.
            String hostname = "smtp.example.com";
            int port = 2525;
            String username = "nobody";
            String password = "forgetit";
            this.mailer = new Mailer(hostname, port, username, password);
            this.to = "[email protected]";
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String email = request.getParameter("email");
            String subject = request.getParameter("subject");
            String message = request.getParameter("message");
            // Do some validations and then send mail:
    
            try {
                mailer.send(email, to, subject, message);
                request.setAttribute("message", "Mail succesfully sent!");
                request.getRequestDispatcher("/WEB-INF/contact.jsp").forward(request, response);
            } catch (MailException e) {
                throw new ServletException("Mailer failed", e);
            }
        }
    }
    

    That's it. Keep it simple and clean. Each thing has its own clear responsibilities.

like image 63
BalusC Avatar answered Sep 29 '22 20:09

BalusC