java 定时群发邮件 防止定为垃圾邮件

package com.wzh.mail.timer;

import java.util.Timer;

public class TestTimer {

public static void main(String[] args){
   /*Timer t = new Timer();
   t.schedule(new MailTimerTask(), 0, 15*1000);*/
  
   String title = "[彩票]彩民村买100送100,更有专家助您中500万!";
   String content = "<table width='780' border='0' align='center' style=' margin:50px 0 27px 0' cellpadding='0' cellspacing='0'>"+
"<tr><td height='62' align='left' bgcolor='#FF6600'><img src='http://buy.caimincun.com/images/mail_3.jpg' width='356' height='44' alt='' style='padding:0 0 0 20px;' /></td><td align='right' valign='top' bgcolor='#FF6600'><img src='http://buy.caimincun.com/images/mail_5.jpg' alt='' width='258' height='33' border='0' usemap='#Map' style='padding-top:5px;' /></td></tr>"+
"<tr><td colspan='2' bgcolor='#FFCD24'>"+
"<table width='724' border='0' style=' margin:16px 0 27px 0' align='center' cellpadding='0' cellspacing='0'>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_10.jpg' width='724' height='70' alt='' /></td></tr>"+
     "<tr><td><img src='http://buy.caimincun.com/images/mail_12.jpg' alt='' width='724' height='103' border='0' usemap='#Map2' /></td></tr>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_13.gif' width='724' height='97' alt='' /></td></tr>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_14.gif' alt='' width='724' height='159' border='0' usemap='#Map3' /></td></tr>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_15.gif' width='724' height='98' alt='' /></td></tr>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_16.gif' width='206' height='137' alt='' /><img src='http://buy.caimincun.com/images/mail_17.gif' alt='' width='518' height='137' border='0' usemap='#Map4' /></td></tr>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_18.gif' width='724' height='95' alt='' /></td></tr>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_19.gif' alt='' width='724' height='140' border='0' usemap='#Map5' /></td></tr>"+
      "<tr><td><img src='http://buy.caimincun.com/images/mail_20.gif' alt='' width='724' height='63' border='0' usemap='#Map6' /></td></tr>"+
    "</table></td></tr>"+
"<tr><td height='52' align='left' bgcolor='#FF6600'><img src='http://buy.caimincun.com/images/mail_22.gif' width='129' height='27' alt='' /></td><td align='center' bgcolor='#FF6600'><img src='http://buy.caimincun.com/images/mail_24.gif' width='192' height='27' alt='' /></td></tr>"+
"</table>"+
"<map name='Map' id='Map'><area shape='rect' coords='3,12,56,26' href='http://buy.caimincun.com/index.jsp' target='_blank' /><area shape='rect' coords='81,11,111,26' href='http://buy.caimincun.com/inc/admin_login.jsp ' target='_blank' /><area shape='rect' coords='135,10,189,26' href='http://buy.caimincun.com/inc/reg.jsp' target='_blank' /><area shape='rect' coords='202,11,254,26' href='http://buy.caimincun.com/about/about.htm ' target='_blank' /></map>"+
"<map name='Map2' id='Map2'><area shape='rect' coords='249,49,397,70' href='http://buy.caimincun.com/inc/tzz_active.htm ' target='_blank' /></map>"+
"<map name='Map3' id='Map3'><area shape='rect' coords='285,104,375,135' href='http://buy.caimincun.com/inc/reg.jsp ' target='_blank' /></map>"+
"<map name='Map4' id='Map4'><area shape='rect' coords='247,58,337,88' href='http://buy.caimincun.com/index.jsp ' target='_blank' /></map>"+
"<map name='Map5' id='Map5'><area shape='rect' coords='352,85,441,112' href='http://sms.zhcw.com/ ' target='_blank' /></map>"+
"<map name='Map6' id='Map6'><area shape='rect' coords='284,18,436,35' href='http://buy.caimincun.com/inc/tzz_active.htm ' target='_blank' /></map>";
   /*"<table>" +
   "<tr><a href='http://buy.caimincun.com' target='blank'><img src='http://buy.caimincun.com/images/tzz_active_01.gif' border='0'/></a></tr>" +
   "<tr><a href='http://buy.caimincun.com' target='blank'><img src='http://buy.caimincun.com/images/tzz_active_02.gif' border='0'/></a></tr>"+
   "<tr><a href='http://buy.caimincun.com' target='blank'><img src='http://buy.caimincun.com/images/tzz_active_03.gif' border='0'/></a></tr>" +
   "<tr><a href='http://buy.caimincun.com' target='blank'><img src='http://buy.caimincun.com/images/tzz_active_04.gif' border='0'/></a></tr>"+
   "<tr><a href='http://buy.caimincun.com' target='blank'><img src='http://buy.caimincun.com/images/tzz_active_05.gif' border='0'/></a></tr>"+
   "<tr><a href='http://buy.caimincun.com' target='blank'><img src='http://buy.caimincun.com/images/tzz_active_06.gif' border='0'/></a></tr>"+
   "</table>";*/
   String userName = "wmq534";
   String inFilePath ="F:/volume1.xls";
   String outFilePath="F:/test.txt";
   Timer t = new Timer();
   t.schedule(new MailTimerTask(title,content,userName,inFilePath,outFilePath), 0, 20*1000);
}
}

