posts - 18,comments - 26,trackbacks - 0

          /*=========================================================
            * @Programing Name: SendMail.java
            * @Author:          Wang weiPing
            * @Program Date:    2004-02-02
            * @E-Mail:          wangwp@mailer.com.cn
            * @MobilePhone:     13810862095
            * @Address:         北京市海淀區(qū)知春路23號(hào)863軟件園903室
            ********************************************
            *include classes: *SendMail.class       *
            *                 *MailAuthenticator.class *
            *                 *MailSendHtml.class      *
            *                 *MailSendText.class      *
            ********************************************
            *=========================================================
            */


          package chundiwebmail;

          import java.util.Properties;
          import java.util.Date;
          import java.util.ArrayList;
          import javax.mail.*;
          import javax.mail.internet.*;
          import javax.activation.*;

          abstract class SendMail{
              
              protected BodyPart messageBodyPart = null;
              protected Multipart multipart = null;
              protected MimeMessage mailMessage = null;
              protected Session mailSession = null;
              protected Properties mailProperties = System.getProperties();

              protected InternetAddress mailFromAddress = null;
              protected InternetAddress mailToAddress = null;
              protected MailAuthenticator authenticator = null;

              protected String mailSubject ="";
              protected Date mailSendDate = null;
              
              public SendMail(String smtpHost,String username,String password){

                  mailProperties.put("mail.smtp.host",smtpHost);
                  System.out.println("smtpHost="+smtpHost);
                 
                 
                  mailProperties.put("mail.smtp.auth","true"); //設(shè)置smtp認(rèn)證,很關(guān)鍵的一句
                  authenticator = new MailAuthenticator(username,password);
                  mailSession = Session.getDefaultInstance(mailProperties,authenticator);
                  mailMessage = new MimeMessage(mailSession);
                  messageBodyPart = new MimeBodyPart();
              }

              //設(shè)置郵件主題
              public void setSubject(String mailSubject)throws MessagingException{
                  this.mailSubject = mailSubject;
                  mailMessage.setSubject(mailSubject);
              }
              //所有子類(lèi)都需要實(shí)現(xiàn)的抽象方法,為了支持不同的郵件類(lèi)型
              protected abstract void setMailContent(String mailContent)throws MessagingException;
              
              //設(shè)置郵件發(fā)送日期
              public void setSendDate(Date sendDate)throws MessagingException{
                  this.mailSendDate = sendDate;
                  mailMessage.setSentDate(sendDate);
              }

              //設(shè)置郵件發(fā)送附件
              public void setAttachments(String attachmentName)throws MessagingException{
                  messageBodyPart = new MimeBodyPart();
                  DataSource source = new FileDataSource(attachmentName);
                  messageBodyPart.setDataHandler(new DataHandler(source));
                  int index = attachmentName.lastIndexOf('\\');
                  String attachmentRealName = attachmentName.substring(index+1);
                  messageBodyPart.setFileName(attachmentRealName);
                  multipart.addBodyPart(messageBodyPart);
              }
              
              //設(shè)置發(fā)件人地址
              public void setMailFrom(String mailFrom)throws MessagingException{
                  mailFromAddress = new InternetAddress(mailFrom);
                  mailMessage.setFrom(mailFromAddress);
              }
              
              //設(shè)置收件人地址,收件人類(lèi)型為to,cc,bcc(大小寫(xiě)不限)
              public void setMailTo(String[] mailTo,String mailType)throws Exception{
                  for(int i=0;i<mailTo.length;i++){

                      mailToAddress = new InternetAddress(mailTo[i]);

                      if(mailType.equalsIgnoreCase("to")){
                          mailMessage.addRecipient(Message.RecipientType.TO,mailToAddress);
                      }
                      else if(mailType.equalsIgnoreCase("cc")){
                          mailMessage.addRecipient(Message.RecipientType.CC,mailToAddress);
                      }
                      else if(mailType.equalsIgnoreCase("bcc")){
                          mailMessage.addRecipient(Message.RecipientType.BCC,mailToAddress);
                      }
                      else{
                          throw new Exception("Unknown mailType: "+mailType+"!");
                      }
                  }
              }
              
              //開(kāi)始投遞郵件
              public void sendMail()throws MessagingException,SendFailedException{
                  if(mailToAddress == null){
                      System.out.println("請(qǐng)你必須你填寫(xiě)收件人地址!");
                      System.exit(1);
                  }
                  else{
                      mailMessage.setContent(multipart);
                      System.out.println("正在發(fā)送郵件,請(qǐng)稍候.......");
                      Transport.send(mailMessage);
                      System.out.println("恭喜你,郵件已經(jīng)成功發(fā)送!");
                  }
              }

          }
          //現(xiàn)在的大部分的郵件服務(wù)器都要求有身份驗(yàn)證,所以需要此類(lèi)實(shí)現(xiàn)驗(yàn)證功能
          class MailAuthenticator extends Authenticator{

              private String username = null;
              private String userpasswd = null;

              public MailAuthenticator(){}
              public MailAuthenticator(String username,String userpasswd){
                  this.username = username;
                  this.userpasswd = userpasswd;
              }
              
              public void setUserName(String username){
                  this.username = username;
              }

              public void setPassword(String password){
                  this.userpasswd = password;
              }

              public PasswordAuthentication getPasswordAuthentication(){
                  return new PasswordAuthentication(username,userpasswd);
              }
          }

          //為了使此郵件發(fā)送程序能夠支持可擴(kuò)展性,把發(fā)送郵件的類(lèi)型放到子類(lèi)中來(lái),
          //以便支持更多的郵件類(lèi)型,比如語(yǔ)音郵件,視頻郵件等......

          //1.發(fā)送純文本文件的的子類(lèi)MailSendText.class

          class MailSendText extends SendMail{

              public MailSendText(String smtpHost,String username,String password){
                  super(smtpHost,username,password);
                  multipart = new MimeMultipart();
              }

              public void setMailContent(String mailContent)throws MessagingException{
                  messageBodyPart.setText(mailContent);
                  multipart.addBodyPart(messageBodyPart);
              }
          }

          //2.發(fā)送html格式的子類(lèi)MailSendHtml.class
          class MailSendHtml extends SendMail{
              private ArrayList arrayList1 = new ArrayList();
              private ArrayList arrayList2 = new ArrayList();

              public MailSendHtml(String smtpHost,String username,String password){
                  super(smtpHost,username,password);
                  multipart = new MimeMultipart("related");
              }

              public void setMailContent(String mailContent)throws MessagingException{
                  String htmlContent = getContent("<img src=",mailContent);
                  System.out.println(htmlContent);//1
                  messageBodyPart.setContent(htmlContent,"text/html");
                  multipart.addBodyPart(messageBodyPart);
                  //調(diào)用處理html文件中的圖片方法
                  processHtmlImage(mailContent);
              }
              //處理html頁(yè)面上的圖片方法如下:
              private void processHtmlImage(String mailContent)throws MessagingException{
                   for(int i=0;i<arrayList1.size();i++){
                       messageBodyPart = new MimeBodyPart();
                       DataSource source = new FileDataSource((String)arrayList1.get(i));
                       messageBodyPart.setDataHandler(new DataHandler(source));
                       String contentId = "<"+(String)arrayList2.get(i)+">";
                       System.out.println(contentId);
                       messageBodyPart.setHeader("Content-ID",contentId);
                       messageBodyPart.setFileName((String)arrayList1.get(i));
                       multipart.addBodyPart(messageBodyPart);
                   }
              }
              //處理要發(fā)送的html文件,主要是針對(duì)html文件中的圖片
              private String getContent(String searchString,String mailContent){
                  String afterReplaceStr = "";
                  for(int i=0;i<mailContent.length();i++){
                      for(int j=i+1;j<mailContent.length();j++){
                          String searResult = mailContent.substring(i,j);
                          if(searResult.equalsIgnoreCase(searchString)){
                              String subString = mailContent.substring(j);
                              int flagIndex = subString.indexOf('>');
                              String replaceStr = subString.substring(1,flagIndex-1);
                              if(replaceStr.indexOf("http://") != -1){
                                  System.out.println(replaceStr);
                                  System.out.println("不需要處理圖片!");
                              }
                              else{

                                  arrayList1.add(replaceStr);
                              }
                          }
                      }
                  }
                  //在html文件中用"cid:"+Content-ID來(lái)替換原來(lái)的圖片鏈接
                  for(int m=0;m<arrayList1.size();m++){
                      arrayList2.add(createRandomStr());
                      String addString = "cid:"+(String)arrayList2.get(m);
                      afterReplaceStr = mailContent.replaceAll((String)arrayList1.get(m),addString);
                  }
                  return afterReplaceStr;
              }
              //產(chǎn)生一個(gè)隨機(jī)字符串,為了給圖片設(shè)定Content-ID值
              private String createRandomStr(){
                  char []randomChar = new char[8];
                  for(int i=0;i<8;i++){
                      randomChar[i]=(char)(Math.random()*26+'a');
                  }
                  String replaceStr = new String(randomChar);
                  return replaceStr;
              }

          }

          /*=============================================================================
          下面是此電子郵件發(fā)送程序的簡(jiǎn)單測(cè)試程序:
           */
          //package chundiwebmail;

          //import java.util.Date;
          public class SendMailTest{

              public static void main(String args[]){
                //  String []toAddress = {"sunmin_cs@yahoo.com.cn"};
                  String []toAddress = {"mailtestonly@163.com"};
                 // String []toAddress = {"sunmin@sm.swust.edu.cn"};
                 // String []toAddress = {"test@tx.swust.edu.cn"};
                 
                 
                 // SendMail sendmail = new MailSendHtml("smtp.163.com","mailtestonly","123456");
                
                  SendMail sendmail = new MailSendHtml("sm.swust.edu.cn","lyh","2");
                  try{
                      sendmail.setSubject("HelloWorld");
                      sendmail.setSendDate(new Date());
                      //String plainText = "Welcome to use this Mail-Send program!";
                      //******************************************************
                      //String htmlText = "<H1>HelloWorld</H1>"+
                      //       "<img src=\"1.jpg\">"
                      //       +"<font size=\"5\">xxx</font>";
                      //******************************************************
                      String htmlText="<body><img src=\"1.bmp\"><font size=\"5\">xxx</font></body>";
                    
                     // String htmlText="sdfsdf";
                             
                              //"<img src=\"            //sendmail.setMailContent(plainText);
                      sendmail.setMailContent(htmlText);
                      //sendmail.setAttachments("D:\\wwpdev\\attach.jsp");
                     
                     // sendmail.setMailFrom("
          mailtestonly@163.com");
                     
                     // sendmail.setMailFrom("sunmin@localhost.com");
                      sendmail.setMailFrom("lyh@sm.swust.edu.cn");
                      sendmail.setMailTo(toAddress,"to");
                     // sendmail.setMailTo(toAddress,"cc");
                      sendmail.sendMail();
                  }
                  catch(Exception ex){ ex.printStackTrace();}
              }
          }
          //=============================================================================
           //   [/pre]

          posted on 2005-06-08 21:50 瘦猴 閱讀(347) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 铅山县| 道孚县| 米泉市| 元氏县| 包头市| 临湘市| 绥中县| 内江市| 天等县| 娄烦县| 吉首市| 清水县| 大洼县| 新乡县| 靖西县| 峨眉山市| 晋州市| 石柱| 嘉义县| 兴和县| 东港市| 鹿泉市| 西乡县| 榆中县| 原阳县| 浦江县| 邯郸县| 航空| 禄丰县| 大竹县| 蒙城县| 康马县| 余姚市| 同仁县| 吉木萨尔县| 神池县| 宾阳县| 滦南县| 苏州市| 柘荣县| 商丘市|