//現下的大部分的郵件伺服器都要求有身分驗証,所以需要此類實現驗証功能
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);
   }
}//可以以html的方式發送
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();
    }    public void setMailContent(String mailContent)throws MessagingException{
        //String htmlContent = getContent("<img src=",mailContent);
        String htmlContent = mailContent;
        System.out.println(htmlContent);//1
        messageBodyPart.setContent(htmlContent,"text/html;charset=Big5");
        multipart.addBodyPart(messageBodyPart);
        //調用處理html文件中的圖片方法
        processHtmlImage(mailContent);
    }
    //處理html頁面上的圖片方法如下︰
    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);
         }
    }
    //處理要發送的html文件,主要是針對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來替換原來的圖片鏈接
        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;
    }
    //產生一個隨機字元串,為了給圖片設定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;
    }}