import javax.mail.* ;
import java.util.* ;
import javax.mail.internet.* ;
import java.net.* ;
import javax.activation.* ;
import com.westerasoft.changqingzj.common.commsql.* ;

public class SendMaiBean
{
  /**
   * 网际邮件扩充协议消息对象
   */
  private MimeMessage message = null ;

  /**
   * 发送器
   */
  private Transport transport = null ;

  /**
   *session对象
   */
  private Session session = null ;

  private Multipart mm = new MimeMultipart() ;

  /**
   * 设置mail服务器
   */
  public SendMaiBean(String mailServer) throws Exception
  {
    try
    {
      Properties props = new Properties() ;
      props.put("mail.smtp.host",mailServer) ;
      props.put("mail.smtp.auth", "true") ;
      session = Session.getInstance(props) ;
      session.setDebug(true) ;
      message = new MimeMessage(session) ;
      this.transport = this.session.getTransport("smtp") ;
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "可能因为网络故障,连接邮件服务器失败!") ;
    }
  }
  /**
   * 设置发信人的用户名
   * @throws Exception
   */
  public void connectServer(String fromUserName, String fromUserPassword
                            , String serverIp) throws Exception
  {
    try
    {
      this.transport.connect(serverIp, fromUserName, fromUserPassword) ;
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "连接邮件服务器失败,请检查你的用户名和密码和网络!") ;
    }
  }

  /**
   * 发送mail
   */
  public void sendMail() throws Exception
  {
    try
    {
      message.setContent(mm) ; //把mm作为消息对象的内容
      message.setSentDate(new Date()) ;
      message.saveChanges() ;
      transport.sendMessage(message, message.getAllRecipients()) ;
      transport.close() ;
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "可能是因为网络故障,发送邮件失败!") ;
    }
  }

 

  /**
   *
   */
  public void setMailToAddresses(String[] tos) throws Exception
  {
    try
    {
      Address address[]=new Address[tos.length];
        for (int i = 0 ; i < tos.length ; i++)
      {
        InternetAddress to = new InternetAddress(tos) ;
        address=to;
      }
      message.setRecipients(Message.RecipientType.TO,address);
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "收信人地址错误!") ;
    }

  }

/**
   *  设置发行人
   */
  public void setMailFromAddress(String from) throws Exception
  {
    try
    {
      InternetAddress f = new InternetAddress(from) ;
      message.setFrom(f) ;
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "发信人地址错误!") ;
    }
  }

  /**
   * 设置主题
   */
  public void setMailTitle(String title) throws Exception
  {
    try
    {
      message.setSubject(title,"gb2312") ;
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送信件主题错误!") ;
    }

  }

  /**
   *
   */
  public void setMailContent(String tcontent, String emailtype) throws
      Exception
  {
    try
    {
      //设置信件文本内容
      BodyPart mdp = new MimeBodyPart() ; //新建一个存放信件内容的BodyPart对象
      mdp.setContent(tcontent, emailtype + ";charset=gb2312") ; //给BodyPart对象设置内容和格式/编码方式
      mm.addBodyPart(mdp) ; //将含有信件内容的BodyPart加入到MimeMultipart对象中
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送信件内容错误!") ;
    }

  }

  /**
   * 增加附件,注:是手输入的文本信息
   */
  public void addTextTypeFile(String content) throws Exception
  {
    try
    {
      //   设置信件的附件1(自定义附件:直接将所设文本内容加到自定义文件中作为附件发送)
      MimeBodyPart mdp = new MimeBodyPart() ; //新建一个存放附件的BodyPart
      DataHandler dh = new DataHandler(content, "text/plain;charset=gb2312") ;
      //新建一个DataHandler对象,并设置其内容和格式/编码方式
      mdp.setFileName("text.txt") ; //加上这句将作为附件发送,否则将作为信件的文本内容
      mdp.setDataHandler(dh) ; //给BodyPart对象设置内容为dh
      mm.addBodyPart(mdp) ; //将含有附件的BodyPart加入到MimeMultipart对象中
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送文本附件出错!") ;
    }
  }

  /**
   * 增加附件,注:是本地文件
   */
  public void addFileTypeFile(String fileName) throws Exception
  {
    try
    {
      //设置信件的附件2(用本地上的文件作为附件)
      MimeBodyPart mdp = new MimeBodyPart() ;
      FileDataSource fds = new FileDataSource(fileName) ;
      DataHandler dh = new DataHandler(fds) ;
      int ddd = fileName.lastIndexOf("\\") ;
      String fname = fileName.substring(ddd) ; //提取文件名
      String ffname = new String(fname.getBytes("gb2312"), "ISO8859-1") ; //处理文件名是中文的情况
      mdp.setFileName(ffname) ; //可以和原文件名不一致,但最好一样
      mdp.setDataHandler(dh) ;
      mm.addBodyPart(mdp) ;
    }
    catch (Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送文件附件出错!") ;
    }

  }

  /**
   *  增加附件,注:是网络中的文件
   */
  public void addNetTypeFile(String netAddressAndFileName) throws Exception
  {
    try
    {
      //设置信件的附件3(用远程文件作为附件)
      MimeBodyPart mdp = new MimeBodyPart() ;
      URL urlfj = new URL(netAddressAndFileName) ;
      URLDataSource ur = new URLDataSource(urlfj) ;
      //注:这里用的参数只能为URL对象,不能为URL字串,在前面类介绍时有误(请谅解),这里纠正一下.
      DataHandler dh = new DataHandler(ur) ;
      int ttt = netAddressAndFileName.lastIndexOf("/") ;
      String urlname = netAddressAndFileName.substring(ttt) ;
      mdp.setFileName(urlname) ;
      mdp.setDataHandler(dh) ;
      mm.addBodyPart(mdp) ;
    }
    catch(Exception e)
    {
      e.printStackTrace() ;
      throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送网络附件出错出错!") ;
    }
  }
  }


来自IT资源网IT资源网