下面是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:用户名和密码都是正确的
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:用户名和密码都是正确的
解决方案 »
- 急!为什么键盘监听有的时候可以,有的时候失灵?
- [全部分求助,现金也成]求助:华为MML接口协议调试?
- 帮忙给我几个好的java程序.......
- 重新开贴求解,急,希望可以有人帮忙啊,困饶了两天啦
- 一个很简单的问题...
- 请教高手:有没有java类支持直接解析.tar.gz文件的类,(就像java里的zip和jar类那样不用解压直接解析的)
- 如何使用poi在已存在的excel中插入一行???
- 我是个VB程序员,现在想写JAVA,但不知道怎么学,给点意见,那写书比较适合我!
- 客户端加载 Applet时说找不到类???
- Jbuild里提供了一种按x,y坐标定位组件的方法,我觉得挺方便的,为什么好像大家都不用呢?
- 求助 doc 等 office 文档如何转换为swf
- 关于java的table控件的问题
他的问题跟你一样的,下面是我在那个贴里的回复,
其实你的代码没错 不是程序的问题现在很多免费邮箱为了避免垃圾邮件 关闭了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!!!
1、stmp地址是否正确
2、所使用的邮件服务器是否支持SMTP连接
3、如果支持smtp连接是否需要指定端口
4、邮箱的登录名和密码是否正确
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)
从来没弄明白过。
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();
}
这里有个关于邮件的,你去看一下吧,也许对你有帮助.
首先从这句可以看出,用你的用户名,密码已经成功登陆了,,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();
}
而从这里可以看出,你连接又失败了,我估计你用了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]")});
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,就这样,,, ^_^