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服务器,请高手们指点!

解决方案 »

  1.   

    props.put("mail.smtp.host", smtpHost);不是prop.put("mail.host",host);
    props.put("mail.pop3.host", popHost);
    props.put("mail.smtp.auth","true");
    只要有以上3项就能收发email了,当然要重写验证哪个类.
      

  2.   

    下面是一个我写的实现,你看看
    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);
        }
    }
      

  3.   

    Could not connect to SMTP host: smtp.163.com, port: 25服务器地址没错吧
      

  4.   

    不知道这个可以不可以!~
    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;
    }
    }
      

  5.   


    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