package com.wzh.mail.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class FileUtil {
Workbook workbook = null;
Sheet sheet = null;
/**
*<br>方法说明:读取excel文件一行数据
*<br>输入参数:int row指定的行数
*<br>返回类型:String〔〕结果数组
*/
public String[] readLine(int row){
      try{
        //获取数据表列数
        int colnum = sheet.getColumns();
        String[] rest = new String[colnum];
        for(int i = 0; i < colnum; i++){
          String sTemp = read(i,row);
          if(sTemp!=null)
           rest[i] = sTemp;
        }
        return rest;
      }catch(Exception e){
        System.out.println("readLine err:"+e);
        workbook.close();
        return null;
      }
}
/**
*<br>方法说明:读取excel的指定单元数据
*<br>输入参数:
*<br>返回类型:
*/
public String read(int col, int row){
      try{
        //获得单元数据
        Cell a2 = sheet.getCell(col,row);
        String rest = a2.getContents();
        return rest;
      }catch(Exception e){
        System.out.println("read err:"+e);
        workbook.close();
        return null;
      }
}
  
public List readExcel(String url) {
List list = new ArrayList();
   File filename = new File(url);
   String parameter = "";
   try {
    workbook = Workbook.getWorkbook(filename);
    sheet = workbook.getSheet(0);// 第1个sheet
    Cell c = null;
    int row = sheet.getRows();// 总行数
    System.out.println("总行数"+row);
    int col = sheet.getColumns();// 总列数
    System.out.println("总列数 "+col);
    for(int j=0;j<row;j++){
     for (int i = 0; i < col; i++) {
      parameter = sheet.getCell(i, j).getContents();
//      System.out.println(parameter);
      list.add(parameter);
     }
    }
    System.out.println("--------------------------------------");
    return list;
}catch(Exception e){
   e.printStackTrace();
   System.out.println("readLine err:"+e);
        workbook.close();
        return null;
}

}

/**
*<br>方法说明:写入文件操作
*<br>输入参数:
*<br>返回类型:
*/
public void write(String outFilePath,String username,String email){
      try{
          //创建一个可写入的excel文件对象
          WritableWorkbook workbook = Workbook.createWorkbook(new File(outFilePath));
          //使用第一张工作表,将其命名为“午餐记录”
          WritableSheet sheet = workbook.createSheet("发送记录", 0);
          //表头
          Label label0 = new Label(0, 0, "发送时间");
          sheet.addCell(label0);
          Label label1 = new Label(1, 0, "用户名");
          sheet.addCell(label1);
          Label label2 = new Label(2, 0, "电子邮件");
          sheet.addCell(label2);
          Label label3 = new Label(3, 0, "备注");
          sheet.addCell(label3);
          //格式化日期
          jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy-dd-MM hh:mm:ss");
          jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
          jxl.write.DateTime labelDTF = new jxl.write.DateTime(0, 1, new java.util.Date(), wcfDF);
          sheet.addCell(labelDTF);
          //普通字符
          Label labelCFC = new Label(1, 1, "riverwind");
          sheet.addCell(labelCFC);
          //格式化数字
          jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
          WritableCellFormat wcfN = new WritableCellFormat(nf);
          jxl.write.Number labelNF = new jxl.write.Number(2, 1, 13.1415926, wcfN);
          sheet.addCell(labelNF);
         
          
          jxl.write.Number labelNNF = new jxl.write.Number(3, 1, 10.50001, wcfN);
          sheet.addCell(labelNNF);
          //关闭对象,释放资源
          workbook.write();
          workbook.close();


      }catch(Exception e){
        System.out.println(e);
      }
}


public static void main(String[] args) {
   /* List list = new ArrayList();
   FileUtil t = new FileUtil();
   list = t.readExcel("F:/volume1.xls");
   for(Iterator it = (Iterator) list.iterator();it.hasNext();){
    System.out.println("list="+it.next());
   }
   }*/
   FileUtil t = new FileUtil();
//   t.write("F:/test.xls", "wmq534", "wmq534@126.com");
   t.writeFile("wmq534@126.com", "F:/test.txt");
}
@Override
public String toString() {
   return super.toString();
}

public boolean writeFile(String con,String path){
   File f=new File(path);
   try{
   FileWriter outFile=new FileWriter(f,true);

   BufferedWriter bufferOut=new BufferedWriter(outFile);

   bufferOut.write(con);

   bufferOut.newLine();

   bufferOut.flush();

   bufferOut.close();
  
   return true;

   } catch(IOException e){
    return false;
    }

   }

}

