JavaMail发送邮件

hft19850423 2009-05-05 09:59:59
下面是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: 25

EHLO 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:用户名和密码都是正确的
...全文
762 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhyjxx 2010-07-18
  • 打赏
  • 举报
回复
呼呼,原来是函数用错的原因!
java_coding 2009-05-07
  • 打赏
  • 举报
回复
这样吧,上次给了你用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,就这样,,, ^_^
hft19850423 2009-05-06
  • 打赏
  • 举报
回复
to java_coding

呵呵,天热,别着急!



我有一点不明白的是:原来的代码为什么会失败!
tobeno2 2009-05-06
  • 打赏
  • 举报
回复
试试这样:transport.connect(mailServer, username, password);
starscc 2009-05-06
  • 打赏
  • 举报
回复
关注下
java_coding 2009-05-06
  • 打赏
  • 举报
回复
不好意思,刚一着急,一上火,上面打错了一句话:
而从这里可以看出,你连接又失败了,我估计你用了Transport.send(msg)这样的方法,而没用:
Transport transport=session.getTransport();
transport.send(msg,new Address[]{new InternetAddress("xxx@sina.com")});
这句话应该用的Transport 对象的方法transport.sendMessage();
具体的是这样:
Transport transport=session.getTransport();
transport.connect("smtp.qq.com",25,"978008980","mjlw1314deai");
transport.sendMessage(msg,new Address[]{new InternetAddress("978008980@qq.com")});
java_coding 2009-05-06
  • 打赏
  • 举报
回复
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("xxx@sina.com")});

因为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();
}
rascalboy520 2009-05-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/rascalboy520/archive/2008/06/24/2581616.aspx
这里有个关于邮件的,你去看一下吧,也许对你有帮助.
jxst051665 2009-05-06
  • 打赏
  • 举报
回复
mark,过几天尝试下javamail
hft19850423 2009-05-06
  • 打赏
  • 举报
回复
代码如下:

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();
}
Buddha_sy 2009-05-06
  • 打赏
  • 举报
回复
JavaMail试了很长时间
从来没弄明白过。
bijjyy 2009-05-06
  • 打赏
  • 举报
回复
想了解一下
wanwang8 2009-05-05
  • 打赏
  • 举报
回复
顶,楼主
胡须棉花糖 2009-05-05
  • 打赏
  • 举报
回复
没看出哪的问题,把代码贴一下
Jalien 2009-05-05
  • 打赏
  • 举报
回复
贴代码出来看看~
hft19850423 2009-05-05
  • 打赏
  • 举报
回复
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)
hft19850423 2009-05-05
  • 打赏
  • 举报
回复
to Jalien

我改了个sina邮箱,而且设置了打开pop/smtp

还是这个异常
windy731 2009-05-05
  • 打赏
  • 举报
回复
javax.mail.AuthenticationFailedException: failed to connect

从这句来看应该是连接邮件服务器时失败了,检查下面几点:
1、stmp地址是否正确
2、所使用的邮件服务器是否支持SMTP连接
3、如果支持smtp连接是否需要指定端口
4、邮箱的登录名和密码是否正确
Jalien 2009-05-05
  • 打赏
  • 举报
回复
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!!!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