package com.util.mail;import java.util.Date;
import java.util.Properties;import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
 * 简单邮件发送器
 * @author Administrator
 *
 */
public class SimpleMailSender { /**
 * 简单文本格式邮件发送
 * @param mailInfo
 * @return
 */
public boolean sendTextMail(MailSenderInfo  mailInfo){
MyAuthenticator  authenticator = null;
Properties pro = mailInfo.getProperties();
if(mailInfo.isValidate()){
//如果需要身份验证
authenticator = new MyAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());
}
//根据邮件的会话属性和密码验证器构造一个发送邮件的Session
Session sendMailSession  = Session.getDefaultInstance(pro, authenticator);

//根据session来创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);

//创建邮件发送者地址
try {
Address from = new InternetAddress(mailInfo.getFromAddress());

//设置邮件消息的发送者
mailMessage.setFrom(from);

//创建邮件的接受者的地址,并设置在邮件的消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to);

//设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());

//设置邮件消息发送的时间
mailMessage.setSentDate(new Date());

//设置邮件消息的主题内容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);

//发送邮件
Transport.send(mailMessage);
return true;

} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
return false;
}

}package com.util.mail;import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;public class MyAuthenticator extends Authenticator { String userName = null; String password = null; public MyAuthenticator() {
} public MyAuthenticator(String userName, String password) {
super();
this.userName = userName;
this.password = password;
} protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}}
package com.util.mail;import java.util.Properties;public class MailSenderInfo { private String mailServerHost; // 发送邮件的服务地址 private String mailServerPort;// 服务器的端口 private String fromAddress;// 邮件发送者的地址 private String toAddress;// 邮件接受者的地址 private String userName;// 登录用户名 private String password;// 密码 private boolean validate = false;// 是否需要身份验证 private String subject;// 邮件主题 private String content;// 邮件内容 private String[] attachFileNames;// 邮件附件的文件名 /**
 * 获得邮件会话的属性
 * 
 * @return
 */
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", this.validate ? true : false);
return p;
} public String[] getAttachFileNames() {
return attachFileNames;
} public void setAttachFileNames(String[] attachFileNames) {
this.attachFileNames = attachFileNames;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} public String getFromAddress() {
return fromAddress;
} public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
} public String getMailServerHost() {
return mailServerHost;
} public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
} public String getMailServerPort() {
return mailServerPort;
} public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getSubject() {
return subject;
} public void setSubject(String subject) {
this.subject = subject;
} public String getToAddress() {
return toAddress;
} public void setToAddress(String toAddress) {
this.toAddress = toAddress;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public boolean isValidate() {
return validate;
} public void setValidate(boolean validate) {
this.validate = validate;
}
}package com.util.mail;/**
 * 发送邮件
 * @author Administrator
 *
 */
public class SendMail { /**
 * @param args
 */
public static void main(String[] args) {
SendMail test = new SendMail();
test.launch();
}
public void launch(){

//这个类主要是用来设置邮件的 
MailSenderInfo mailInfo  = new MailSenderInfo();
// mailInfo.setMailServerHost("smtp.163.com");
mailInfo.setMailServerHost("smtp.126.com");
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
mailInfo.setUserName("[email protected]");
mailInfo.setPassword("*******");//设置邮箱的密码
mailInfo.setFromAddress("[email protected]");
mailInfo.setToAddress("[email protected]");
mailInfo.setSubject("我的邮件测试程序");
mailInfo.setContent("fdfjlsjfdslfjdlkflksdjflksdfsd");//设置邮件的内容

//这个类主要是用来发送邮件的 
SimpleMailSender sms = new SimpleMailSender();
sms.sendTextMail(mailInfo);
}
}
为什么会报com.sun.mail.smtp.SMTPSendFailedException: 550 ???§±????¨异常
我对java mail 一点都不了解 
还请各位大侠帮忙

解决方案 »

  1.   

    mailInfo.setUserName("[email protected]"); 这个SMTP服务可用吗?现在公网上的MAIL服务一般都是被禁止个人使用的
      

  2.   

    既然已經報出這個錯誤來了,就證明網路都是正常的。smtp server也是正常的。550錯誤和認證相關。可以捷包看一下,如果是一開始進行用戶名和密碼驗證的時候出錯的話。有可能報這個錯,好像還有一種情況會報這個錯誤,就是你的發信人地址和所聲明的地址不一致時,也會報錯。我看你最後一句發送郵件時用的是:
    //发送邮件
    Transport.send(mailMessage); 
    你試試用
    Transport.sendMessage(mailMessage, to);
    就是這個API : sendMessage(Message msg, Address[] addresses) 。Good luck.
      

  3.   

    activation.jar
    mail.jar
    这连个包都加进去了,这个与版本有关系吗