问题描述: 
        我想用java代码来访问我自己的163.com邮箱.可是报错了代码如下:
        public boolean GetMessage(){

boolean b = false;
Properties prop = System.getProperties();
prop.put("mail.pop3.host","220.181.31.8");//指定邮件服务器名 220.181.31.8是163.com的host
prop.put("mail.pop3.port","25");//指定发送端口
prop.put("mail.transport.protocol", "pop3");//指定发送的协议


//邮件会话对象
Session session =Session.getInstance(prop);
try {
//邮箱对象
Store store= session.getStore("pop3");
//连接
store.connect("tytyler","inrcel");
//文件夹对象
Folder folder = store.getFolder("INBOX");
//邮件
Message[] message = folder.getMessages();
                     
                        //打印结果
                           System.out.print(message.length);
                       b = true;

} catch (Exception e) {
// TODO: handle exception
                        b  = false;
e.printStackTrace();
}
         return b;
}错误信息:
       
  nested exception is:
java.net.ConnectException: Connection refused: connect
at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:160)
at javax.mail.Service.connect(Service.java:291)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:192)
at com.eatsun.eamildemo.SendEmail.SendMessage(SendEmail.java:39)
at com.eatsun.eamildemo.SendEmail.main(SendEmail.java:84)
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:267)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
at com.sun.mail.pop3.Protocol.<init>(Protocol.java:91)
at com.sun.mail.pop3.POP3Store.getPort(POP3Store.java:213)
at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:156)
... 5 more

解决方案 »

  1.   

      import javax.mail.PasswordAuthentication; 
    163的我也联不上
    我只连上新浪的
    关注
      

  2.   

    163发信是要通过认证的,给你看我以前写的代码:import java.util.Properties;//类似于hashmap,提供键值对的集合
    import javax.mail.*;
    import javax.mail.internet.*;public class Sender {
    //邮件服务器的ip、发件人、收件人、邮件标题、内容
    public void sendMail(String host, String from, String to, String subject, String content) throws AddressException, MessagingException{
    //创建session
    Properties pro = new Properties();
    pro.put("mail.smtp.host", host);//指定邮件服务器的ip地址
    //下面这个第二个参数必须用字符串来设置为true,否则会报错
    pro.put("mail.smtp.auth", "true");//验证发件人是否合法用户
    //第二个参数的作用是:当邮件服务器需要认证的时候,会自动调用Authenticator里的getPasswordAuthentication()方法来取得用户名、密码信息
    Session se = Session.getDefaultInstance(pro, new auth());
    //创建邮件消息
    MimeMessage msg = new MimeMessage(se);
    //发件人
    msg.setFrom(new InternetAddress(from));
    msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
    msg.setSubject(subject);
    msg.setText(content);
    //连接到邮件服务器,并发送邮件
    Transport tran = se.getTransport("smtp");
    tran.connect();//连接

    tran.sendMessage(msg, msg.getAllRecipients());
    tran.close();//关闭连接
    }
    //邮箱服务器需要认证的时候,需要写个类继承Authenticator这个抽象类
    public class auth extends Authenticator{
    //Authenticator中的唯一一个方法,作用是返回用来认证的用户名和密码
    public PasswordAuthentication getPasswordAuthentication() {
                            //此处的username,password对应你163邮箱的账号名称和密码
    return new PasswordAuthentication("username", "password");
    }
    }
    }
      

  3.   

    漏了个测试类:public class testSender { public static void main(String[] args) {
    String host = "smtp.163.com";
    String from = "[email protected]";
    String to = "[email protected]";//收件人必须是服务器里存在的帐户
    String subject = "测试~2";
    String content = "测试一下~";
    Sender sender = new Sender();

    try {
    sender.sendMail(host, from, to, subject, content);
    } catch (AddressException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (MessagingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }}
      

  4.   

    foxkissme 我测试了你上面写的代码.报错了.连接不上.javax.mail.AuthenticationFailedException: failed to connect
    at javax.mail.Service.connect(Service.java:322)
    at javax.mail.Service.connect(Service.java:172)
    at javax.mail.Service.connect(Service.java:121)
    at com.eatsun.eamildemo.Sender.sendMail(Sender.java:25)
    at com.eatsun.eamildemo.TestSender.main(TestSender.java:18)
      

  5.   

    看了你发的消息,你写错了163的smtp服务器地址,应该填:smtp.163.com而不是你ping 163.com得到得ip,你得到的那个ip只是163.com这个域名对应的ip,而smpt.163.com这个域名应该指向得的是另一个地址。
      

  6.   

    修改过来还是没有用! smtp.163.compublic static void main(String[] args) {        String host = "smtp.163.com";
            String from = "[email protected]";
            String to = "[email protected]";//收件人必须是服务器里存在的帐户
            String subject = "测试~2";
            String content = "测试一下~";
            Sender sender = new Sender();
            
            try {
                sender.sendMail(host, from, to, subject, content);
            } catch (AddressException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
      

  7.   


    <%@ page language="java" import="javax.mail.*" pageEncoding="gb2312"%><table border="1" align="center">
      <tr colspan="5">
        <th>以下是邮箱中的内容</th>
      </tr>
      <tr>
        <td>序号</td>
        <td>标题</td>
        <td>发送地址</td>
        <td>邮件大小</td>
        <td>发送时间</td>
      </tr>
    <%
    Session mailsession=Session.getDefaultInstance(System.getProperties(),null);//创建一个session对象
    mailsession.setDebug(false);

    Store store=mailsession.getStore("pop3");
    store.connect("pop3.163.com","用户名","密码");
    Folder folder=store.getFolder("INBOX");
    folder.open(Folder.READ_ONLY);

    Message message[]=folder.getMessages();
    out.println("您收件箱中共有"+message.length+"封邮件:<br>");

    for(int i=0;i<message.length;i++)
    {
    out.print("<tr><td>"+(i+1)+"</td>");
    out.print("<td><a href='#'>"+message[i].getSubject()+"</td>");
    out.print("<td>"+message[i].getFrom()[0].toString()+"</td>");
    out.print("<td>"+message[i].getSize()+"</td>");
    out.print("<td>"+message[i].getSentDate()+"</td>");
    }
    folder.close(true);
    store.close();
    %>
    </table>
    LZ参考一下!!
      

  8.   

    连接不上.
    错误信息
    javax.mail.AuthenticationFailedException: failed to connect
    at javax.mail.Service.connect(Service.java:322)
    at javax.mail.Service.connect(Service.java:172)
    at javax.mail.Service.connect(Service.java:121)
    at com.eatsun.eamildemo.Sender.sendMail(Sender.java:25)
    at com.eatsun.eamildemo.TestSender.main(TestSender.java:18)
        调用了你的发送方法    s.sendMail("smtp.163.com", "[email protected]", "[email protected]", "Hello", "HelloWord");  foxkissme:
      要不你写个webservice 我直接调用你的服务接口.看下行不行