javamail发送邮件问题

package org.easyshop.ext;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailUtil {
static int port=25;
static String server="smtp.qq.com";
static String from="zxlcd520@qq.com";
static String user="zxlcd520";
static String password="*******";
public static void sendEmail(String email,String subject,String body){
try{
Properties props=new Properties();
props.setProperty("mail.transport.protocol","smtp");

props.put("mail.smtp.host",server);
props.put("mail.smtp.port",String.valueOf(port));
props.put("mail.smtp.auth","true");
//Transport transport=null;
MyAuthenticator myauth = new MyAuthenticator(user, password);
Session session=Session.getDefaultInstance(props,myauth);
session.setDebug(true);
//transport=session.getTransport("smtp");
//transport.connect(server,user,password);
MimeMessage msg=new MimeMessage(session);
msg.setSentDate(new Date());
InternetAddress fromAddress=new InternetAddress(from);
msg.setFrom(fromAddress);
InternetAddress[] toAddress=new InternetAddress[1];
toAddress[0]=new InternetAddress(email);
msg.setRecipients(Message.RecipientType.TO,toAddress);
msg.setSubject(subject,"GBK");
msg.setText(body,"GBK");
msg.saveChanges();
//transport.sendMessage(msg,msg.getAllRecipients());System.out.print("ok");
Transport.send(msg);
}catch(NoSuchProviderException e){
e.printStackTrace();
}catch(MessagingException e){
e.printStackTrace();
}
}
}
class MyAuthenticator extends javax.mail.Authenticator {
private String strUser;
private String strPwd;
public MyAuthenticator(String user, String password) {
this.strUser = user;
this.strPwd = password;
}

protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(strUser, strPwd);
}

}

[color=blue]以上是我javamail完整的代码,但是我调试了很久都不能成功,以下是调试信息.smtp服务器地址换成126的也不行,难道是现在的邮件服务器不支持客户端了?我是第一次用javamail有很多东西不知道请各位指点~~[/color]

[color=red]DEBUG: setDebug: JavaMail version 1.3.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.qq.com", port 25

220 esmtp6.qq.com Esmtp QQ Mail Server
DEBUG SMTP: connected to host "smtp.qq.com", port: 25

EHLO PC-200201012241
250-esmtp6.qq.com
250-PIPELINING
250-SIZE 52428800
250-AUTH LOGIN
250-AUTH=LOGIN
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "52428800"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
NDU0NzczMDk1
334 UGFzc3dvcmQ6
MTk4ODAxMjAzMTQ0NTQ=
454 Authentication failed
javax.mail.SendFailedException: Sending failed;
nested exception is:
class javax.mail.AuthenticationFailedException
at javax.mail.Transport.send0(Transport.java:218)
at javax.mail.Transport.send(Transport.java:80)[/color]
[b]问题补充:[/b]
TO:lewhwa
谢谢。我试了N次终于成功了,是的,程序完全没有问题。
原因是126邮箱已经不支持SMTP/POP3了。我用OUTLOOK连不上。后面用QQ试了半天终于在开启SMTP/POP3后成功了。但问题是这样的,我想实现一个网站注册时给新用户发激活邮件,这样如果像126这样或QQ邮箱(默认是不开启SMTP/POP3的)是收不到我用客户羰发的邮件!那该怎么办呢?
[b]问题补充:[/b]
TO:lewhwa
呵呵,我理解你的意思,但是如果接收方没有POP3会被退信的。我刚刚就试过向126邮箱发信但都被退回了,后面只好向另一个QQ邮箱发~

5个回答

[quote]呵呵,我理解你的意思,但是如果接收方没有POP3会被退信的。我刚刚就试过向126邮箱发信但都被退回了,后面只好向另一个QQ邮箱发~[/quote]
用上面的程序发,邮件都要写全。POP3是收信的,与发信的没有太大的关系。126可能是SMTP禁用,只是对客户端禁用。它肯定能介绍邮件的,要不还有什么存在的必要。否则,它会成为茫茫Internet上的一个孤岛!

[quote]以上是我javamail完整的代码,但是我调试了很久都不能成功,以下是调试信息.smtp服务器地址换成126的也不行,难道是现在的邮件服务器不支持客户端了?我是第一次用javamail有很多东西不知道请各位指点~~[/quote]
不是不支持SMTP客户端,是454错误 Authentication failed (认证失败)!

PS:在QQ 邮件里面可能没有启用SMTP/POP3服务。我刚登记有这样的提示:
您的QQ邮箱激活时间不满14天,故暂时无法设置。

你先用Outlook,Foxmail等[color=red]邮件客户端[/color]先试试是否可以联通。如果激活了SMTP/POP3等,程序应该没有问题。

[quote]谢谢。我试了N次终于成功了,是的,程序完全没有问题。
原因是126邮箱已经不支持SMTP/POP3了。我用OUTLOOK连不上。后面用QQ试了半天终于在开启SMTP/POP3后成功了。但问题是这样的,我想实现一个网站注册时给新用户发激活邮件,这样如果像126这样或QQ邮箱(默认是不开启SMTP/POP3的)是收不到我用客户羰发的邮件!那该怎么办呢?[/quote]
人家开不开启没有关系,只要你开启就可以了。开来你对SMTP的原理理解有误。SMTP是简单邮件传输协议。只要你能通过QQ发送邮件,QQ邮件服务器(相当于邮局)自动把邮件转发给相应的接受人的邮局服务器,接收再通过POP3或者Web方式介绍邮件。OK?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!