亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

郵件輕松發(fā)--郵件群發(fā)小工具

系統(tǒng) 1775 0



????? 關于這個工具的創(chuàng)作:相信大家都有找工作的經歷,在簡歷投遞的時候是否有這樣的煩惱?點對點的發(fā)送郵件時,不停的復制粘貼自己的簡歷發(fā)送,在這一期間不僅浪費了大家相當多的一部分時間,而且發(fā)送簡歷的效率也不是很高。于是自己便做了一個這樣的小工具,能夠進行批量、群發(fā)郵件的功能。

??????一、開發(fā)前準備:

????? 必要的jar包:mail.jar、commons-email-1.1.jar、activation.jar

?????

???? 二、代碼編寫:

???? MailSenderInfo.java? 封裝Mail普通dojo類

???

    package cn.com.mes.mail;

import java.util.Date;
/**
 * 封裝郵件發(fā)送對象類
 * @author HuangXiaoyong
 */
public class MailSenderInfo {
        //郵件登錄賬號
	private String username = "";
        //郵件登錄密碼
	private String password = "";
        //郵件服務器地址
	private String hostName = "";
        //發(fā)件人郵箱地址
	private String from = "";
        //郵件標題
	private String title = "";
        //要發(fā)送Html文本路徑
	private String htmlPath = "";
        //發(fā)送時間
	private Date sendDate = null;
	
	public MailSenderInfo (){
		
	}
	

