⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receivetask.java

📁 利用JavaMail实现的发送及接收邮件的程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.digipower.automail.mailsender;

import javax.servlet.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import com.digipower.automail.AutoMailConstants;
import java.sql.*;
import com.digipower.common.basic.*;
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.*;
import com.digipower.automail.AutoMailConstants;
import com.digipower.automail.DBHandler;
import org.apache.log4j.*;


public class ReceiveTask extends TimerTask{

  private static final int  C_SCHEDULE_HOUR = AutoMailConstants.SCHEDULE_HOUR;
  private static boolean isRunning = false;
  private ServletContext context = null;

  private Connection conn = null;
  private ConnectionDB_Oracle db = null;
  private Statement stmt = null;
  private ResultSet rs = null;
  private PreparedStatement pstmt = null;
  private String strSql = null;
  private String strCom = "";
  private String strCustomer = "";
  private Calendar cal = null;
  // Create a New XL Document
  private HSSFWorkbook wb = null;
  private HSSFSheet newsheet = null;
  private HSSFRow newrow = null;
  private HSSFCell newcell = null;
  // The Output file is where the xls will be created
  private FileOutputStream fOut = null;
  private File file = null;
  private String strOutPutFile = null;

  private String strTemp = null;
  private int iRowNum = 0;
  private static Logger		s_log = null;

  public ReceiveTask(ServletContext context) {
    try
    {
      this.context = context;
      db = new ConnectionDB_Oracle();

      s_log = Logger.getLogger(ReceiveTask.class);
      PropertyConfigurator.configure(context.getRealPath("/") + "\\WEB-INF\\log4j.inf");
    }
    catch(Exception e)
    {
      System.out.println("dboracle:" + e);
    }
  }

  //Get the content of company and customer
  void getComCustomer(String Folder, String Address){
    String strRead = "";
    String strContent = "";
    String strTemp = null;
    try
    {
      strCom = "";
      strCustomer = "";

      String addrFile = AutoMailConstants.BOOTDIR
          + Folder
          + AutoMailConstants.MAIL_ADDRESS_FILE;

      File file = new File(addrFile);

      if (file.exists())
      {
//        FileReader fr = new FileReader(addrFile);

        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, "UTF8");

        BufferedReader br = new BufferedReader(isr);
//        BufferedReader br = new BufferedReader(fr);

        while ( (strRead = br.readLine()) != null)
        {
          strContent += strRead;
        }

        br.close();
        isr.close();
        fis.close();
//        fr.close();

        int iEnd = strContent.indexOf(Address);

        s_log.error("System.getProperty:" + System.getProperty("file.encoding"));

//        s_log.error("strContent:" + strContent);

        if(iEnd > 0)
        {
          strContent = strContent.substring(0, iEnd - 2);

          iEnd = strContent.lastIndexOf(AutoMailConstants.SEPARATOR);
          strCom = strContent.substring(iEnd + 2, strContent.length());
          strContent = strContent.substring(0, iEnd);
          iEnd = strContent.lastIndexOf(";");
          strCustomer = strContent.substring(iEnd + 1, strContent.length());
//System.out.println("strCustomer:" + strCustomer);
//System.out.println("strCom:" + strCom);
        }
        s_log.error("Folder:" + Folder);
        s_log.error("Address:" + Address);
        s_log.error("strCom:" + strCom);
        s_log.error("strCustomer:" + strCustomer);

      }
    }
    catch(Exception e)
    {
      s_log.error("getComCustomer:" + e);
      e.printStackTrace();
    }
  }