package com.wzh.mail.util;

import java.util.ArrayList;
import java.util.List;

import com.wzh.mail.base.MailSendParams;

public class SendMail {
List list = new ArrayList();
MailUtil mu = new MailUtil();
String outFileName ="";
MailSendParams msp = new MailSendParams();
public SendMail(){
  
}
public SendMail(String title,String content,String toUserName,String toEmail,String outFilePath){
   msp.setMailTitle(title);
   msp.setMailContent(content);
   msp.setMailToUserName(toUserName);
   msp.setMailTo(toEmail);
   mu.InitMailServerCfg(msp);
   mu.SetMailInfo(msp);
   this.outFileName = outFilePath;
}
public List readFile(String InFileName,String OutFileName){
   return list = mu.SendMailFromExcelFile2(InFileName,OutFileName);
}
public boolean sendMailOne(String email){
   boolean ifSend = mu.SendMail(email);
   if(ifSend){
    FileUtil t = new FileUtil();
    t.writeFile(email,outFileName);
   }
   return ifSend;
}

}

package com.wzh.mail.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.wzh.mail.base.IMailDaoImpl;
import com.wzh.mail.base.MailSendParams;

public class MailUtil extends IMailDaoImpl {
List mailList = new ArrayList();
/**
* 初始化邮件发送设置 参数见MailSendParams
*/
public void InitMailServerCfg(MailSendParams params){
   // TODO Auto-generated method stub
   this.smtpHost = "121.197.252.26";//smtp发送服务器的地址
   this.smtpUserName = "admin@caifdfcun.com";//smtp发送邮箱的用户名
   this.smtpUserPass = "********";//smtp发送邮箱的用户密码
   this.smtpFrom = "admin@caimfdun.com";//smtp发送邮箱名
   this.sendSplitTime = (long) 15;
  
}

/**
* 设置默认要发送邮件的信息 邮件标题 邮件内容 需要发送的用户称呼等
*/
public void SetMailInfo(MailSendParams params){
   this.mailTitle = params.getMailTitle();
   this.mailContent = params.getMailContent();
   this.mailToUserName = params.getMailToUserName();
   this.mailTo = params.getMailTo();//需要发送的邮箱
}

/**
* 从文件读出邮件list InFileName邮件list的输入文件, 格式txt
* OutFileName 邮件发送输出文件,记录发送文件的情况 格式 txt
* @param InFileName
* @param OutFileName
*/
public void SendMailFromTxtFile(String InFileName,String OutFileName){
  
  
}

/**
* 从文件读出邮件list InFileName邮件list的输入文件, 格式excel
* OutFileName 邮件发送输出文件,记录发送文件的情况 格式 txt
* @param InFileName
* @param OutFileName
*/
public List SendMailFromExcelFile2(String InFileName,String OutFileName){
   FileUtil t = new FileUtil();
   return mailList = t.readExcel(InFileName);
}

/**
* 按指定的邮件标题,内容发送邮件,可以提供指定个数的参数使用,
* 在邮件内容中使用特殊字符串代表间隔位,在此拼装邮件内容。
* @param mailParams
* @param params
*/
public void SendMailByParams(MailSendParams mailParams,String[] params){
   String email = params[0];
   String title = params[1];
   String content = params[2];
   String mailToUserName = params[3];
    try {
    Properties props = new Properties();
    props.put("mail.smtp.host", this.smtpHost);

   props.put("mail.smtp.connectiontimeout", "10000"); // 防止连接超时Timer一直等待
    props.put("mail.smtp.timeout", "10000");
    props.put("mail.smtp.auth", "true");
    Session ssn = Session.getInstance(props, null);
    MimeMessage message = new MimeMessage(ssn);
    InternetAddress fromAddress = new InternetAddress(this.smtpFrom);
    message.setFrom(fromAddress);
    InternetAddress toAddress = new InternetAddress(email);
    message.addRecipient(Message.RecipientType.TO, toAddress);
    message.setSubject(title);
    message.setContent(content, "text/html;charset=gbk");
    Transport transport;//当出现连接超时问题时,自动放弃当前连接,进行下一次的链接发送
{
     transport = ssn.getTransport("smtp");
     transport.connect(this.smtpHost, this.smtpUserName, this.smtpUserPass);
    } catch (RuntimeException e) {
     e.printStackTrace();
     return false;
    }
    if(!transport.isConnected()){
     System.out.println("连接超时"+email);
     return false;
    }    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
    transport.close();
System.out.println("邮件成功发送!");
   } catch (Exception e) {
    e.printStackTrace();
   }
}

/**
* 别的模块调用传入list参数
* @param mailList
*/
public void SetMailList(List mailList){
   this.mailList = mailList;
  
}

/**
* 从本地list发送邮件
*/
public void SendMails(){
  
}
public boolean SendMail(String email){
   try {
    Properties props = new Properties();
    props.put("mail.smtp.host", this.smtpHost);
    props.put("mail.smtp.auth", "true");
    Session ssn = Session.getInstance(props, null);
    MimeMessage message = new MimeMessage(ssn);
    InternetAddress fromAddress = new InternetAddress(this.smtpFrom);
    message.setFrom(fromAddress);
    InternetAddress toAddress = new InternetAddress(email);
    message.addRecipient(Message.RecipientType.TO, toAddress);
    message.setSubject(this.mailTitle);
    message.setContent(this.mailContent, "text/html;charset=gbk");
    Transport transport = ssn.getTransport("smtp");
    transport.connect(this.smtpHost, this.smtpUserName, this.smtpUserPass);
    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
    transport.close();
System.out.println("success:"+email);
    return true;
   } catch (Exception e) {
    e.printStackTrace();
    return false;
   }
}
  
  

/**
* 将一个邮件信息添加到发送list
* @param params
*/
public void AddMailList(MailSendParams params){
   mailList.add(params);
}

/**
* 重置邮件列表
*/
public void initMailList(){
   this.mailList = null;
}


/**
* 主函数 测试使用 包括所有的参数,可以命令行测试
*/
// public void man();

}
package com.wzh.mail.base;

