trytimer.java

来自「javamail发送程序」· Java 代码 · 共 234 行

JAVA
234
字号
//////////////////////////////////////
//定时发送退回邮件类
/////////////////////

package myemail;
import java.io.*;
import java.sql.*;
import java.util.*;
import java.text.*; //字符串格式
public class TryTimer
{
  public TryTimer(String FileReadPath,String MailPathLog)
  {
    //获得日志文件根目录
    this.MailPathLog=MailPathLog;
    //获得日志文件路径
    this.FileReadPath=FileReadPath;
    //获得进度文件路径
    int ilen=FileReadPath.length();
    FileJidu=FileReadPath.substring(0,ilen-3)+"sed";
    //获得发送内容
    int index=this.FileReadPath.lastIndexOf("\\");
    pathFileText=this.FileReadPath.substring(0,index+1)+"sendtext.txt";
    System.out.println(FileReadPath+"日志路径"+index+"索引位置"+pathFileText+"文本发送路径");
    //生成文件对象
    filepath=new File(FileReadPath);
    iCountTimer=0;

  }
  public TryTimer()
  {
    iCountTimer=0;
  }
  TimerTask task=new TimerTask()
  {
      public void run()
      {
        sText=myFileWrite.ReadFile(pathFileText);
        //生成输入输出流对象
        iCountTimer=iCountTimer+1;
        try
        {
            rafFile=new RandomAccessFile(filepath,"r");
            //建立字符串已确定发送再次失败的个数
            String sOrrer=new String("ok");
            //判断是否到文件尾
            while(rafFile.getFilePointer()<rafFile.length())
            {
              String sEmail=rafFile.readLine();
              //判断是否是一个有效的邮箱地址
              if(sEmail.indexOf(":")==-1)
              {

                String[] sEmailArr=myjbemail.myinstr(sEmail,"/");
                //进行格式转换
                String sPort=sEmailArr[0].toString();
                int iPort=java.lang.Integer.parseInt(sPort);
                String password=sEmailArr[1].toString();
                String sName=sEmailArr[2].toString();
                String sForm=sEmailArr[3].toString();
                String sTo=sEmailArr[4].toString();
                String sBject=sEmailArr[5].toString();
                String sSmtp=sEmailArr[6].toString();
                String sFormat=sEmailArr[7].toString();
                //格式转换完毕开始发送
                String retSend=myjbemail.sendmail(MailPathLog,iPort,password,sName,sForm,sTo,sBject,sText,sSmtp,sFormat);
                //如果发送失败则记入字符串
                if (!retSend.equals("ok"))
                {
                  //失败的字符串
                  if(sOrrer.equals("ok"))
                  {
                    sOrrer=iPort+"/"+password+"/"+sName+"/"+sForm+"/"+sTo+"/"+sBject+"/"+sSmtp+"/"+sFormat+"&";//端口、密码、姓名、来自、发到、主题、smtp、格式
                  }
                  else
                  {
                    sOrrer=sOrrer+iPort+"/"+password+"/"+sName+"/"+sForm+"/"+sTo+"/"+sBject+"/"+sSmtp+"/"+sFormat+"&";//端口、密码、姓名、来自、发到、主题、smtp、格式
                  }
                  //失败写入数据库,确定是否是最后一次发送
                  if(iCountTimer>5)
                  {
                    //数据库操作项
                    //查询数据库取得上次的累计次数和上次发送是否失败
                    try
                    {
                      Class.forName(DirverName);
                      //DataConnection=DriverManager.getConnection(OdbcURL,"sa","");
                      DataConnection=DriverManager.getConnection(OdbcURL);
                      statement=DataConnection.createStatement();
                      //查询邮件地址列表
                      DataResultSet=statement.executeQuery("select * From xiao where tomail like '%"+sTo+"%' and biaozhu<9");
                      DataResultSet.next();
                      int cishu=DataResultSet.getInt("cishu");
                      ////////写入昨日发送失败数据库
                      String sgetName=DataResultSet.getString("name");
                      String stoMail=DataResultSet.getString("tomail");
                      String sDanwei=DataResultSet.getString("danwei");
                      String sLeixing=DataResultSet.getString("leixing");
                      //添加一个新记录
                      int num=statement.executeUpdate("insert into sendFail(name,tomail,danwei,leixing)values('"+sgetName+"','"+stoMail+"','"+sDanwei+"','"+sLeixing+"')");
                      ////////////////////
                      cishu=cishu+1;
                      String sFali=myselsql.Sqlgai(sTo,"sNo",cishu);
                      //关闭数据库连接
                      statement.close();
                    }
                    catch(ClassNotFoundException cnfe)
                    {
                      System.err.println(cnfe);
                    }
                    catch(SQLException sqle)
                    {
                      System.err.println(sqle);
                    }
                  }

                }
                else
                {
                  //成功后修改数据库
                  myselsql.Sqlgai(sTo,"sYes");
                }
                for(int i=0;i<sEmailArr.length;i++)
                   System.out.println(sEmailArr[i]);
                //确定有被退回邮件的标记
                ExitTimer=true;
              }
            }
            //建立新的日志文件
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            java.util.Date dateTime= new java.util.Date();
            String sDateTime=dateFormat.format(dateTime);
            myFileWrite.FileGain(FileReadPath,sDateTime);
            myFileWrite.WriteText("sOutput");
            if (!sOrrer.equals("ok"))
            {
              int indexOrrer=sOrrer.length();
              sOrrer=sOrrer.substring(0,indexOrrer-1);
              String[] LineOrrer=myjbemail.myinstr(sOrrer,"&");
              //写入发送失败的记录
              for(int j=0;j<LineOrrer.length;j++)
              {
                String sTextWrite=LineOrrer[j].toString();
                myFileWrite.FileGain(FileReadPath,sTextWrite);
                myFileWrite.WriteText("sAppend");
              }
            }
            //关闭输入输出流对象
            rafFile.close();
            /////////////////
            //生成进度文件
            try
            {
              File filelog=new File(FileJidu);
              BufferedWriter out2=new BufferedWriter(new FileWriter(filelog.getPath(),true));
              String newline = System.getProperty("line.separator");
              out2.write("A/");
              out2.close();
            }
            catch (IOException ex)
            {
                System.out.println(ex.toString());
            }
            ///////////////////
            //判断是否结束定时器
            if (ExitTimer==false || iCountTimer>5)
            {
              System.out.println("没有被退回的邮件或是循环此时已到极限定时器结束");
              timer.cancel();
                //生成进度文件
                try
                {
                  File filelog=new File(FileJidu);
                  BufferedWriter out2=new BufferedWriter(new FileWriter(filelog.getPath(),true));
                  String newline = System.getProperty("line.separator");
                  out2.write("B/");
                  out2.close();
                }
                catch (IOException ex)
                {
                    System.out.println(ex.toString());
                }
            }
            else
               ExitTimer=false;
        }
        catch (IOException ex)
        {
          System.out.println(ex.toString());
        }
      }
  };
  public void start()
  {
    timer.schedule(task,5000,15000);
    ExitTimer=false;
  }
  //生成进度文件
  public void WriteJidu()
  {
    try
    {
       File filelog=new File(FileJidu);
       BufferedWriter out2=new BufferedWriter(new FileWriter(filelog.getPath(),true));
       String newline = System.getProperty("line.separator");
       out2.write("A/");
       out2.close();
    }
    catch (IOException ex)
    {
        System.out.println(ex.toString());
    }
  }
  Timer timer=new Timer();//定时器类对象
  File filepath;//文件对象
  RandomAccessFile rafFile;//文件输入输出流对象
  String FileReadPath=new String();//日志文件路径
  String MailPathLog=new String();//日志文件根目录
  String FileJidu=new String();//进度文件路径
  jbemail myjbemail=new jbemail();//邮件发送类对象
  String sText=new String();
  FileWrite myFileWrite=new FileWrite();
  String pathFileText=new String();
  boolean ExitTimer;
  int iCountTimer;
  //建立数据库相关对象及变量
  private static Connection DataConnection;
  private static Statement statement;
  private static ResultSet DataResultSet;
  private static String DirverName ="sun.jdbc.odbc.JdbcOdbcDriver";
  private static String OdbcURL="jdbc:odbc:emaillist";
  private selsql myselsql=new selsql();//数据库操作类
}

⌨️ 快捷键说明

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