我正在尝试设计一个可以发送电子邮件的jsp页面,但是在jsp代码中使用时,在核心java中正常运行的代码给了我异常。我相信我已经将我的mail.jar妥善放入了lib。
当前的jsp代码是:
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
<%@ page import="java.util.Properties" %>
<%@ page import="javax.mail.Message" %>
<%@ page import="javax.mail.MessagingException" %>
<%@ page import="javax.mail.PasswordAuthentication" %>
<%@ page import="javax.mail.Session" %>
<%@ page import="javax.mail.Transport" %>
<%@ page import="javax.mail.internet.InternetAddress" %>
<%@ page import="javax.mail.internet.MimeMessage" %>
<%
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("prakash.d2222","**************");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from@no-spam.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("prakash_d22@rediffmail.com"));
message.setSubject("hi");
message.setText("12345" +
"\n\n No spam to my email, please!");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
%>
</body>
</html>
我看到的错误是:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 37 in the jsp file: /pizza/page/ssl.jsp
The constructor MimeMessage(HttpSession) is undefined
答案 0 :(得分:7)
正如错误消息告诉您的那样,there is no MimeMessage
constructor that takes an HttpSession
。 是一个带javax.mail.Session
的构造函数,它似乎是您尝试使用的构建函数,但HttpSession
不是javax.mail.Session
。< / p>
传递您当前正在放弃的Session.getDefaultInstance()
返回的值。
Session mailSession = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("prakash.d2222","**************");
}
});
// ...
Message message = new MimeMessage(mailSession);
答案 1 :(得分:1)
Message message = new MimeMessage(session ); // error
在JSP页面会话中是一个隐式对象,实际上是javax.servlet.http.HttpSession。
我认为您对HttpSession和邮件javax.mail.Session.Session感到困惑。改变你 代码如 - ...
Session mailSession = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication
getPasswordAuthentication() {
return new PasswordAuthentication
("prakash.d2222","**************");
}
});
...
Message message = new MimeMessage(mailSession );
...