import java.util.List;

public abstract class IMailDaoImpl implements IMailDao {

public static boolean ifEnd = true;//判定邮件发送任务是否已经结束
//发送服务器参数目前固定,等邮件发送功能完成后做设置功能,参数值最好能写入properties文件中
public static String smtpHost = null;//smtp发送服务器的地址
public static String smtpUserName = null;//smtp发送邮箱的用户名
public static String smtpUserPass = null;//smtp发送邮箱的用户密码
public static String smtpFrom = null;//smtp发送邮箱名
public static Long sendSplitTime = null;//发送时间间隔(为防止发送邮箱被当成垃圾邮箱)
public String mailTo;//需要发送的邮箱
public String mailTitle = null;//邮件标题
public String mailContent = null;//邮件内容
public String mailToUserName = null;//需要发送的用户称呼
public List mailList = null;//需要发送的邮箱list (考虑下list中存放MailSendParams对象,可能每个邮箱对应的称呼都不一样)
public void AddMailList(MailSendParams params) {
   // TODO Auto-generated method stub

}
//新添加
public List SendMailFromExcelFile2(String InFileName,String OutFileName){
   return null;
}
//新添加
public boolean SendMail(String email){
   return false;
}

public void InitMailServerCfg(MailSendParams params) {
   // TODO Auto-generated method stub

}

public void SendMailByParams(MailSendParams mailParams, String[] params) {
   // TODO Auto-generated method stub

}

public void SendMailFromExcelFile(String InFileName, String OutFileName) {
   // TODO Auto-generated method stub

}

public void SendMailFromTxtFile(String InFileName, String OutFileName) {
   // TODO Auto-generated method stub

}

public void SendMails() {
   // TODO Auto-generated method stub

}

public void SetMailInfo(MailSendParams params) {
   // TODO Auto-generated method stub

}

public void SetMailList(List mailList) {
   // TODO Auto-generated method stub

}

public void initMailList() {
   // TODO Auto-generated method stub

}

}