	public MailSenderInfo(String username, String password, String hostName,
			String from, String title) {
		super();
		this.username = username;
		this.password = password;
		this.hostName = hostName;
		this.from = from;
		this.title = title;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getHostName() {
		return hostName;
	}

	public void setHostName(String hostName) {
		this.hostName = hostName;
	}

	public String getFrom() {
		return from;
	}

	public void setFrom(String from) {
		this.from = from;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getHtmlPath() {
		return htmlPath;
	}


	public void setHtmlPath(String htmlPath) {
		this.htmlPath = htmlPath;
	}


	public Date getSendDate() {
		return sendDate;
	}


	public void setSendDate(Date sendDate) {
		this.sendDate = sendDate;
	}
}

  

?

?? 2.MailUtils郵件發(fā)送工具類

    package cn.com.mes.mail;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * 郵件發(fā)送工具類
 * @author HuangXiaoyong
 */
public class MailUtils {
	//郵件服務器地址
	public static final String EMAIL_HOST = "email.host";
	//郵箱登錄賬號
	public static final String EMAIL_USERNAME ="email.username";
	//郵箱登錄密碼
	public static final String EMAIL_PASSWORD ="email.password";
	//發(fā)送郵件標題
	public static final String EMAIL_TITLE ="email.title";
	//發(fā)件人郵箱地址
	public static final String EMAIL_FROM = "email.from";
	//發(fā)送Html簡歷路徑
	public static final String EMAIL_HTML_PATH = "email.html.path";
	//發(fā)送簡歷時間
	public static final String EMAIL_SEND_DATE = "email.senddate";
	//收件人郵箱地址
	public static final String EMAIL_TO = "email.to";
	
	public static void main(String[] args) throws Exception{
		 
	}
	
	private static List<String> mailAddList = new ArrayList<String>(); 
	
	/** 
	 * 將某個日期以yyyy-MM-dd HH:mm:ss格式轉化成字符串 
	 * @param date 
	 * @return str 
	 */ 
	public static String formatDateToString(Date date)
	{ 
	  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
	  String str = sdf.format(date); 
	  return str; 
	} 
	
	/**
	 * 將日期字符串轉化成Date對象
	 * @param strDate
	 * @return
	 */
	public static Date formatStringToDate(String strDate){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;  
		try{
			date = sdf.parse(strDate);
		}catch(Exception ex){
			ex.printStackTrace();
		}
		 
		  return date; 
	}
	
	
	/**
	 * 設置郵件屬性
	 * @param mailInfo
	 * @return
	 */
	public static boolean setEMailProperties(MailSenderInfo mailInfo){
		boolean flag = false;
		Properties props = new Properties();
		try{
			props.load(new FileInputStream(System.getProperty("user.dir")+"\\mail.properties"));
			props.setProperty(EMAIL_HOST, mailInfo.getHostName());
			props.setProperty(EMAIL_USERNAME, mailInfo.getUsername());
			props.setProperty(EMAIL_PASSWORD, mailInfo.getPassword());
			props.setProperty(EMAIL_TITLE, mailInfo.getTitle());
			props.setProperty(EMAIL_FROM, mailInfo.getFrom());
			props.setProperty(EMAIL_HTML_PATH, mailInfo.getHtmlPath());
			props.setProperty(EMAIL_SEND_DATE, formatDateToString(mailInfo.getSendDate()));
			FileOutputStream fos = new FileOutputStream(System.getProperty("user.dir")+"\\mail.properties");
			props.store(fos, "");
			fos.close();
			
			flag = true;
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
		
		return flag;
	}
	
	
	/**
         *  獲取郵件屬性
         * @return
         */
	public static MailSenderInfo getMailSenderInfo(){
		
		MailSenderInfo mailInfo = new MailSenderInfo();
		Properties props = new Properties();  
		try{
			props.load(new FileInputStream(System.getProperty("user.dir")+"\\mail.properties"));
		}catch(Exception ex){
			ex.printStackTrace();
		}
		mailInfo.setHostName(props.getProperty(EMAIL_HOST));
		mailInfo.setUsername(props.getProperty(EMAIL_USERNAME));
		mailInfo.setPassword(props.getProperty(EMAIL_PASSWORD));
		mailInfo.setFrom(props.getProperty(EMAIL_FROM));;
		mailInfo.setSendDate(formatStringToDate(props.getProperty(EMAIL_SEND_DATE)));
		mailInfo.setTitle(props.getProperty(EMAIL_TITLE));
		mailInfo.setHtmlPath(props.getProperty(EMAIL_HTML_PATH));
		return mailInfo;
		
	}

        /**
         * 收件人的數(shù)目
         * @return
         */
	public static int getToCounts(){
		return mailAddList.size();
	}

        
	
	/**
	 * 獲取發(fā)送郵件列表從指定的文件中
	 * @param path
	 * @return
	 */
	public static List<String> getToList(String path){
		String strEMailAdd = "";
		try{
			//從文件中讀取抓取的電子郵件
			strEMailAdd = getStringBufferText(path);
		}catch(Exception ex){
			ex.printStackTrace();
		}
		//將讀取的郵件地址字符串分割,添加到List集合中
		String[] strLists = strEMailAdd.split(",");
		for(String list : strLists){
			mailAddList.add(list);
		}
		return mailAddList;
	}
	
	/**
	 *  獲取指定文件的內容
	 * 
	 * @param path  要讀取文件的路徑
	 * @return
	 * @throws Exception
	 */
	public static String  getStringBufferText(String path){
		StringBuffer sbf = new StringBuffer();
		FileReader  read = null;
		BufferedReader br = null;
		try{
			read = new FileReader (path);
			br = new BufferedReader(read);
				
			String info = null;
			while((info = br.readLine())!=null) {
				sbf.append(info);
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			try{
				br.close();
				read.close();
			}catch(Exception ex){
				ex.printStackTrace();
			}
		}
		return sbf.toString();
		
	}
	
}

  

?

?

??3.MailSender類:發(fā)送郵件封裝類

    package cn.com.mes.mail;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.mail.HtmlEmail;
import org.apache.log4j.Logger;

/**
 * 發(fā)送郵件封裝類
 * @author HuangXiaoyong
 */
public class MailSender implements Runnable {
	
	protected Logger logger =  Logger.getLogger(MailSender.class);
	
	private MailSenderInfo mailInfo =null;
	
	private final String tipInfoFormat = "一共需要發(fā)送{0}封郵件,成功發(fā)送{1}封,失敗發(fā)送{2}封。\n\r失敗郵件列表地址:{3}"; 
	 
	 
	 

	
	public MailSender(){
		mailInfo = MailUtils.getMailSenderInfo();
	}
	
	public static void main(String[] args){
		Runnable run = new  MailSender();
		run.run();
	}
	
	@Override
	public void run() {
                String addressPath ="D:\\test\\09-09-09.txt";
                List<String> list =MailUtils.getToList(addressPath);
		this.sendHtmlEmail(mailInfo,list);
	}
	
	
	 public String getResultInfo(int sum ,int success,int fail,List<String> failList ) {     
	        return MessageFormat.format(this.tipInfoFormat, sum,success,    
	        		fail, failList.toString());    
	 }   

	public void sendHtmlEmail(MailSenderInfo info,
                List<String> emailAddresslist,
                javax.swing.JProgressBar bar){
            List<String> fialAddressList = new ArrayList<String>();
            bar.setMinimum(0);
            bar.setMaximum(emailAddresslist.size()-1);
            //收件人郵件地址list集合
            int failCount = 0;
            int successCount = 0;
            try{
                    for(int i=0;i<emailAddresslist.size();i++){
                          bar.setValue(i);
                          String contentText = MailUtils.getStringBufferText(info.getHtmlPath());
                            boolean flag = sendSingleHtmlEmail(info.getUsername(),
                                            info.getPassword(),
                                            info.getHostName(),
                                            info.getFrom(),
                                            emailAddresslist.get(i),
                                            info.getTitle(),
                                            contentText,
                                            info.getSendDate());
                            if(flag){
                                    successCount++;
                            }else{
                                    fialAddressList.add(emailAddresslist.get(i));
                                    failCount++;
                            }
                            //發(fā)送10封郵件,當前線程休眠2秒
                             if(i%10 == 0){	
                                     Thread.currentThread().sleep(1000*2);
                             }
                            
                    }
            }catch(Exception ex){
                    ex.printStackTrace();	
            }
            logger.info(getResultInfo(emailAddresslist.size(),successCount,failCount,fialAddressList));
            
        }

	public void sendHtmlEmail(MailSenderInfo info,List<String> emailAddresslist) {
		List<String> fialAddressList = new ArrayList<String>();
		//收件人郵件地址list集合
		int failCount = 0;
		int successCount = 0;
		try{
			for(int i=0;i<emailAddresslist.size();i++){
                              String contentText = MailUtils.getStringBufferText(info.getHtmlPath());
				boolean flag = sendSingleHtmlEmail(info.getUsername(),
						info.getPassword(),
						info.getHostName(),
						info.getFrom(),
						emailAddresslist.get(i),
						info.getTitle(),
						contentText,
						info.getSendDate());
				if(flag){
					successCount++;
				}else{
					fialAddressList.add(emailAddresslist.get(i));
					failCount++;
				}
				//發(fā)送10封郵件,當前線程休眠2秒
				 if(i%10 == 0){	
					 Thread.currentThread().sleep(1000*2);
				 }
			}
		}catch(Exception ex){
			ex.printStackTrace();	
		}
		logger.info(getResultInfo(emailAddresslist.size(),successCount,failCount,fialAddressList));
		
	}
	
	/**
	 * 
	 * 發(fā)送單個Html文本郵件
	 * @param username
	 * @param password
	 * @param host
	 * @param from
	 * @param to
	 * @param title
	 * @param context
	 * @return
	 */
	public boolean sendSingleHtmlEmail(String username,
				    String password,String host,
				    String from, String to,
				    String title, String context,Date sendDate ) throws Exception{
		logger.info(new Date().toString()+": 開始向"+to+"郵箱發(fā)送郵件....");

		boolean flag = false;
		HtmlEmail  email =new HtmlEmail();
		email.setAuthentication(username,password);
		email.setHostName(host); 
		email.setCharset("GB2312"); 
		//設置郵件標題
        email.setSubject(title); 
        
        try{
        	//設置發(fā)件人
	        email.setFrom(from);
	        //設置收件人
	        email.addTo(to); 
	        //Html郵件上下文,郵件內容
	        email.setHtmlMsg(context);
	        //設置郵件發(fā)送時間
	        email.setSentDate(sendDate);
	        email.send();
	        flag = true;
	        logger.info(new Date().toString()+":成功發(fā)送郵件");
        }catch(Exception ex){
        	logger.error("發(fā)送郵件出現(xiàn)異常!");
        	throw ex;
        }
		return flag;
	}

	
	
}

  

?

?

這些是主要后臺編寫的類,運行效果如下:

首先設置好郵件屬性

郵件輕松發(fā)--郵件群發(fā)小工具

?

在添加發(fā)送人的郵件列表(.txt)文件,每個郵件地址用逗號(",")分隔開

?
郵件輕松發(fā)--郵件群發(fā)小工具
?

swing前臺代碼就不在這里羅列了

?

不足的地方:前臺屬性設置的時候沒有做校驗判斷。

?

遇到的問題有:發(fā)送郵件群發(fā)到一定的數(shù)量的時候,發(fā)送郵件失敗。雖然我這里采用了多線程,問題依舊存在。

?

郵件輕松發(fā)的源碼也上傳上來了,歡迎大家下載源碼。javaeye的高手們,小弟不才,有什么問題和好的建議歡迎大家和我探討、交流,郵箱地址是 hxy7577326@qq.com .

?

郵件輕松發(fā)--郵件群發(fā)小工具


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产欧美精品综合一区 | 精品久久久久久亚洲 | 94久久国产乱子伦精品免费 | 久久久久久88色愉愉 | 久久精品国产久精国产 | 国产精品亚洲一区二区在线观看 | 亚洲精品一二三区-久久 | 99热精品在线观看 | 成人高清毛片a | 色在线观看视频 | 欧美国产综合 | jizz中国女人| 美女一级a毛片免费观看 | 亚洲伊人精品综合在合线 | 日韩一级大毛片欧美一级 | 亚洲精品人成在线观看 | 日韩精品一区二区三区四区 | 亚洲精品一区二区在线播放 | 四虎影院大全 | 欧美另类videosbestv | 久久两性 | 99色在线播放 | 亚洲欧美第一页 | 青春草国产成人精品久久 | 老妇激情毛片免费 | 亚洲国产高清在线精品一区 | 国产欧美一区二区精品久久久 | 免费视频爰爱太爽了 | 最近中文日本字幕免费完整 | 12至16末成年毛片视频 | 亚洲精品色婷婷在线影院麻豆 | 亚洲色视频在线播放网站 | 97高清国语自产拍免费 | 欧美日韩精品一区二区在线线 | 国产精品一区伦免视频播放 | 亚洲国产成人精彩精品 | 狠狠久久久久综合网 | 91久久免费视频 | 首页 动漫 亚洲 欧美 日韩 | 久久国产欧美另类久久久 | 91伊人影院|