www.pudn.com > sendmail.rar > MailUtil.java


package com.sendmail; 
 
import java.util.*; 
import java.io.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.activation.*; 
import javax.mail.Message.*; 
 
 
/** 
 *  
 * @author  Administrator 
 */ 
public class MailUtil { 
  private boolean isAuthenticate = false; /*SMTP服务器是否需要认证*/ 
  //private String smtp = "smtp.sn.chinamobile.com"; /*邮件发送服务器*/ 
  private String smtp = ""; /*邮件发送服务器*/ 
  private String username = ""; 
  private String password = ""; 
  
  private String toAddr = ""; /*收信人*/ 
  private String fromAddr = ""; /*发信人*/ 
  private String cc = ""; /*抄送人*/ 
  private String bcc = ""; /*暗送人*/ 
  private String mailSubject = ""; /*邮件主题*/ 
  private String mailBody = ""; /*邮件内容*/ 
 
  //用于保存发送附件的文件名的集合 
  private Vector file = new Vector(); 
  private Multipart mp; 
 
  /** Creates a new instance of MyMail */ 
  public MailUtil() { 
  } 
 
  public MailUtil(String toAddr, String fromAddr, String mailSubject, 
                     String mailBody,String smtp) { 
    this.toAddr = toAddr; 
    this.fromAddr = fromAddr; 
    this.mailSubject = mailSubject; 
    this.mailBody = mailBody; 
    this.smtp = smtp; 
 } 
 
  public MailUtil(String toAddr, String fromAddr, String cc, String bcc, 
                     String mailSubject, String mailBody,String smtp) { 
    this.toAddr = toAddr; 
    this.fromAddr = fromAddr; 
    this.cc = cc; 
    this.bcc = bcc; 
    this.mailSubject = mailSubject; 
    this.mailBody = mailBody; 
    this.smtp = smtp; 
  } 
 
  public void attachFile(String fname) { 
    file.addElement(fname); 
  } 
 
  //该方法用于收集附件名 
  private void attachFiles() { 
    //利用枚举器方便的遍历集合 
    Enumeration efile = file.elements(); 
    String filename = ""; 
 
    //检查序列中是否还有更多的对象 
    while (efile.hasMoreElements()) { 
      try { 
        MimeBodyPart mbp = new MimeBodyPart(); 
 
        //选择出每一个附件名 
        filename = efile.nextElement().toString(); 
 
        //得到数据源 
        FileDataSource fds = new FileDataSource(filename); 
 
        //得到附件本身并至入BodyPart 
        mbp.setDataHandler(new DataHandler(fds)); 
        mbp.setFileName(MimeUtility.encodeWord(fds.getName(), "GB2312", null)); 
 
        //得到文件名同样至入BodyPart 
        mp.addBodyPart(mbp); 
        System.out.print("fds is " +fds); 
      } 
      catch (MessagingException me) { 
        System.out.println("警告:设置附件错误!filene:" + filename); 
        System.out.println(me.getMessage()); 
        me.printStackTrace(); 
      } 
      catch (UnsupportedEncodingException uee) { 
        System.out.println("警告:设置附件错误!filene:" + filename); 
        System.out.println(uee.getMessage()); 
        uee.printStackTrace(); 
      } 
    } 
 
    //删除集合中的所有元素 
    file.removeAllElements(); 
  } 
 
  public String getToAddr() { 
    return toAddr; 
  } 
 
  public String getFromAddr() { 
    return fromAddr; 
  } 
 
  public String getCC() { 
    return cc; 
  } 
 
  public String getBCC() { 
    return bcc; 
  } 
 
  public String getMailSubject() { 
    return mailSubject; 
  } 
 
  public String getMailBody() { 
    return mailBody; 
  } 
 
  public String getSmtp() { 
    return smtp; 
  } 
 
  public String getUsername() { 
    return username; 
  } 
 
  public String getPassword() { 
    return password; 
  } 
 
  public void setAuthenticate(boolean auth) { 
    this.isAuthenticate = auth; 
  } 
 
  public void setSmtp(String smtp) { 
    this.smtp = smtp; 
  } 
 
  public void setUsername(String username) { 
    this.username = username; 
  } 
 
  public void setPassword(String pwd) { 
    this.password = pwd; 
  } 
 
  public void setCC(String cc) { 
    this.cc = cc; 
  } 
 
  public void setBCC(String bcc) { 
    this.bcc = bcc; 
  } 
 
  public boolean send() { 
    //返回结果 
    boolean isSend = false; 
 
    //变量声明 
    Properties props; 
    Session mailSession; 
    MimeMessage mimeMsg; 
    //设置系统属性 
    props = System.getProperties(); 
    /// props=new Properties(); 
    props.put("mail.smtp.auth", isAuthenticate + ""); 
    props.put("mail.smtp.host", smtp); 
 
    //获得邮件会话对象 
    if (isAuthenticate) { 
      Authenticator auth = new PopupAuthenticator(username, password); 
      mailSession = Session.getDefaultInstance(props, auth); 
    } 
    else { 
      mailSession = Session.getDefaultInstance(props, null); 
    } 
 
    //创建MIME邮件对象 
    mimeMsg = new MimeMessage(mailSession); 
 
    //设置发信人 
    try { 
      mimeMsg.setFrom(new InternetAddress(fromAddr)); 
    } 
    catch (Exception ae) { 
      System.out.println("警告:设置发信人地址错误~~~"); 
    } 
 
    //设置收信人 
    if (toAddr != null) { 
      try { 
        mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO, 
                              InternetAddress.parse(toAddr)); 
      } 
      catch (Exception ae) { 
        System.out.println("错误:设置收信人地址错误~~~"); 
        return false; 
      } 
    } 
 
    //设置抄送人 
    if (cc != null) { 
      try { 
        mimeMsg.setRecipients(RecipientType.CC, InternetAddress.parse(cc)); 
      } 
      catch (Exception ae) { 
        System.out.println("警告:设置抄送人地址错误~~~"); 
      } 
    } 
 
    //设置暗送人 
    if (bcc != null) { 
      try { 
        mimeMsg.setRecipients(RecipientType.BCC, InternetAddress.parse(bcc)); 
      } 
      catch (Exception ae) { 
        System.out.println("警告:设置暗送人地址错误~~~"); 
      } 
    } 
 
    Transport transport; 
    try { 
      //设置邮件主题 
 
      mimeMsg.setSubject(mailSubject, "GB2312"); 
 
      //设置信件头的发送日期 
      mimeMsg.setSentDate(new Date()); 
 
      //后面的BodyPart将加入到此处创建的Multipart中 
      MimeBodyPart bp = new MimeBodyPart(); 
      bp.setContent( 
          "" + 
          mailBody, "text/html;charset=GB2312"); 
      mp = new MimeMultipart(); 
      mp.addBodyPart(bp); 
 
      //粘贴附件,Multipart加入到信件 
      attachFiles(); 
      mimeMsg.setContent(mp); 
      mimeMsg.saveChanges(); 
 
      //发送邮件 
      transport = mailSession.getTransport("smtp"); 
      //Transport.send(mimeMsg); 
      transport.connect( (String) props.get("mail.smtp.host"), username, 
                        password); 
      transport.sendMessage(mimeMsg, 
                            mimeMsg.getRecipients(Message.RecipientType.TO)); 
      transport.close(); 
 
      isSend = true; 
    } 
    catch (Exception e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
      isSend = false; 
    } 
    finally { 
    } 
    return isSend; 
  } 
 
}