package com.wzh.mail.base;

import java.util.List;

public interface IMailDao {

/**
* 初始化邮件发送设置 参数见MailSendParams
*/
public void InitMailServerCfg(MailSendParams params);

/**
* 设置默认要发送邮件的信息 邮件标题 邮件内容 需要发送的用户称呼等
*/
public void SetMailInfo(MailSendParams params);

/**
* 从文件读出邮件list InFileName邮件list的输入文件, 格式txt
* OutFileName 邮件发送输出文件,记录发送文件的情况 格式 txt
* @param InFileName
* @param OutFileName
*/
public void SendMailFromTxtFile(String InFileName,String OutFileName);

/**
* 从文件读出邮件list InFileName邮件list的输入文件, 格式excel
* OutFileName 邮件发送输出文件,记录发送文件的情况 格式 txt
* @param InFileName
* @param OutFileName
*/
public void SendMailFromExcelFile(String InFileName,String OutFileName);

/**
* 按指定的邮件标题,内容发送邮件,可以提供指定个数的参数使用,
* 在邮件内容中使用特殊字符串代表间隔位,在此拼装邮件内容。
* @param mailParams
* @param params
*/
public void SendMailByParams(MailSendParams mailParams,String[] params);

/**
* 别的模块调用传入list参数
* @param mailList
*/
public void SetMailList(List mailList);

/**
* 从本地list发送邮件
*/
public void SendMails();

/**
* 将一个邮件信息添加到发送list
* @param params
*/
public void AddMailList(MailSendParams params);

/**
* 重置邮件列表
*/
public void initMailList();

public boolean SendMail(String email);

public List SendMailFromExcelFile2(String InFileName,String OutFileName);
/**
* 主函数 测试使用 包括所有的参数,可以命令行测试
*/
// public void man();
}
package com.wzh.mail.base;

public class MailSendParams {

private String mailTitle;//邮件标题
private String mailContent;//邮件内容
private String mailTo;//需要发送的邮箱
private String mailToUserName;//需要发送的用户称呼
public String getMailTitle() {
   return mailTitle;
}
public void setMailTitle(String mailTitle) {
   this.mailTitle = mailTitle;
}
public String getMailContent() {
   return mailContent;
}
public void setMailContent(String mailContent) {
   this.mailContent = mailContent;
}
public String getMailTo() {
   return mailTo;
}
public void setMailTo(String mailTo) {
   this.mailTo = mailTo;
}
public String getMailToUserName() {
   return mailToUserName;
}
public void setMailToUserName(String mailToUserName) {
   this.mailToUserName = mailToUserName;
}
}

 

转自http://hi.baidu.com/wmqxyh/blog/item/ce638bb3a251e35e0823026f.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值