Shijith Thomas
Shijith Thomas

Reputation: 43

Sending Mail using JAVA and JSP

here i wanted to send mail using Java and JSP .

index.html

<html>
<head>
    <title>Sending Mail Through JSP</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width">
</head>
<body bgcolor="khaki">
    <form action="mailJSP.jsp">
        <table>
            <tr><td><b><font color="red">To:
                </td>
                <td><b><b><input type="text" name="mail" value="Enter sender mail-id"/><br/>
                </td>
            </tr>
            <tr>
                <td>
                    <b><font color="red">Subject:
                </td>
                <td>
                    <input type="text" name="sub" value="Enter Subject Line"><br/>
                </td>
            </tr>
            <tr>
                <td>
                    <b><font color="red">Message Text:
                </td>
                <td>
                    <textarea rows="12" cols="80" name="mess"></textarea><br/>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="submit" value="Send">
                </td>
                <td>
                    <input type="reset" value="Reset">
                </td>
            </tr>
        </table>
    </form>
</body></html>

mailJSP.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*" %>
<%
//Creating a result for getting status that messsage is delivered or not!
String result;
// Get recipient's email-ID, message & subject-line from index.html page
final String to = request.getParameter("mail");
final String subject = request.getParameter("sub");
final String messg = request.getParameter("mess");

// Sender's email ID and password needs to be mentioned
final String from = "my mail";
final String pass = "my pass";

// Defining the gmail host
String host = "smtp.gmail.com";

// Creating Properties object
Properties props = new Properties();

// Defining properties
props.put("mail.smtp.host", host);
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.user", from);
props.put("mail.password", pass);
props.put("mail.port", "465");

// Authorized the Session object.
Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(from, pass);
    }
});

try {
    // Create a default MimeMessage object.
    MimeMessage message = new MimeMessage(mailSession);
    // Set From: header field of the header.
    message.setFrom(new InternetAddress(from));
    // Set To: header field of the header.
    message.addRecipient(Message.RecipientType.TO,
            new InternetAddress(to));
    // Set Subject: header field
    message.setSubject(subject);
    // Now set the actual message
    message.setText(messg);
    // Send message
    Transport.send(message);
    result = "Your mail sent successfully....";
} catch (MessagingException mex) {
    mex.printStackTrace();
    result = "Error: unable to send mail....";
}
%>`enter code here`
 <title>Sending Mail in JSP</title>
 <h1><center><font color="blue">Sending Mail Using JSP</font></h1>
 <b><center><font color="red">
 <% out.println(result);%></b>

I also want to add that i use Netbeans IDE and Apache Server and i've added all the jar files needed for it, but still i'm getting Exception and ends with "Unable to send". So i'm confused where i made the mistake ?

Stacktrace:

Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:476)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Exception

exception

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 74 in the jsp file: /mailJSP.jsp
The local variable result may not have been initialized
71: %>
72: <title>Sending Mail in JSP</title>
73: <h1><center><font color="blue">Sending Mail Using JSP</font></h1>
74: <b><center><font color="red"><% out.println(result);%></b>

Hope it adds more info !

Upvotes: 0

Views: 1091

Answers (3)

Gabit Kemelov
Gabit Kemelov

Reputation: 106

props.put("mail.smtp.starttls.enable", "true");

you enabled tls but in fact you use ssl (port 465). Try this:

Session mailSession = Session.getInstance(System.getProperties());
        Transport transport = new SMTPTransport(mailSession, new URLName("smtp.gmail.com"));
        transport = mailSession.getTransport("smtps");
        transport.connect("smtp.gmail.com", 465, "[email protected]", "Your-Password-Here");
        MimeMessage m = new MimeMessage(mailSession);
        m.setFrom(new InternetAddress("[email protected]"));
        Address[] toAddr = new InternetAddress[]{ new InternetAddress("to@[email protected]") };
        m.setRecipients(javax.mail.Message.RecipientType.TO, toAddr);
        m.setSubject("set subject if you wish");
        m.setSentDate(new java.util.Date());
        String text = "BODY OF EMAIL";
        m.setContent(text, "text/plain");
        transport.sendMessage(m, m.getAllRecipients());
        transport.close();
       } catch (Exception e) {
           out.println(e.getMessage() + " - " + e.toString());
           e.printStackTrace();

       } 

Upvotes: 0

p1714825
p1714825

Reputation: 46

An error occurred at line: 74 in the jsp file: /mailJSP.jsp

The local variable result may not have been initialized

String result = new String();

initialize the variable

For the second exception

private final String SSL_FACTORY  =  "javax.net.ssl.SSLSocketFactory";
int port = 465;
if ("smtp.gmail.com".equals(host)) {
    props.setProperty("mail.smtp.socketFactory.class",SSL_FACTORY);
    props.setProperty("mail.smtp.socketFactory.fallback","false");
    props.setProperty("mail.smtp.socketFactory.port",String.valueOf(port));
  }

Upvotes: 1

Shubham A.
Shubham A.

Reputation: 2534

This might help you. Worked for me! Also, you should have showed the Stack Trace. It helps to get a better understanding if something unusually has gone wrong with your program.

Upvotes: 0

Related Questions