|
|
package com.espeed.yxy.mail;
|
|
|
|
|
|
import java.io.PrintWriter;
|
|
|
import java.io.StringWriter;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Properties;
|
|
|
import javax.mail.Transport;
|
|
|
import com.espeed.yxy.pojo.YxySendMailDetail;
|
|
|
import com.espeed.yxy.pojo.YxySendMailMaster;
|
|
|
import com.espeed.yxy.pojo.YxySendSmtpInfo;
|
|
|
import com.espeed.yxy.pojo.YxySmtpSendSelfOverset;
|
|
|
import com.espeed.yxy.pojo.YxySmtpSendSelfSet;
|
|
|
import com.espeed.yxy.pojo.YxySmtpSendSet;
|
|
|
import com.espeed.yxy.pojo.YxySmtpSuffixSet;
|
|
|
import com.espeed.yxy.service.YxySendMailService;
|
|
|
import com.espeed.yxy.timer.SendMailTimer;
|
|
|
import com.espeed.yxy.tool.DES_Encrypt;
|
|
|
import com.espeed.yxy.tool.DateFormat;
|
|
|
import com.espeed.yxy.tool.LogsTool;
|
|
|
/**
|
|
|
* 程序名称: EspeedMail_时速邮箱
|
|
|
* 程序版本: V1.0
|
|
|
* 作 者: 深圳市科飞时速网络技术有限公司(0755-88843776)
|
|
|
* 版权所有: 深圳市科飞时速网络技术有限公司
|
|
|
* 技术支持: Tech@21gmail.com
|
|
|
* 单元名称: 发送邮件之前的判断(营销游)
|
|
|
* 开始时间: 2013.12.09
|
|
|
* 程 序 员: 谢勇
|
|
|
* 最后修改:
|
|
|
* 备 注: 如需修改请通知程序员
|
|
|
*/
|
|
|
public class YxysendMethod {
|
|
|
//private static Properties props =null;
|
|
|
//private static Transport transport =null;
|
|
|
/**参数说明(1:service层接口,2:smtp服务器,3:邮件信息,4:smtp后缀信息,5:smtp后缀发送量信息)*/
|
|
|
public static void sendMethodImpl(YxySendMailService YxySendMailService,YxySendSmtpInfo SmtpInfo,YxySendMailMaster mailinfo){
|
|
|
//public static void sendMethodImpl(YxySendMailService YxySendMailService,YxySendSmtpInfo SmtpInfo,YxySendMailMaster mailinfo,List<YxySmtpSuffixSet> smtpsuffixsetList){
|
|
|
try{
|
|
|
//获取当前时间
|
|
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
String nowDate=sdf1.format(new Date());
|
|
|
//邮件ID
|
|
|
int mailid=mailinfo.getSend_mail_id();
|
|
|
//SMTPID
|
|
|
int smtpid=SmtpInfo.getSmtp_service_id();
|
|
|
//int isyxy=SmtpInfo.getSmtp_service_isyxy();//是自配还是运营
|
|
|
//判断是自配smtp还是运营smtp
|
|
|
// if(isyxy==0){//自配
|
|
|
// //更新smtp状态
|
|
|
// YxySendMailService.updateSmtpUseStatus(1,smtpid,"");
|
|
|
//
|
|
|
// //更新待发邮件为已使用中
|
|
|
// YxySendMailService.updateMailUseStatus(mailid,1,nowDate);
|
|
|
//
|
|
|
// //自配smtp发送方法
|
|
|
// selfSmtpMethod(YxySendMailService,SmtpInfo,mailinfo);
|
|
|
//
|
|
|
// //发送完后将smtp状态改回可用,且使用时间修改为当前时间
|
|
|
// YxySendMailService.updateSmtpUseStatus(0,smtpid,nowDate);
|
|
|
//
|
|
|
// //发送完后将待发邮件状态改回未使用
|
|
|
// YxySendMailService.updateMailUseStatus(mailid,0,nowDate);
|
|
|
// }else{//运营
|
|
|
try {
|
|
|
synchronized (SendMailTimer.nowtimer) {
|
|
|
//更新smtp状态
|
|
|
YxySendMailService.updateSmtpUseStatus(1,smtpid,"");
|
|
|
//更新待发邮件为已使用中
|
|
|
YxySendMailService.updateMailUseStatus(mailid,1,nowDate);
|
|
|
}
|
|
|
//调用方法
|
|
|
yxySmtpMethod(YxySendMailService,SmtpInfo,mailinfo);
|
|
|
//yxySmtpMethod(YxySendMailService,SmtpInfo,mailinfo,smtpsuffixsetList);
|
|
|
synchronized (SendMailTimer.nowtimer) {
|
|
|
//发送完后将smtp状态改回可用,且使用时间修改为当前时间
|
|
|
YxySendMailService.updateSmtpUseStatus(0,smtpid,nowDate);
|
|
|
//发送完后将待发邮件状态改回未使用
|
|
|
YxySendMailService.updateMailUseStatus(mailid,0,nowDate);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
//写入日志
|
|
|
StringWriter sw = new StringWriter();
|
|
|
e.printStackTrace(new PrintWriter(sw, true));
|
|
|
String str = sw.toString();
|
|
|
LogsTool.erroLogs(str);
|
|
|
//更新此邮件异常量
|
|
|
YxySendMailService.updateMailExpStatus(mailid,mailinfo.getExptionnum()+1);
|
|
|
}
|
|
|
//}
|
|
|
}catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
System.out.println("sendMethodImpl方法加载异常!");
|
|
|
//写入日志
|
|
|
StringWriter sw = new StringWriter();
|
|
|
e.printStackTrace(new PrintWriter(sw, true));
|
|
|
String str = sw.toString();
|
|
|
LogsTool.erroLogs(str);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**自配运行方法*/
|
|
|
public static void selfSmtpMethod(YxySendMailService YxySendMailService,YxySendSmtpInfo SmtpInfo,YxySendMailMaster mailinfo){
|
|
|
try {
|
|
|
//邮件ID
|
|
|
int mailid=mailinfo.getSend_mail_id();
|
|
|
//邮件UID
|
|
|
String mailuid=mailinfo.getMail_uid();
|
|
|
//验证SMTP
|
|
|
List<Object> isTong=connectionService(SmtpInfo.getSmtp_service_number(),SmtpInfo.getSmtp_service_account(),SmtpInfo.getSmtp_service_password(),SmtpInfo.getSmtp_is_ssl(),SmtpInfo.getSmtp_service_port());
|
|
|
|
|
|
//判断是否验证通过
|
|
|
if(isTong.get(0).toString().equals("1")){
|
|
|
Properties props =(Properties) isTong.get(1);
|
|
|
Transport transport =(Transport) isTong.get(2);
|
|
|
//通过获取的待发邮件ID来获取该封邮件的待发地址
|
|
|
int MastermailId=mailinfo.getSend_mail_id();//该封邮件主ID
|
|
|
List<YxySendMailDetail> addressList=YxySendMailService.findAddressByMailID(MastermailId);//待发邮件对应的地址
|
|
|
|
|
|
if(addressList.size()<=0){
|
|
|
System.out.println("没有待发地址了..结束后续工作");
|
|
|
//将该邮件状态改为已发送
|
|
|
YxySendMailService.updateMailStatus(1,mailid,mailuid);
|
|
|
}else{
|
|
|
//-------定义变量------------------
|
|
|
//获取当前时间
|
|
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
String currDate=sdf1.format(new Date());
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
String nowDay=sdf.format(new Date());
|
|
|
|
|
|
String smtpaccount=SmtpInfo.getSmtp_service_account();//smtp账号
|
|
|
String smtphost=SmtpInfo.getSmtp_service_number();//SMTP服务器
|
|
|
int selftenNum=0;//十分钟最大发信量
|
|
|
int selfhourNum=0;//60分钟最大发信量
|
|
|
int selfdayNum=0;//一天最大发信量
|
|
|
|
|
|
int selftenNumOver=0;//十分钟已发信量
|
|
|
int selfhourNumOver=0;//60分钟已发信量
|
|
|
int selfdayNumOver=0;//一天已发信量
|
|
|
|
|
|
boolean tenisok=false;//10分钟是否通过
|
|
|
boolean hourisok=false;//60分钟是否通过
|
|
|
boolean dayisok=false;//一天是否通过
|
|
|
|
|
|
int selftenNumSurplus=0;//十分钟剩余发信量
|
|
|
int selfhourNumSurplus=0;//60分钟剩余发信量
|
|
|
int selfdayNumSurplus=0;//一天剩余发信量
|
|
|
//1.获取自配smtp发送量限制
|
|
|
List<YxySmtpSendSelfSet> smtpselfsendsetList=YxySendMailService.findSendSelfSetByService(smtphost);
|
|
|
|
|
|
if(smtpselfsendsetList.size()>=2){//说明有控制量限制(包含默认的和自己配的)
|
|
|
if(!smtpselfsendsetList.get(0).getSmtp_send_self_set_account().equals("domain")){//自配量
|
|
|
selftenNum=smtpselfsendsetList.get(0).getSmtp_send_self_set_tennum();//十分钟最大发信量
|
|
|
selfhourNum=smtpselfsendsetList.get(0).getSmtp_send_self_set_hournum();//60分钟最大发信量
|
|
|
selfdayNum=smtpselfsendsetList.get(0).getSmtp_send_self_set_daynum();//一小时最大发信量
|
|
|
}else{//domain默认设置信息
|
|
|
selftenNum=smtpselfsendsetList.get(1).getSmtp_send_self_set_tennum();//十分钟最大发信量
|
|
|
selfhourNum=smtpselfsendsetList.get(1).getSmtp_send_self_set_hournum();//60分钟最大发信量
|
|
|
selfdayNum=smtpselfsendsetList.get(1).getSmtp_send_self_set_daynum();//一小时最大发信量
|
|
|
}
|
|
|
}else{//默认的
|
|
|
selftenNum=smtpselfsendsetList.get(0).getSmtp_send_self_set_tennum();//十分钟最大发信量
|
|
|
selfhourNum=smtpselfsendsetList.get(0).getSmtp_send_self_set_hournum();//60分钟最大发信量
|
|
|
selfdayNum=smtpselfsendsetList.get(0).getSmtp_send_self_set_daynum();//一小时最大发信量
|
|
|
}
|
|
|
//2.获取自配smtp已发送量
|
|
|
List<YxySmtpSendSelfOverset> smtpsendsetoverList=YxySendMailService.findBySmtpAccount(smtpaccount);
|
|
|
if(smtpsendsetoverList.size()>0){//说明已存在发送量记录
|
|
|
//判断是不是当天的记录
|
|
|
String nowsend=smtpsendsetoverList.get(0).getSmtp_send_self_over_daydate();
|
|
|
if(nowDay.equals(nowsend)){//说明是当天的记录
|
|
|
//已发量
|
|
|
selftenNumOver=smtpsendsetoverList.get(0).getSmtp_send_self_over_tennum();
|
|
|
selfhourNumOver=smtpsendsetoverList.get(0).getSmtp_send_self_over_hournum();
|
|
|
selfdayNumOver=smtpsendsetoverList.get(0).getSmtp_send_self_over_daynum();
|
|
|
|
|
|
//判断是否在某段时间内发送量是否满足
|
|
|
//1.10分钟内判断*/
|
|
|
if(DateFormat.minute1s(smtpsendsetoverList.get(0).getSmtp_send_self_over_tendate(),currDate)<10){//在此时间段内
|
|
|
if(selftenNumOver>=selftenNum){//已发量大于限定量则不能发
|
|
|
tenisok=false;
|
|
|
}else{
|
|
|
tenisok=true;
|
|
|
}
|
|
|
}else{//不在此时间段内
|
|
|
selftenNumOver=0;
|
|
|
tenisok=true;
|
|
|
//更新此smtp十分钟为0
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_tennum(0);
|
|
|
}
|
|
|
|
|
|
//60分钟内判断
|
|
|
if(DateFormat.minute1s(smtpsendsetoverList.get(0).getSmtp_send_self_over_hourdate(),currDate)<60){//在此时间段内
|
|
|
if(selfhourNumOver>=selfhourNum){//已发量大于限定量则不能发
|
|
|
hourisok=false;
|
|
|
}else{
|
|
|
hourisok=true;
|
|
|
}
|
|
|
}else{//不在此时间段内
|
|
|
selfhourNumOver=0;
|
|
|
hourisok=true;
|
|
|
//更新此smtp60分钟为0
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_hournum(0);
|
|
|
}
|
|
|
|
|
|
//一天内判断
|
|
|
if(smtpsendsetoverList.get(0).getSmtp_send_self_over_daydate().equals(nowDay)){//是否在当天
|
|
|
if(selfdayNumOver>=selfdayNum){//已发量大于限定量则不能发
|
|
|
dayisok=false;
|
|
|
}else{
|
|
|
dayisok=true;
|
|
|
}
|
|
|
}else{//不在此时间段内
|
|
|
selfdayNumOver=0;
|
|
|
dayisok=true;
|
|
|
//更新此smtp一天数为0
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_daynum(0);
|
|
|
}
|
|
|
//YxySendMailService.updateSendSelfSet(smtpsendsetoverList.get(0));
|
|
|
}
|
|
|
}else{//不存在发送记录则添加一条
|
|
|
YxySmtpSendSelfOverset o=new YxySmtpSendSelfOverset();
|
|
|
o.setSmtp_send_self_over_account(smtpaccount);//smtp账号
|
|
|
o.setSmtp_send_self_over_tendate(currDate);
|
|
|
o.setSmtp_send_self_over_hourdate(currDate);
|
|
|
o.setSmtp_send_self_over_daydate(nowDay);
|
|
|
//添加自配设置信息
|
|
|
YxySendMailService.addSendSelfSet(o);
|
|
|
tenisok=true;
|
|
|
hourisok=true;
|
|
|
dayisok=true;
|
|
|
}
|
|
|
if(tenisok&&hourisok&&dayisok){//如果发送量都已通过检测则调用发送程序
|
|
|
//获取剩余量
|
|
|
selftenNumSurplus=selftenNum-selftenNumOver;//十分钟剩余发信量
|
|
|
selfhourNumSurplus=selfhourNum-selfhourNumOver;//60分钟剩余发信量
|
|
|
selfdayNumSurplus=selfdayNum-selfdayNumOver;//一天剩余发信量
|
|
|
int minNum=0;//最小值
|
|
|
//三个时间内取最小值(此账号最多能发的量)
|
|
|
if(selftenNumSurplus<selfhourNumSurplus&&selftenNumSurplus<selfdayNumSurplus){
|
|
|
minNum=selftenNumSurplus;
|
|
|
}else if(selfhourNumSurplus<selftenNumSurplus&&selfhourNumSurplus<selfdayNumSurplus){
|
|
|
minNum=selfhourNumSurplus;
|
|
|
}else if(selfdayNumSurplus<selftenNumSurplus&&selfdayNumSurplus<selfhourNumSurplus){
|
|
|
minNum=selfdayNumSurplus;
|
|
|
}
|
|
|
//调用发送方法
|
|
|
YxySendMail send=new YxySendMail();
|
|
|
//取固定量的地址
|
|
|
int sendSuccessNum=0;
|
|
|
if(minNum>addressList.size()){
|
|
|
//调用发邮件方法
|
|
|
send.sendMailMethod(addressList,YxySendMailService,SmtpInfo,mailinfo,props,transport);
|
|
|
}else{
|
|
|
List<YxySendMailDetail> minaddressList=new ArrayList<YxySendMailDetail>();
|
|
|
for(int j=0;j<minNum;j++){
|
|
|
minaddressList.add(addressList.get(j));
|
|
|
}
|
|
|
//调用发邮件方法,返回成功量
|
|
|
send.sendMailMethod(minaddressList,YxySendMailService,SmtpInfo,mailinfo,props,transport);
|
|
|
}
|
|
|
if(sendSuccessNum>0){
|
|
|
//更新自配smtp发送量
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_daydate(nowDay);
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_daynum(selfdayNumOver+sendSuccessNum);
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_hourdate(currDate);
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_hournum(selfhourNumOver+sendSuccessNum);
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_tendate(currDate);
|
|
|
smtpsendsetoverList.get(0).setSmtp_send_self_over_tennum(selftenNumOver+sendSuccessNum);
|
|
|
//更新已发量
|
|
|
YxySendMailService.updateSendSelfSet(smtpsendsetoverList.get(0));
|
|
|
}
|
|
|
|
|
|
|
|
|
}else{//未通过检测
|
|
|
System.out.println("发送量超标了");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
//写入日志
|
|
|
StringWriter sw = new StringWriter();
|
|
|
e.printStackTrace(new PrintWriter(sw, true));
|
|
|
String str = sw.toString();
|
|
|
LogsTool.erroLogs(str);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
/**运营运行方法*/
|
|
|
//public static void yxySmtpMethod(YxySendMailService YxySendMailService,YxySendSmtpInfo SmtpInfo,YxySendMailMaster mailinfo,List<YxySmtpSuffixSet> smtpsuffixsetList){
|
|
|
public static void yxySmtpMethod(YxySendMailService YxySendMailService,YxySendSmtpInfo SmtpInfo,YxySendMailMaster mailinfo){
|
|
|
try {
|
|
|
///定义变量------------------
|
|
|
//1.此为没有设置的后缀地址集合
|
|
|
// List<YxySendMailDetail> nohouzhui=new ArrayList<YxySendMailDetail>();
|
|
|
// //2.保存有设置的后缀
|
|
|
// List<YxySendMailDetail> havehouzhui=new ArrayList<YxySendMailDetail>();
|
|
|
// //3.保存能发的后缀地址集合
|
|
|
// List<YxySendMailDetail> sendAddress=new ArrayList<YxySendMailDetail>();
|
|
|
//5.获取当前时间
|
|
|
// SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
// String currDate=sdf1.format(new Date());
|
|
|
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
// String nowDay=sdf.format(new Date());
|
|
|
//邮件ID
|
|
|
int mailid=mailinfo.getSend_mail_id();
|
|
|
//邮件唯一码
|
|
|
String mailuid=mailinfo.getMail_uid();
|
|
|
//smtp相关信息
|
|
|
String smtpService=SmtpInfo.getSmtp_service_number();//smtp服务器
|
|
|
//通过获取的待发邮件ID来获取该封邮件的待发地址(未包含异常邮件)
|
|
|
int MastermailId=mailinfo.getSend_mail_id();//该封邮件主ID
|
|
|
List<YxySendMailDetail> addressList=YxySendMailService.findAddressByMailID(MastermailId);//待发邮件对应的地址
|
|
|
if(addressList.size()<=0){
|
|
|
//将该邮件状态改为已发送
|
|
|
YxySendMailService.updateMailStatus(1,mailid,mailuid);
|
|
|
System.out.println("邮件:"+MastermailId+"整理后没有待发地址!!!");
|
|
|
}else{
|
|
|
//是否SSL加密
|
|
|
int isssl=SmtpInfo.getSmtp_is_ssl();
|
|
|
//端口号
|
|
|
String port=SmtpInfo.getSmtp_service_port();
|
|
|
//验证SMTP是否通过
|
|
|
List<Object> isTong=connectionService(smtpService,SmtpInfo.getSmtp_service_account(),SmtpInfo.getSmtp_service_password(),isssl,port);
|
|
|
if(isTong.get(0).toString().equals("1")){
|
|
|
Properties props =(Properties) isTong.get(1);
|
|
|
Transport transport =(Transport) isTong.get(2);
|
|
|
//调用发邮件方法
|
|
|
YxySendMail send=new YxySendMail();
|
|
|
send.sendMailMethod(addressList,YxySendMailService,SmtpInfo,mailinfo,props,transport);
|
|
|
// //获取后缀已发送量信息
|
|
|
// List<YxySmtpSendSet> smtpsendsetList=YxySendMailService.findAllSmtpSendSet(smtpService,nowDay);
|
|
|
// //如果没有数据则说明是新的一天了(删除以前的信息)
|
|
|
// if(smtpsendsetList.size()==0){
|
|
|
// YxySendMailService.delmSmtpSet(smtpService);
|
|
|
// }
|
|
|
// //循环判断该地址的后缀属于哪个smtp统计出来
|
|
|
// for(int i=0;i<addressList.size();i++){
|
|
|
// int gs=0;
|
|
|
// our:for(int j=0;j<smtpsuffixsetList.size();j++){
|
|
|
// //每个地址判断是否属于后缀类别中的一个
|
|
|
// if(addressList.get(i).getEmail_suffix().equals(smtpsuffixsetList.get(j).getSmtp_suffix_name())){
|
|
|
// havehouzhui.add(addressList.get(i));
|
|
|
// gs++;
|
|
|
// break our;
|
|
|
// }
|
|
|
// }
|
|
|
// if(gs==0){
|
|
|
// nohouzhui.add(addressList.get(i));
|
|
|
// }
|
|
|
// }
|
|
|
//
|
|
|
// int tensendNum=0;//10分钟最大发送数
|
|
|
// int hoursendNum=0;//60分钟最大发送数
|
|
|
// int daysendNum=0;//1天最大发送数
|
|
|
//
|
|
|
// int tensendNumOver=0;//10分钟已发送数
|
|
|
// int hoursendNumOver=0;//60分钟已发送数
|
|
|
// int daysendNumOver=0;//1天已发送数
|
|
|
//
|
|
|
// String addrSuffix="";//地址后缀
|
|
|
// String smtpsetSuffix="";//smtp设置后缀
|
|
|
//
|
|
|
// boolean tenisok=false;//10分钟是否通过
|
|
|
// boolean hourisok=false;//60分钟是否通过
|
|
|
// boolean dayisok=false;//一天是否通过
|
|
|
//
|
|
|
// //调用发送方法
|
|
|
// YxySendMail send=new YxySendMail();
|
|
|
// for(int i=0;i<2;i++){
|
|
|
// //当i=0时表示该地址没有在设置值中直接发送
|
|
|
// if(i==0){
|
|
|
// if(nohouzhui.size()==0){
|
|
|
// System.out.println("未后缀设置的没有地址");
|
|
|
// continue;
|
|
|
// }else{
|
|
|
// //没后缀的地址使用默认后缀控制参数(domain)
|
|
|
// send.sendMailMethod(nohouzhui,YxySendMailService,SmtpInfo,mailinfo,props,transport);/**调用发邮件方法*/
|
|
|
// }
|
|
|
// }
|
|
|
// //否则表示有设置值的后缀
|
|
|
// if(i==1){
|
|
|
// //判断是否还存在地址
|
|
|
// if(havehouzhui.size()==0){
|
|
|
// System.out.println("后缀集合中没有待发地址了!!!");
|
|
|
// }else{
|
|
|
// //循环判断该地址后缀是否还能发送
|
|
|
// address:for(int m=0;m<havehouzhui.size();m++){
|
|
|
// //1.获取该地址后缀发送最大量
|
|
|
// suffix:for(int f=0;f<smtpsuffixsetList.size();f++){
|
|
|
// addrSuffix=smtpsuffixsetList.get(f).getSmtp_suffix_name();//系统设定的后缀名
|
|
|
// //for(int j=0;j<havehouzhui.size();j++){
|
|
|
// if(havehouzhui.get(m).getEmail_suffix().equals(addrSuffix)){
|
|
|
// tensendNum=smtpsuffixsetList.get(f).getSmtp_suffix_ten();//10分钟最大发送量
|
|
|
// hoursendNum=smtpsuffixsetList.get(f).getSmtp_suffix_hour();//60分钟最大发送量
|
|
|
// daysendNum=smtpsuffixsetList.get(f).getSmtp_suffix_day();//一天最大发送量
|
|
|
// break suffix;
|
|
|
// }
|
|
|
// }
|
|
|
// boolean isexist=false;
|
|
|
// addrSuffix=havehouzhui.get(m).getEmail_suffix();//地址后缀赋值
|
|
|
// //循环后缀发送量
|
|
|
// smtpset:for(int s=0;s<smtpsendsetList.size();s++){
|
|
|
// //判断该地址后缀是否在设置中存在
|
|
|
// smtpsetSuffix=smtpsendsetList.get(s).getSmtp_send_set_suffix();//smtp设置后缀
|
|
|
// if(addrSuffix.equals(smtpsetSuffix)){//存在
|
|
|
// //如果存在则查出各个时间段的已发送量
|
|
|
// tensendNumOver=smtpsendsetList.get(s).getSmtp_send_set_tennum();//10分钟已发送数
|
|
|
// hoursendNumOver=smtpsendsetList.get(s).getSmtp_send_set_hournum();//60分钟已发送数
|
|
|
// daysendNumOver=smtpsendsetList.get(s).getSmtp_send_set_daynum();//1天已发送数
|
|
|
// isexist=true;
|
|
|
//
|
|
|
// //判断该地址的已发量与设定量是否通过
|
|
|
// //1.当前时间与最后一次发送时间判断是否是在10分钟内
|
|
|
// if(DateFormat.minute1s(smtpsendsetList.get(s).getSmtp_send_set_tendate(),currDate)<10){
|
|
|
// //在此10分钟内,判断是否能发
|
|
|
// if(tensendNumOver>=tensendNum){
|
|
|
// System.out.println("十分钟之内无法发送了");
|
|
|
// //此地址无法发送
|
|
|
// tenisok=false;
|
|
|
// continue address;
|
|
|
// }else{
|
|
|
// tenisok=true;
|
|
|
// }
|
|
|
// }else{
|
|
|
// tenisok=true;
|
|
|
// //更新此smtp10分钟为0
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_tennum(0);
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_tendate(currDate);
|
|
|
// }
|
|
|
// //2.当前时间与最后一次发送时间判断是否是在60分钟内
|
|
|
// if(DateFormat.minute1s(smtpsendsetList.get(s).getSmtp_send_set_hourdate(),currDate)<60){
|
|
|
// if(hoursendNumOver>hoursendNum){
|
|
|
// System.out.println("60分钟之内无法发送了");
|
|
|
// hourisok=false;
|
|
|
// //此地址无法发送
|
|
|
// continue address;
|
|
|
// }else{
|
|
|
// hourisok=true;
|
|
|
// }
|
|
|
// }else{
|
|
|
// hourisok=true;
|
|
|
// //更新此smtp60分钟为0
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_hournum(0);
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_hourdate(currDate);
|
|
|
// }
|
|
|
// //3.当前时间与最后一次发送时间判断是否是在一天内
|
|
|
// if(DateFormat.minute1s(smtpsendsetList.get(s).getSmtp_send_set_daydate()+" 00:00:00",currDate)<1440){
|
|
|
// if(daysendNumOver>daysendNum){
|
|
|
// System.out.println("一天之内无法发送了");
|
|
|
// dayisok=false;
|
|
|
// //此地址无法发送
|
|
|
// continue address;
|
|
|
// }else{
|
|
|
// dayisok=true;
|
|
|
// }
|
|
|
// }else{
|
|
|
// //更新此一天为0
|
|
|
// dayisok=true;
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_daynum(0);
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_daydate(currDate);
|
|
|
// }
|
|
|
// //是否都符合
|
|
|
// if(tenisok&&hourisok&&dayisok){
|
|
|
// sendAddress.add(havehouzhui.get(m));/**都符合将待发地址加入到可发地址集合中*/
|
|
|
// /**在该后缀信息上累加1*/
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_tennum(smtpsendsetList.get(s).getSmtp_send_set_tennum()+1);
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_hournum(smtpsendsetList.get(s).getSmtp_send_set_hournum()+1);
|
|
|
// smtpsendsetList.get(s).setSmtp_send_set_daynum(smtpsendsetList.get(s).getSmtp_send_set_daynum()+1);
|
|
|
//
|
|
|
// /**更新后缀已发量记录*/
|
|
|
// smtpsendsetList.set(s,smtpsendsetList.get(s));
|
|
|
//
|
|
|
// continue address;
|
|
|
// }else{
|
|
|
// break smtpset;
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// /**循环完后未存在的则新建一条*/
|
|
|
// if(!isexist){
|
|
|
// /**添加该后缀的配置信息*/
|
|
|
// YxySmtpSendSet o=new YxySmtpSendSet();
|
|
|
// o.setSmtp_send_set_service(smtpService);
|
|
|
// o.setSmtp_send_set_suffix(addrSuffix);
|
|
|
// o.setSmtp_send_set_tendate(currDate);
|
|
|
// o.setSmtp_send_set_hourdate(currDate);
|
|
|
// o.setSmtp_send_set_daydate(nowDay);
|
|
|
// o.setSmtp_send_set_daynum(1);
|
|
|
// o.setSmtp_send_set_hournum(1);
|
|
|
// o.setSmtp_send_set_tennum(1);
|
|
|
// /**将新的后缀量加入集合中*/
|
|
|
// smtpsendsetList.add(o);
|
|
|
//
|
|
|
//
|
|
|
// sendAddress.add(havehouzhui.get(m));
|
|
|
//
|
|
|
// }
|
|
|
// }
|
|
|
// //更新各个后缀信息的发送量
|
|
|
// synchronized (SendMailTimer.nowtimer) {
|
|
|
// YxySendMailService.updateSmtpSet(smtpsendsetList);
|
|
|
// }
|
|
|
// if(sendAddress.size()>0){
|
|
|
// //调用发邮件方法
|
|
|
// send.sendMailMethod(sendAddress,YxySendMailService,SmtpInfo,mailinfo,props,transport);
|
|
|
// }
|
|
|
// }
|
|
|
//
|
|
|
// }
|
|
|
// }
|
|
|
}else{
|
|
|
System.out.println("服务器:"+SmtpInfo.getSmtp_service_id()+"验证不通过");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
//写入日志
|
|
|
StringWriter sw = new StringWriter();
|
|
|
e.printStackTrace(new PrintWriter(sw, true));
|
|
|
String str = sw.toString();
|
|
|
LogsTool.erroLogs(str);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/** 连接邮件服务器,验证用户名,密码*/
|
|
|
public static List<Object> connectionService(String host,String servername,String serverpaswd,int isssl,String port) {
|
|
|
List<Object> result=new ArrayList<Object>();
|
|
|
result.add(0);
|
|
|
result.add(0);
|
|
|
result.add(0);
|
|
|
|
|
|
Properties props =new Properties();
|
|
|
Transport transport =null;
|
|
|
|
|
|
props.put("mail.smtp.host", host);
|
|
|
props.put("mail.smtp.auth", "true");/** 设定发送邮件时需要进行身份验证*/
|
|
|
javax.mail.Session mailSession = javax.mail.Session.getInstance(props);
|
|
|
mailSession.setDebug(false);
|
|
|
//判断是否需要ssl验证
|
|
|
String ishost=host.split("\\.")[1];
|
|
|
if(isssl==1){
|
|
|
if("gmail".equals(ishost)){
|
|
|
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
|
|
|
props.put("mail.smtp.socketFactory.fallback", "false");
|
|
|
props.put("mail.smtp.port", port);
|
|
|
props.put("mail.smtp.socketFactory.port", port);
|
|
|
}else{
|
|
|
props.put("mail.smtp.starttls.enable","true");
|
|
|
props.put("mail.smtp.port", port);
|
|
|
}
|
|
|
}
|
|
|
try {
|
|
|
//解密密码
|
|
|
DES_Encrypt desEncrypt = new DES_Encrypt();
|
|
|
desEncrypt.setKey("06");
|
|
|
desEncrypt.setDesString(serverpaswd);
|
|
|
serverpaswd=desEncrypt.getStrM();//smtp密码需要解密
|
|
|
|
|
|
transport = mailSession.getTransport("smtp");
|
|
|
transport.connect(host, servername, serverpaswd);
|
|
|
|
|
|
result.set(0, 1);
|
|
|
result.set(1, props);
|
|
|
result.set(2, transport);
|
|
|
} catch (Exception e) {
|
|
|
//写入日志
|
|
|
StringWriter sw = new StringWriter();
|
|
|
e.printStackTrace(new PrintWriter(sw, true));
|
|
|
String str = sw.toString();
|
|
|
LogsTool.erroLogs("服务器:"+host+","+servername+","+str);
|
|
|
//e.printStackTrace();
|
|
|
System.out.println("验证失败");
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
} |
...
|
...
|
|