代码改变世界

java发送邮件

2011-12-04 16:55  Batys  阅读(419)  评论(1编辑  收藏  举报

需要下载一个Mail.jar包

【注】如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不统一,解决方法如下: 删除Java EE 5 Libraries/javaee.jar/mail里的包有东西.

具体方法如下:
方法一:用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar ,然后删除mail,一切就ok了. (个人推荐)

方法二:
JavaEE版本和JavaMail的版本不一致,请将sun公司上下载最新版本.
   例如:javaMail 1.3以下的如果在javaEE5上就会出现上面的错误,
   但如果在javaEE1.4下就正常.(但本人试过,javaEE5+javaMail1.4还是有一样的问题)
   因为javaEE5中包含有javaMail的类但是却不全面,所以出本身的JavaMail
   包冲突.

 

具体实现如下:

MailSenderInfo.java

package com.util.mail;
/** *//**   
* 发送邮件需要使用的基本信息  
*/
import java.util.Properties;
public class MailSenderInfo {
// 发送邮件的服务器的IP和端口
 private String mailServerHost; 
 private String mailServerPort = "25"; 
 // 邮件发送者的地址 
 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;
 /** *//**   
   * 获得邮件会话属性   
   */ 
 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", validate ? "true" : "false"); 
    return p; 
 } 
 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 boolean isValidate() { 
  return validate; 
 }  
 public void setValidate(boolean validate) { 
  this.validate = validate; 
 }  
 public String[] getAttachFileNames() { 
  return attachFileNames; 
 }  
 public void setAttachFileNames(String[] fileNames) { 
  this.attachFileNames = fileNames; 
 }  
 public String getFromAddress() { 
  return fromAddress; 
 } 
 public void setFromAddress(String fromAddress) { 
  this.fromAddress = fromAddress; 
 }  
 public String getPassword() { 
  return password; 
 }  
 public void setPassword(String password) { 
  this.password = password; 
 }  
 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 String getSubject() { 
  return subject; 
 }  
 public void setSubject(String subject) { 
  this.subject = subject; 
 }  
 public String getContent() { 
  return content; 
 }  
 public void setContent(String textContent) { 
  this.content = textContent; 
 } 
} 

MyAuthenticator.java

package com.util.mail; 
  
import javax.mail.*; 
 
public class MyAuthenticator extends Authenticator{ 
  String userName=null; 
  String password=null; 
    
  public MyAuthenticator(){ 
  } 
  public MyAuthenticator(String username, String password) {  
    this.userName = username;  
    this.password = password;  
  }  
  protected PasswordAuthentication getPasswordAuthentication(){ 
    return new PasswordAuthentication(userName, password); 
  } 
} 


SimpleMailSender.java

 

package com.util.mail; 

import java.util.Date;
import java.util.Properties; 
import javax.mail.Address;
import javax.mail.BodyPart;  
import javax.mail.Message;  
import javax.mail.MessagingException;  
import javax.mail.Multipart;  
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeBodyPart;  
import javax.mail.internet.MimeMessage;  
import javax.mail.internet.MimeMultipart; 

/** *//** 
* 简单邮件(不带附件的邮件)发送器 
http://www.bt285.cn BT下载
*/
public class SimpleMailSender{
/** *//** 
 * 以文本格式发送邮件 
 * @param mailInfo 待发送的邮件的信息 
 */
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);  
 try {  
 // 根据session创建一个邮件消息  
 Message mailMessage = new MimeMessage(sendMailSession);  
 // 创建邮件发送者地址  
 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 (MessagingException ex) {  
   ex.printStackTrace();  
 }  
 return false;  
  }

/**
* 以HTML格式发送邮件 
* @param mailInfo 待发送的邮件信息 
*/  
  public static boolean sendHtmlMail(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);  
 try {  
 // 根据session创建一个邮件消息  
 Message mailMessage = new MimeMessage(sendMailSession); 
 // 创建邮件发送者地址  
 Address from = new InternetAddress(mailInfo.getFromAddress()); 
 // 设置邮件消息的发送者  
 mailMessage.setFrom(from);
 // 创建邮件的接收者地址,并设置到邮件消息中  
 Address to = new InternetAddress(mailInfo.getToAddress());  
 // Message.RecipientType.TO属性表示接收者的类型为TO  
 mailMessage.setRecipient(Message.RecipientType.TO,to);  
 // 设置邮件消息的主题  
 mailMessage.setSubject(mailInfo.getSubject());  
 // 设置邮件消息发送的时间  
 mailMessage.setSentDate(new Date());  
 // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象  
 Multipart mainPart = new MimeMultipart();  
 // 创建一个包含HTML内容的MimeBodyPart  
 BodyPart html = new MimeBodyPart();  
 // 设置HTML内容  
 html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");  
 mainPart.addBodyPart(html);  
 // 将MiniMultipart对象设置为邮件内容 
 mailMessage.setContent(mainPart); 
 // 发送邮件 
 Transport.send(mailMessage); 
 return true; 
 } catch (MessagingException ex) { 
 ex.printStackTrace(); 
} 
 return false; 
 } 
} 

 

test.java

 

package com.util.mail;

public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//这个类主要是设置邮件   
	 MailSenderInfo mailInfo = new MailSenderInfo();
  mailInfo.setMailServerHost("smtp.163.com");  
  mailInfo.setMailServerPort("25");  
  mailInfo.setValidate(true);  
  mailInfo.setUserName("yanyuanyuan101@163.com");  
  mailInfo.setPassword("100982");//您的邮箱密码  
  mailInfo.setFromAddress("yanyuanyuan101@163.com");  
 // mailInfo.setToAddress("315905059@qq.com");  
  mailInfo.setToAddress("msn.leonard@gmail.com"); 
  mailInfo.setSubject("设置邮箱标题 如http://www.guihua.org 中国桂花网");  
  mailInfo.setContent("设置邮箱内容 如http://www.guihua.org 中国桂花网 是中国最大桂花网站==");  
   //这个类主要来发送邮件   
  SimpleMailSender sms = new SimpleMailSender();
 sms.sendTextMail(mailInfo);//发送文体格式  
 sms.sendHtmlMail(mailInfo);//发送html格式 
	}

}