package javax.util.zz; 
import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; import java.util.*; import java.net.*; import java.io.*; 
 /**  * <p>邮件发送类</p>  * <p>支持普通模式和HTML模式,可发送多个附件,支持SMTP服务器认证。<br>基于javamail开发,使用时请将javamail包含在classpath系统变量中。</p>  * <p><br>使用说明:</p>  * <p>Mail mail=new Mail();</p>  * <p>mail.setXXX ....</p>  * <p>mail.send();<br></p>  * @author   * @version 1.0  */ public class Mail { 
  private Address[] to = null;   private Address[] cc = null;   private Address[] bcc = null;   private String from = "";   private String title = "";   private String content = "";   private String smtpHost = "";   private int smtpPort = 25;   private String content_type = MODE_TEXT;   private String htmlMailDesc = ""; 
  private String smtpUser = "";   private String smtpPassword = "";   private boolean isAuthenticationSMTP = false; 
  private Vector vFiles = new Vector();   private Vector vURLs = new Vector(); 
  public Mail() {   } 
  /**    * 设置SMTP服务器,使用默认端口    * @param server SMTP服务器IP    */   public void setSmtpHost(String server) {     this.smtpHost = server;   } 
  /**    * 设置SMTP服务器    * @param server SMTP服务器IP    * @param port 端口    */   public void setSmtpHost(String server, int port) {     this.smtpHost = server;     this.smtpPort = port;   } 
  /**    * 设置收件人地址    * @param aEmail 收件人Email地址    */   public void setTo(String aEmail) {     String[] s = new String[1];     s[0] = aEmail;     this.to = getAddress(s);   } 
  /**    * 设置多个收件人地址    * @param Emails 收件人Email地址    */   public void setTo(String[] Emails) {     this.to = getAddress(Emails);   } 
  /**    * 设置抄送地址    * @param aEmail 抄送地址    */   public void setCC(String aEmail) {     String[] s = new String[1];     s[0] = aEmail;     this.cc = getAddress(s);   } 
  /**    * 设置多个抄送地址    * @param Emails 抄送地址    */   public void setCC(String[] Emails) {     this.cc = getAddress(Emails);   } 
  /**    * 设置暗送地址    * @param Emails 暗送地址    */ 
  public void setBCC(String aEmail) {     String[] s = new String[1];     s[0] = aEmail;     this.bcc = getAddress(s);   } 
  /**    * 设置多个暗送地址    * @param Emails 暗送地址    */   public void setBCC(String[] Emails) {     this.bcc = getAddress(Emails);   } 
  /**    * 设置发件人地址    * @param aEmail 发件人地址    */   public void setFrom(String aEmail) { //        if(!isValidEmailAddress(aEmail)){ //            throw new MyException("Invalid Email Address"); //        }     this.from = aEmail;   } 
  /**    * 设置邮件主题    * @param mailTitle 邮件主题    */   public void setSubject(String mailTitle) {     this.title = mailTitle;   } 
  /**    * 设置邮件文字内容    * @param mailContent 邮件文字内容    */   public void setBody(String mailContent) {     this.content = mailContent;   } 
  /**    * 设置邮件字符类型    * @param contentType 请从静态变量TEXT和HTML中选择    */   public void setContentType(String contentType) {     this.content_type = contentType;   } 
  /**    * 设置HTML格式邮件在一般模式下显示的说明    * @param desc 说明文字    */   public void setHtmlMailDesc(String desc) {     this.htmlMailDesc = desc;   } 
  /**    * 设置SMTP服务器用户认证    * @param username 用户名    * @param password 密码    */   public void setSmtpAuthentication(String username, String password) {     this.smtpUser = username;     this.smtpPassword = password;     this.isAuthenticationSMTP = true;   } 
  /**    * 添加附件    * @param afile 本地文件    */   public void addAttachment(File afile) {     vFiles.add(afile);   } 
  /**    * 添加附件    * @param fileURL 文件URL    */   public void addAttachment(URL fileURL) {     vURLs.add(fileURL);   } 
  /**    * 标示邮件是否附带附件    * @return    */   public boolean hasAttachment() {     return vFiles.size() + vURLs.size() > 0;   } 
  /**    * 发送邮件    */   public void send() {     try {       Properties server = new Properties();       if (StringUtil.isEmpty(this.smtpHost)) {         throw new NullPointerException("Please set SMTP host");       }       else {         server.put("mail.smtp.host", this.smtpHost);       }       server.put("mail.smtp.port", String.valueOf(this.smtpPort));       if (this.isAuthenticationSMTP) {         server.put("mail.smtp.auth", "true");       }       Session conn = Session.getInstance(server, null); 
      MimeMessage msg = new MimeMessage(conn);       if (StringUtil.isEmpty(this.from)) {         throw new NullPointerException("Please set FROM address");       }       else {         msg.setFrom(new InternetAddress(this.from));       }       if (this.to != null) {         msg.setRecipients(Message.RecipientType.TO, this.to);       } //      else { //        throw new NullPointerException("Please set TO address"); //      }       if (this.cc != null) {         msg.setRecipients(Message.RecipientType.CC, this.cc);       }       if (this.bcc != null) {         msg.setRecipients(Message.RecipientType.BCC, this.bcc);       } 
      sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();       msg.setSubject("=?GB2312?B?" + enc.encode(this.title.getBytes()) + "?="); 
      if (!hasAttachment()) {         //如果没有带附件         if(this.isHtmlModeMail()){           //是HTML格式的邮件           if (!this.hasHtmlDesc()) {             msg.setContent(this.content, this.content_type);           }           else {             Multipart mp = new MimeMultipart();             MimeBodyPart mbp = null; 
            mbp = new MimeBodyPart();             mbp.setContent(this.content, this.content_type);             mp.addBodyPart(mbp); 
            mbp = new MimeBodyPart();             mbp.setContent(this.htmlMailDesc, this.MODE_TEXT);             mp.addBodyPart(mbp); 
            msg.setContent(mp);           }         }         else{           //是文本格式的邮件           msg.setText(this.content);         } 
      }       else {         //有附件         Multipart mp = new MimeMultipart();         MimeBodyPart mbp = null;         //邮件正文         for (int i = 0; i < vFiles.size(); i++) {           mbp = new MimeBodyPart();           File file = (File) vFiles.get(i);           FileDataSource fds = new FileDataSource(file);           mbp.setDataHandler(new DataHandler(fds));           mbp.setFileName(StringUtil.ISO8859_1(file.getName()));           mp.addBodyPart(mbp);         }         for (int i = 0; i < vURLs.size(); i++) {           mbp = new MimeBodyPart();           URL url = (URL) vURLs.get(i); //                URLDataSource uds=new URLDataSource(url);           mbp.setDataHandler(new DataHandler(url));           mbp.setFileName(StringUtil.ISO8859_1(url.getFile()));           mp.addBodyPart(mbp);         } 
        mbp = new MimeBodyPart();         mbp.setContent(this.content, this.content_type);         mp.addBodyPart(mbp); 
        if (this.isHtmlModeMail() && this.hasHtmlDesc()) {           mbp = new MimeBodyPart();           mbp.setContent(this.htmlMailDesc, this.MODE_TEXT);           mp.addBodyPart(mbp);         } 
        msg.setContent(mp);       }       msg.saveChanges();       if (this.isAuthenticationSMTP) {         Transport transport = conn.getTransport("smtp");         transport.connect(this.smtpHost, this.smtpUser, this.smtpPassword);         transport.sendMessage(msg, msg.getAllRecipients());         transport.close();       }       else {         Transport.send(msg, msg.getAllRecipients());       } 
    }     catch (javax.mail.internet.AddressException e) {       e.printStackTrace();     }     catch (javax.mail.MessagingException e) {       e.printStackTrace();     }   } 
  public boolean isValidEmailAddress(String email) {     if (StringUtil.isEmpty(email))       return false;     if (email.indexOf("@") > 0)       return !email.endsWith("@");     return false;   } 
  private Address[] getAddress(String[] add) {     Address[] a = new Address[add.length];     for (int i = 0; i < add.length; i++) {       try {         a[i] = new InternetAddress(add[i]);       }       catch (AddressException ex) {         ex.printStackTrace();       }     }     return a;   } 
  public boolean isHtmlModeMail(){     return this.content_type.equals(this.MODE_HTML);   } 
  public boolean hasHtmlDesc(){     if(!this.isHtmlModeMail()) return false;     return !StringUtil.isEmpty(this.htmlMailDesc);   } 
  /**    * 普通模式    */   public static final String MODE_TEXT = "text/plain;charset=gb2312"; 
  /**    * HTML模式    */   public static final String MODE_HTML = "text/html;charset=gb2312"; }
   
 
  |