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


package com.sendmail; 
 
import java.io.File; 
import java.io.InputStream; 
import java.util.Properties; 
 
import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 
 
public class SendMail { 
    public static Logger logger = Logger.getLogger(SendMail.class); 
    public static String FILE_PATH = "D:\\tmp\\";  
    public static String PROGRAM_FILE_PATH = "D:\\javawork\\sendmail\\";  
    //public static String PROGRAM_FILE_PATH = "C:\\Program Files\\sendfile\\sendFileMailNew\\"; 
 
    public static int SLEEPTIME = 10 * 1000; //刷新时间10秒一次 
    public static int SLEEPTIME2 = 30 * 1000; //刷新时间30秒一次 
 
    private static String log4jFile = "log4j.inf"; 
 
    public SendMail() { 
    } 
 
    public static void main(String[] args) throws Exception { 
        PropertyConfigurator.configure(log4jFile); 
        logger.info(new java.util.Date() + "start try to send today report."); 
        XMLReader xMLReader = new XMLReader(); 
        xMLReader.loadXMLFile(SendMail.PROGRAM_FILE_PATH+XMLReader.XML_FILE_NAME); 
        String mailSubject = xMLReader.getSubjectFields(); 
        String mailBody = MailBodyReader.fileReader(); 
        DateUtil du = new DateUtil(); 
        String today = du.getToday("yyyy.MM.dd HH:mm:ss"); 
        mailBody += today; 
        String username = xMLReader.getUserNameFields(); //用户名 
        String password = xMLReader.getPasswordFields(); //登陆密码 
        String smtp = xMLReader.getSMTPFields(); //邮件服务器地址 
        String fromAddr = xMLReader.getFromFields(); //发送用户邮件地址 
 
        String toAddr[] = xMLReader.getToFieldArray(); 
        String[] reportList = xMLReader.getReportNameArray(); 
        SendMail sm = new SendMail(); 
        String txtFileName = ReportController.getReportFileName(); 
        while (true) { 
            boolean canSend = false; 
            try { 
                logger.info(new java.util.Date() + " try to get today file."); 
                ReportController rc = new ReportController(); 
                //ReportController.main(args); 
                rc.doJob(txtFileName); 
                canSend = sm.ifCanSendMail(txtFileName); 
                if (canSend) { 
                    logger.info(new java.util.Date() + " start send mail."); 
                    try{ 
                        sm.doSendMail(mailSubject, mailBody, username, password, 
                            smtp, fromAddr, toAddr, reportList, FILE_PATH,txtFileName); 
                    }catch(Exception ex){ 
                        //如果发送异常,比如连不上邮箱等,sleep 半分钟 
                        ex.printStackTrace(); 
                        Thread.sleep(SLEEPTIME2); 
                        //再试一次 
                        try{ 
                            sm.doSendMail(mailSubject, mailBody, username, password, 
                                smtp, fromAddr, toAddr, reportList, FILE_PATH,txtFileName); 
                        }catch(Exception ex2){ 
                            //如果发送异常,比如连不上邮箱等,sleep 半分钟 
                            ex2.printStackTrace(); 
                            Thread.sleep(SLEEPTIME2); 
                            //再试一次 
                        } 
                    } 
                    break; 
                } 
                logger.info(new java.util.Date() 
                        + " attached file hasn't exist.sleep 10 second."); 
                Thread.sleep(SLEEPTIME); 
            } catch (Exception e) { 
                System.out.println(new java.util.Date() 
                        + " throw exception 1: " + e.getMessage()); 
            } 
        } 
        //delete file 
        sm.delAttachedFile(txtFileName); 
        System.exit(-1); 
 
    } 
 
    public boolean doSendMail(String mailSubject, String mailBody, 
            String username, String password, String smtp, String fromAddr, 
            String[] toAddr, String[] reportList, String localPath, String txtFileName) 
            throws Exception { 
        //MailBodyReader mailBodyReader = new MailBodyReader(); 
        //    String mailSubject = xMLReader.getSubjectFields(); 
        //    String mailBody = MailBodyReader.fileReader(); 
        //    mailBody += DateUtil.formatDate(DateUtil.getToday(), 1); 
        // 
        //    String username = xMLReader.getUserNameFields(); //用户名 
        //    String password = xMLReader.getPasswordFields(); //登陆密码 
        //    String smtp = xMLReader.getSMTPFields(); //邮件服务器地址 
        //    String fromAddr = xMLReader.getFromFields(); //发送用户邮件地址 
        // 
        //    String toAddr[] = xMLReader.getToFieldArray(); 
        //    String [] reportList = xMLReader.getReportNameArray(); 
        for (int i = 0; i < toAddr.length; i++) { 
            MailUtil mail = new MailUtil(toAddr[i], fromAddr, mailSubject, 
                    mailBody, smtp); 
 
            //如果SMTP服务器需要认证的话,下面三个属性必须设置 
            mail.setAuthenticate(true); 
            mail.setSmtp(smtp); 
            mail.setUsername(username); 
            mail.setPassword(password); 
            mail.attachFile(localPath + ReportController.getZipFileName(txtFileName)); 
 
            System.out.println("From\t:" + mail.getFromAddr()); 
            System.out.println("To\t:" + mail.getToAddr()); 
            System.out.println("cc\t:" 
                    + ((mail.getCC().equals("")) ? "无" : mail.getCC())); 
            System.out.println("bcc\t:" 
                    + ((mail.getBCC().equals("")) ? "无" : mail.getBCC())); 
            System.out.println("Sbuject\t:" + mail.getMailSubject()); 
            System.out.println("Body\t:" + mail.getMailBody()); 
            System.out.print("sending mail now ..."); 
 
            if (mail.send()) { 
                System.out.println("Mail send success!"); 
            } else { 
                System.out.println("Mail send failure!"); 
            } 
        } 
        return true; 
    } 
 
    private boolean ifCanSendMail(String fileName) throws Exception { 
        //String fileName = ReportController.getReportFileName("zip"); 
        File myFs = new File(FILE_PATH + fileName); 
        return myFs.exists(); 
    } 
     
    private boolean delAttachedFile(String fileName){ 
        boolean delAll = false; 
        //String fileName = ReportController.getReportFileName("txt"); 
        File myFs = new File(FILE_PATH + fileName); 
        delAll = myFs.delete(); 
        fileName = ReportController.getZipFileName(fileName); 
        myFs = new File(FILE_PATH + fileName); 
        delAll = myFs.delete(); 
        return delAll; 
    } 
}