//the run method
 public void run(){
   try
   {
     cal = Calendar.getInstance();

     s_log.warn("UserName:" + AutoMailConstants.USER_NAME);
     s_log.warn("PWD:" + AutoMailConstants.PSW);

//System.out.println("Timer:" + (cal.get(Calendar.HOUR_OF_DAY) - C_SCHEDULE_HOUR));

     if (!isRunning)
     {
       //if ((cal.get(Calendar.HOUR_OF_DAY) - C_SCHEDULE_HOUR) <= 3 && (cal.get(Calendar.HOUR_OF_DAY) - C_SCHEDULE_HOUR) >= 0 )
       //{
         isRunning = true;

         conn = db.getConnection();
         conn.setAutoCommit(false);

         MailAuthenticator authenticator = null;

         Properties props = new Properties();
         props.put("mail.pop3.host", AutoMailConstants.HOST_NAME);
         props.put("mail.pop3.auth", "true"); //设置pop3认证,很关键的一句

         authenticator = new MailAuthenticator(AutoMailConstants.USER_NAME, AutoMailConstants.PSW);

         //Session session = Session.getDefaultInstance(props, authenticator);
         Session session = Session.getInstance(props, authenticator);

         Store store = session.getStore("pop3");
         store.connect(HOST_NAME, USER_NAME, PSW);

         Folder folder = store.getFolder("INBOX");
         folder.open(Folder.READ_WRITE);

         Message message[] = folder.getMessages();

//System.out.println("Messages's length: " + message.length);
         receiver pmm = null;     //the receiver action's class name
         int iStart = 0;
         int iAddrEnd = 0;
         String str = null;
         String strFolder = "";
         String strFailAddr = "";
         int iNum = 0;

         for (int j = 0; j < message.length; j++)
         {
           pmm = new receiver((MimeMessage)message[j]);

System.out.println("<postmaster@mydigipower.com>:" + pmm.getFrom());
//System.out.println("pmm.getMailAddress(\"TO\"):" + pmm.getMailAddress("TO"));
           if (pmm.getFrom().endsWith("<postmaster@power.com>")) //将发送失败的地址存入数据库
           {
             try
             {
               pmm.setDateFormat("yyyy/MM/dd HH:mm:ss");
               pmm.getMailContent((Part) message[j]);

               str = pmm.getBodyText();
               iStart = str.indexOf("Content-Description:"); //the start of content
               iAddrEnd = str.indexOf(AutoMailConstants.POSTMASTER_SEPARATOR); //the end of content

               if (iStart > 0 && iAddrEnd > 0)
               {
                 strFailAddr = str.substring(iStart + 35, iAddrEnd);
                 strFolder = str.substring(iStart + 21, iStart + 35);
  //System.out.println("strFailAddr:" + strFailAddr);
  //System.out.println("strFolder:" + strFolder);

                 getComCustomer(strFolder, strFailAddr);
System.out.println("Search for the problem of Receiver.");
                 strSql =
                     "select count(*) as num from FailureAddressLog where FolderNameF = '" +
                     strFolder + "' and company = '" + strCom + "' and customer = '" + strCustomer + "'";

                 stmt = conn.createStatement();
                 rs = stmt.executeQuery(strSql);

                 if (rs.next())
                 {
                   iNum = rs.getInt("num");

                   strSql = "insert into FailureAddressLog values(?, ?, ?, ?)";
                   pstmt = conn.prepareStatement(strSql);

                   if (iNum <= 0)
                   {

                     if(strCom != null && strCom.length() > 0
                        && strCustomer != null && strCustomer.length() > 0)
                     {
                       pstmt.setString(1, strFolder);
                       pstmt.setString(2, new String(strCom.getBytes()));
                       pstmt.setString(3, new String(strCustomer.getBytes()));
                       pstmt.setString(4, strFailAddr);

                       pstmt.executeUpdate();
                       conn.commit();
                     }
                   }

                 }
               }

               message[j].setFlag(Flags.Flag.DELETED, true); //将邮件标记为删除,防止下次重读
             }
             catch(Exception e)
             {
               s_log.error("<postmaster@mydigipower.com>:" + pmm.getFrom() + e);

               System.out.println(e + "receive insert db");
             }


           }
           else if( pmm.getMailAddress("TO") != null
                    &&  pmm.getMailAddress("TO").length() > 19
                    &&  pmm.getMailAddress("TO").indexOf(AutoMailConstants.REPLY_SEPARATOR) > 0)
           {//将回条信息存入Excel档
             try
             {

System.out.println("Message " + j + "  to: " + pmm.getMailAddress("TO"));
               strTemp = pmm.getMailAddress("TO");
               //if(strTemp != null && strTemp.length() > 19 && strTemp.indexOf("#$#$#$") > 0)
               //{
                 int iTemp = strTemp.indexOf(AutoMailConstants.REPLY_SEPARATOR);

                 if(iTemp > 0)
                 {
                   strOutPutFile = strTemp.substring(iTemp + 4, iTemp + 18);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -