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 + -
显示快捷键?