下面是debug信息,但是看不出问题出在哪?DEBUG: setDebug: JavaMail version 1.4.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.tom.com", port 25, isSSL false
220 bjapp16.tom.com KBAS is ready
DEBUG SMTP: connected to host "smtp.tom.com", port: 25EHLO 20090324-1136
250-bjapp31
250-LININGPIPE
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
DEBUG SMTP: Found extension "LININGPIPE", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 
AUTH LOGIN
334 VXNlcm5hbWU6
YWltbWl0QHRvbS5jb20=
334 UGFzc3dvcmQ6
YXNkMTIz
235 Authentication successful
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
javax.mail.AuthenticationFailedException: failed to connect
ps:用户名和密码都是正确的

解决方案 »

  1.   

    lz使用的tom邮箱需要在邮箱配置里面配置邮件服务器。可以参见我回的那个贴:http://topic.csdn.net/u/20090429/15/209aadeb-46da-45e6-9e57-730abc765223.html
    他的问题跟你一样的,下面是我在那个贴里的回复,
    其实你的代码没错 不是程序的问题现在很多免费邮箱为了避免垃圾邮件 关闭了POP/SMTP像新浪的邮箱可以这样打开POP/SMTP  邮箱设置-》账户 里面开启POP/SMTP功能就可以了 
    有的免费邮箱不再提供免费的POP/SMTP服务 需要申请他们的付费邮箱 
    像网易的邮箱从2006年11月16日新注册用户,无法使用POP客户端功能。之前注册用户仍能照常使用。 如果要发送邮件的话强烈推荐使用commons-email-1.1.jar这个组件,很好用,它已经封装了javamail,使用很简单,代码就不贴了直接给链接 这里有使用commons-email-1.1.jar的例子http://www.iocblog.net/project/commonsemail/commonsemail-336.html 
    http://blog.csdn.net/lihan6415151528/archive/2008/12/11/3496827.aspx 相信楼主一看就会用了 
    建议Lz去了解一下邮件协议 一定要记得邮箱是否打开了POP/SMTP!!! 
    我刚弄那个也是遇到这个问题折磨了一下午!郁闷 一定要记得邮箱是否打开了POP/SMTP!!! 
      

  2.   

    javax.mail.AuthenticationFailedException: failed to connect 从这句来看应该是连接邮件服务器时失败了,检查下面几点:
    1、stmp地址是否正确
    2、所使用的邮件服务器是否支持SMTP连接
    3、如果支持smtp连接是否需要指定端口
    4、邮箱的登录名和密码是否正确
      

  3.   

    to Jalien我改了个sina邮箱,而且设置了打开pop/smtp还是这个异常
      

  4.   

    to windy731连接时应该没有问题,这是发送的时候出的错!
    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 javax.mail.Transport.send0(Transport.java:190)
    at javax.mail.Transport.send(Transport.java:120)
      

  5.   

    JavaMail试了很长时间
    从来没弄明白过。
      

  6.   

    代码如下:                java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
         Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.sina.com");
            props.put("mail.smtp.port", "25");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.enable","true");
            props.put("mail.from", "********@sina.com");
            
            Session session = Session.getInstance(props, null);
            session.setDebug(true);
            try 
            {
                MimeMessage msg = new MimeMessage(session);
                msg.setFrom();
                msg.setRecipients(Message.RecipientType.TO, "****@126.com");
                msg.setSubject("JavaMail hello world example");
                msg.setSentDate(new Date());
                msg.setText("Hello, world!\n");
                Transport transport = session.getTransport("smtp");
                transport.connect("********@sina.com", "********");
               
                transport.close();
              
            } 
            catch(MessagingException mex) 
            {
             mex.printStackTrace();
            }
      

  7.   

    http://blog.csdn.net/rascalboy520/archive/2008/06/24/2581616.aspx
    这里有个关于邮件的,你去看一下吧,也许对你有帮助.
      

  8.   

    235 Authentication successful 
    首先从这句可以看出,用你的用户名,密码已经成功登陆了,,DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
    DEBUG SMTP: useEhlo true, useAuth true 
    javax.mail.AuthenticationFailedException: failed to connect 
    而从这里可以看出,你连接又失败了,我估计你用了Transport.send(msg)这样的方法,而没用:
    Transport transport=session.getTransport();
    transport.send(msg,new Address[]{new InternetAddress("[email protected]")});因为send是个静态方法,她内部做了下面几件事:
    1,创建Transport对象
    2,建立连接,发送邮件
    3,关闭连接所以会出现这样的情况,我这里有用Transport静态方法发送邮件的例子,你可以复制到main方法里进行测试:Properties props=new Properties();
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", "smtp.qq.com");
    Session session=Session.getInstance(props, 
    new Authenticator()
           {

    protected PasswordAuthentication getPasswordAuthentication()
    {
    return new PasswordAuthentication("用户名","密码");
    }
           }
                                        );
    Message msg=new MimeMessage(session);
    try {
    msg.setContent("<a href='http://www.java-coding.cn'>欢迎你</a>","text/html;charset=gbk");
    msg.setFrom(new InternetAddress("账号@qq.com"));
    msg.setSubject("jjjjjjjjjj");
    msg.setRecipients(RecipientType.TO, InternetAddress.parse("账号@qq.com,账号@qq.com"));

    Transport.send(msg);
    } catch (MessagingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  9.   

    不好意思,刚一着急,一上火,上面打错了一句话:
    而从这里可以看出,你连接又失败了,我估计你用了Transport.send(msg)这样的方法,而没用: 
    Transport transport=session.getTransport(); 
    transport.send(msg,new Address[]{new InternetAddress("[email protected]")}); 
    这句话应该用的Transport 对象的方法transport.sendMessage();
    具体的是这样:
    Transport transport=session.getTransport();
    transport.connect("smtp.qq.com",25,"978008980","mjlw1314deai");
    transport.sendMessage(msg,new Address[]{new InternetAddress("[email protected]")});
      

  10.   

    试试这样:transport.connect(mailServer, username, password); 
      

  11.   

    to java_coding呵呵,天热,别着急!我有一点不明白的是:原来的代码为什么会失败!
      

  12.   

    这样吧,上次给了你用send这个静态方法的例子,这次给你一个用sendMessage方法的例子如下(你也可以复制到main方法里测试):                  Properties props=new Properties();
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.transport.protocol", "smtp");
    Session session=Session.getInstance(props);

    session.setDebug(true);

    Message msg=new MimeMessage(session);
    try {
    msg.setFrom(new InternetAddress("账号@qq.com"));
    msg.setSubject("javamail");
    msg.setText("qqqqqqqqqqqqqqqqqqqqqqqqqq");

    Transport transport=session.getTransport();
    transport.connect("smtp.qq.com",25,"账号","密码");
    transport.sendMessage(msg,new Address[]{new InternetAddress("账号@qq.com")});
    transport.close();
    } catch (AddressException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (MessagingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    发现区别了没?
    注意这个红色的部分,他是不是创建了Transport对象并且发送邮件并且关闭连接 对不对。
    那么再看上面的例子,你发现了它并没有创建Transport对象,也没看到它用connect连接,也没看到它关闭连接,对吧。
    那这些事情由谁做了,对,有Transport这个静态方法send全部做了,不过要注意的是它的确帮我们做了这三件事,但是它并不知道我们要连哪台服务器呀?那怎么办?所以我们在创建Properties对象的时候有了这一句:props.setProperty("mail.host", "smtp.qq.com"); 这样Transport连接的时候回去这个Properties去找,明白了?ok,就这样,,, ^_^