JSP源代码:
<%@ page import="java.util.*" %>
<%@ page import="javax.mail.*" %>
<%@ page import="javax.activation.*" %>
<%@ page import="javax.mail.internet.*" %><%@ page contentType="text/html;charset=GB2312" %><html>
<head>
<title>CH17 - JavaMail2.jsp</title>
</head>
<body>
<h2>利用JavaMail来传送电子邮件 - HTML格式</h2><%
request.setCharacterEncoding("GB2312"); String host = "smtp.163.com";
String rec = "[email protected]";//request.getParameter("To");
String sen = "[email protected]";//request.getParameter("From");
String sub = "Hello";//request.getParameter("Subject");
String mess = "success";//request.getParameter("Message");
String username = "jonathantest";
String password = "aabbcc1122"; boolean sessionDebug = false;
Properties prop = System.getProperties();
prop.put("mail.host",host);
prop.put("mail.transport.protocol","smtp");
prop.put("mail.smtp.auth","true");
javax.mail.Session mailsess = Session.getDefaultInstance(prop);
mailsess.setDebug(sessionDebug);
Message msg = new MimeMessage(mailsess);
msg.setFrom(new InternetAddress(sen));
InternetAddress[] address= {new InternetAddress(rec)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(sub);
msg.setText(mess);
Transport transport = mailsess.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(msg,msg.getAllRecipients());
transport.close();
%>
</body>
</html>
出错提示:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Exception in JSP: /JavaMail.jsp:4542: msg.setText(mess);
43:
44: Transport transport = mailsess.getTransport("smtp");
45: transport.connect(host, username, password);
46: transport.sendMessage(msg,msg.getAllRecipients());
47: transport.close();
48: //transport.send(msg);
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.ServletException: Could not connect to SMTP host: smtp.163.com, port: 25
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:843)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
org.apache.jsp.JavaMail_jsp._jspService(JavaMail_jsp.java:187)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;
nested exception is:
java.net.ConnectException: Connection timed out: connect
com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
javax.mail.Service.connect(Service.java:275)
javax.mail.Service.connect(Service.java:156)
org.apache.jsp.JavaMail_jsp._jspService(JavaMail_jsp.java:90)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.我关闭过防火墙,网络连接正常,但是怎么也连接不上SMTP服务器,请高手们指点!
<%@ page import="java.util.*" %>
<%@ page import="javax.mail.*" %>
<%@ page import="javax.activation.*" %>
<%@ page import="javax.mail.internet.*" %><%@ page contentType="text/html;charset=GB2312" %><html>
<head>
<title>CH17 - JavaMail2.jsp</title>
</head>
<body>
<h2>利用JavaMail来传送电子邮件 - HTML格式</h2><%
request.setCharacterEncoding("GB2312"); String host = "smtp.163.com";
String rec = "[email protected]";//request.getParameter("To");
String sen = "[email protected]";//request.getParameter("From");
String sub = "Hello";//request.getParameter("Subject");
String mess = "success";//request.getParameter("Message");
String username = "jonathantest";
String password = "aabbcc1122"; boolean sessionDebug = false;
Properties prop = System.getProperties();
prop.put("mail.host",host);
prop.put("mail.transport.protocol","smtp");
prop.put("mail.smtp.auth","true");
javax.mail.Session mailsess = Session.getDefaultInstance(prop);
mailsess.setDebug(sessionDebug);
Message msg = new MimeMessage(mailsess);
msg.setFrom(new InternetAddress(sen));
InternetAddress[] address= {new InternetAddress(rec)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(sub);
msg.setText(mess);
Transport transport = mailsess.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(msg,msg.getAllRecipients());
transport.close();
%>
</body>
</html>
出错提示:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Exception in JSP: /JavaMail.jsp:4542: msg.setText(mess);
43:
44: Transport transport = mailsess.getTransport("smtp");
45: transport.connect(host, username, password);
46: transport.sendMessage(msg,msg.getAllRecipients());
47: transport.close();
48: //transport.send(msg);
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.ServletException: Could not connect to SMTP host: smtp.163.com, port: 25
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:843)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
org.apache.jsp.JavaMail_jsp._jspService(JavaMail_jsp.java:187)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;
nested exception is:
java.net.ConnectException: Connection timed out: connect
com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
javax.mail.Service.connect(Service.java:275)
javax.mail.Service.connect(Service.java:156)
org.apache.jsp.JavaMail_jsp._jspService(JavaMail_jsp.java:90)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.我关闭过防火墙,网络连接正常,但是怎么也连接不上SMTP服务器,请高手们指点!
解决方案 »
- There is no Action mapped for action name undefined 报错请高手指教
- my eclipse tomcat问题!
- spring3、struts2用注解整合的问题
- 在页面中有个.jar文件,为什么在铁通网内显示不了?
- 利用jspSmartUpload下载文件时候认类型?
- 我的jsp程序中有的页面中某些汉字显示为?,怎么办?
- JavaWeb应用中大文件的断点续传的实现
- 在weblogic环境下运行一个servlet真的这么麻烦么?
- 我是个新手,写了一个连接数据库的类,但就是一直出错,请帮帮忙
- 为什么页面无法更新?
- 求教关于displaytag显示问题
- 谁有哪种RSS聚合系统的源代码啊?
props.put("mail.pop3.host", popHost);
props.put("mail.smtp.auth","true");
只要有以上3项就能收发email了,当然要重写验证哪个类.
import java.util.*;
import javax.mail.internet.*;
import javax.mail.*;public class MailUtil {
private Properties props=new Properties();
private Session mailSession;
private Authenticator auth;
private Store store;
private Transport transport;
private String userName;
private String password;
private Folder folder; public MailUtil() {
} public MailUtil(String smtpHost, String popHost, String userName,
String password) {
props.put("mail.smtp.host", smtpHost);
props.put("mail.pop3.host", popHost);
props.put("mail.smtp.auth","true");
this.userName = userName;
this.password = password;
this.setAuth();
this.mailSession = Session.getDefaultInstance(props, auth);
} public Authenticator getAuth() {
return auth;
} public Properties getProps() {
return props;
} public Session getMailSession() {
return mailSession;
} public Store getStore() {
return store;
} public Transport getTransport() {
return transport;
} public void setTransport(Transport transport) {
this.transport = transport;
} public void setStore(Store store) {
this.store = store;
} public void setMailSession(Session mailSession) {
this.mailSession = mailSession;
} public void setProps(Properties props) {
this.props = props;
} public void setAuth() {
this.auth = new UserAuth(userName, password);
} public void setAuth(String userName, String password) {
this.auth = new UserAuth(userName, password);
}
public boolean sendMail(String from, String to, String subject, String text)throws Exception {
try {
Message newMessage = new MimeMessage(this.mailSession);
newMessage.setFrom(new InternetAddress(from));
newMessage.setRecipient(Message.RecipientType.TO,
new InternetAddress(to));
newMessage.setSubject(subject);
newMessage.setSentDate(new Date());
newMessage.setText(text);
transport = mailSession.getTransport("smtp");
transport.send(newMessage);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
} public Message[] getMail() {
Message[] message = new Message[300]; try {
store = mailSession.getStore("pop3");
store.connect();
folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
message = folder.getMessages();
} catch (Exception e) {
e.printStackTrace();
}
return message;
} public static void main(String[] args){
MailUtil test=new MailUtil("smtp.126.com","pop3.126.com","","");
try{
if(test.sendMail("[email protected]","[email protected]","test","fsdjflsjdflsjdflsdjfsdfsdfsdfsd")){
System.out.println("send success");
}
for (int i = 0; i < test.getMail().length; i++) {
System.out.println((test.getMail()[i]).getContent());
Thread.sleep(1000);
System.out.println();
}
System.out.println("receive success");
}catch(Exception e){
e.printStackTrace();
System.out.println("failed");
}finally{
try{
test.folder.close(true);
test.store.close();
}catch(Exception e){
e.printStackTrace();
}
}
System.exit(0);
}
}
class UserAuth extends Authenticator {
private String userName;
private String password;
public UserAuth(String userName, String password) {
this.userName = userName;
this.password = password;
} public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
package com.utils;import java.util.Properties;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;import sun.misc.BASE64Encoder;//import com.me.util.*;public class sendMail { private MimeMessage mimeMsg; // MIME邮件对象 private Session session; // 邮件会话对象 private Properties props; // 系统属性 private String username = ""; // smtp认证用户名和密码 private String password = ""; private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象 public sendMail() { // setSmtpHost(getConfig.mailHost);//如果没有指定邮件服务器,就从getConfig类中获取
createMimeMessage(); } public sendMail(String smtp) { setSmtpHost(smtp);
createMimeMessage(); } /**
* @param hostName
* String
*/
public void setSmtpHost(String hostName) { System.out.println("设置系统属性:mail.smtp.host = " + hostName);
if (props == null)
props = System.getProperties(); // 获得系统属性对象 props.put("mail.smtp.host", hostName); // 设置SMTP主机 } /**
* @return boolean
*/
public boolean createMimeMessage() {
try {
System.out.println("准备获取邮件会话对象!");
session = Session.getDefaultInstance(props, null); // 获得邮件会话对象
} catch (Exception e) {
System.err.println("获取邮件会话对象时发生错误!" + e);
return false;
} System.out.println("准备创建MIME邮件对象!"); try { mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
mp = new MimeMultipart(); return true; } catch (Exception e) { System.err.println("创建MIME邮件对象失败!" + e);
return false;
}
} /**
* @param need
* boolean
*/
public void setNeedAuth(boolean need) { System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
if (props == null)
props = System.getProperties(); if (need) { props.put("mail.smtp.auth", "true");
} else { props.put("mail.smtp.auth", "false");
}
} /**
* @param name
* String
* @param pass
* String
*/
public void setNamePass(String name, String pass) {
username = name;
password = pass;
} /**
* @param mailSubject
* String
* @return boolean
*/
public boolean setSubject(String mailSubject) {
System.out.println("设置邮件主题!");
try {
mimeMsg.setSubject(mailSubject);
return true;
} catch (Exception e) {
System.err.println("设置邮件主题发生错误!");
return false;
}
} /**
* @param mailBody
* String
*/
public boolean setBody(String mailBody) {
try {
BodyPart bp = new MimeBodyPart();
bp.setContent(
"<meta http-equiv=Content-Type content=text/html; charset=gb2312>"
+ mailBody, "text/html;charset=GB2312");
mp.addBodyPart(bp); return true;
} catch (Exception e) {
System.err.println("设置邮件正文时发生错误!" + e);
return false;
}
} /**
* @param name
* String
* @param pass
* String
*/
public boolean addFileAffix(String filename) { System.out.println("增加邮件附件:" + filename); try {
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
BASE64Encoder enc = new BASE64Encoder();
bp.setFileName("=?GBK?B?"+enc.encode((fileds.getName()).getBytes())+"?=");
// bp.setFileName(fileds.getName()); mp.addBodyPart(bp); return true;
} catch (Exception e) {
System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
return false;
}
} /**
* @param name
* String
* @param pass
* String
*/
public boolean setFrom(String from) {
System.out.println("设置发信人!");
try {
mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人
return true;
} catch (Exception e) {
return false;
}
} /**
* @param name
* String
* @param pass
* String
*/
public boolean setTo(String to) {
if (to == null)
return false; try {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress
.parse(to));
return true;
} catch (Exception e) {
return false;
} } /**
* @param name
* String
* @param pass
* String
*/
public boolean setCopyTo(String copyto) {
if (copyto == null)
return false;
try {
mimeMsg.setRecipients(Message.RecipientType.CC,
(Address[]) InternetAddress.parse(copyto));
return true;
} catch (Exception e) {
return false;
}
} /**
* @param name
* String
* @param pass
* String
*/
public boolean sendout() {
try {
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在发送邮件...."); Session mailSession = Session.getInstance(props, null);
Transport transport = mailSession.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"), username,
password);
transport.sendMessage(mimeMsg, mimeMsg
.getRecipients(Message.RecipientType.TO)); System.out.println("发送邮件成功!");
transport.close(); return true;
} catch (Exception e) { System.err.println("邮件发送失败!" + e);
return false;
} } /**
* Just do it as this
*/
public static void main(String[] args) { // mailbody->发送 的邮件 内容
String mailbody = "<meta http-equiv=Content-Type content=text/html; charset=gb2312>"
+ "<div align=center><table border=1><tr><td>姓名</td><td>性别</td></tr><tr><td><font color=blue>大白菜</font></td><td>120</td></tr></table></div>"; // themail表示要发送到那个smtp上去(转发的地位)
sendMail themail = new sendMail("smtp.sohu.com"); // 是否要验证用户身份
themail.setNeedAuth(true); // 邮件标题
if (themail.setSubject("大白菜say hello!") == false)
return;
if (themail.setBody(mailbody) == false)
return; // 指明发送到那个用户
if (themail.setTo("[email protected]") == false)
return; // 显示是谁发来得
if (themail.setFrom("[email protected]") == false)
return;
// 表明要带的附件
if (themail.addFileAffix("") == false)
return;
themail.setNamePass("yubinbin678", "123123"); if (themail.sendout() == false)
return;
}
}
javax.mail.MessagingException: Could not connect to SMTP host: smtp.126.com, port: 25;
nested exception is:
java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at asp.email.EmailSend.emailSend(EmailSend.java:62)
at org.apache.jsp.email.mailAction_jsp._jspService(mailAction_jsp.java:194)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at asp.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:27)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 28 more