使用JAVA和JSP发送邮件

时间:2015-01-11 17:05:14

标签: java html jsp email javamail

这里我想用Java和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>

我还想补充一点,我使用的是Netbeans IDE和Apache Server,并且我已经添加了所需的所有jar文件,但我仍然得到了Exception并以&#34结束;无法发送& #34 ;.所以我在弄错的地方感到困惑?

堆栈跟踪:

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

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>

希望它增加更多信息!

3 个答案:

答案 0 :(得分:1)

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

本地变量结果可能尚未初始化

String result = new String();

初始化变量

第二个例外

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));
  }

答案 1 :(得分:0)

This可能会对您有所帮助。为我工作!此外,您应该显示堆栈跟踪。如果你的程序异常出错,它有助于更​​好地理解。

答案 2 :(得分:0)

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

你启用了tls但实际上你使用的是ssl(端口465)。 试试这个:

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@email.com", "Your-Password-Here");
        MimeMessage m = new MimeMessage(mailSession);
        m.setFrom(new InternetAddress("from@email.addr"));
        Address[] toAddr = new InternetAddress[]{ new InternetAddress("to@email@email.addr") };
        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();

       }