⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agilemailtask.java

📁 本软件使用Java语言提供的JavaMail包进行开发
💻 JAVA
字号:
package com.lanx.app.mail;

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

import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.apache.log4j.Logger;

import com.lanx.app.mail.entity.MailAttache;
import com.lanx.app.mail.entity.MailHost;
import com.lanx.app.mail.entity.MailItem;
import com.lanx.app.mail.entity.MailInfo;
import com.lanx.app.mail.pool.Task;
import com.lanx.app.mail.util.AgileMailConstants;
import com.lanx.app.mail.util.AgileMailUtils;
import com.lanx.app.mail.util.EmailAutherticator;
import com.lanx.app.security.base64.DocDecoder;
import com.lanx.app.security.util.EncodeConstants;

public class AgileMailTask extends Task{
    private static Logger logger = Logger.getLogger(AgileMailTask.class);
	
    private MailItem mailItem;
	
	private AgileMailTask(MailItem mailItem) {	
		super();
		this.mailItem = mailItem;
	}
	
	public static AgileMailTask newInstance(MailItem mailItem) {
		return new AgileMailTask(mailItem);
	}
	
	public void run() {
		try {
			this.setPriority(AgileMailUtils.getPriority(mailItem.getPriority()));			
			sendMail();
		}catch(Exception e){
			logger.error(e);
			logger.error(e.getMessage());
			
			e.printStackTrace();
		}		
	}
	
	/**
	 * 发送邮件
	 * 
	 * @return 发送是否成功
	 * @throws Exception 
	 * */
	private boolean sendMail() throws Exception  {		
		// 数据初始化
		//String sendPort = mailItem.getSmtpPort(); // 端口
		String mailName = mailItem.getMailName();

		MailHost mailHost =(MailHost)mailItem.getMailHosts().get(0); 
		String mailhost = mailHost.getSmtpHost(); // 服务器
		String from = mailHost.getMailAddress(); // 发件mail
		boolean auth = mailHost.isAuth();
		String username = mailHost.getUsername(); // 用户名
		
		String password = mailHost.getPassword(); // 密码
        DocDecoder docDecoder = new DocDecoder();
        password = docDecoder.decode(password,EncodeConstants.EncodeType.STRING);
		
		Properties props = System.getProperties(); // 获得系统属性
		props.put("mail.smtp.host", mailhost); // 设置SMTP主机
		props.put("mail.smtp.auth", auth ? "true" : "false"); // 设置身份验证为真,若须身份验证则必须设为真

		// 获得邮件会话对象
		Session session = null;
		if (auth) {// 需要验证			
			session = Session.getDefaultInstance(props,new EmailAutherticator(username, password));
			//session.setDebug(true);
		} else {// 不要验证			
			session = Session.getDefaultInstance(props);
		}

		// 发邮件时使用
		Transport transport = session.getTransport(AgileMailConstants.TransportWay.SMTP);

		// 创建MIME邮件对象
		MimeMessage mimeMsg = new MimeMessage(session);
		// 设置发信人
		if (mailName != null && !"".equals(mailName)) {
			mimeMsg.setFrom(new InternetAddress(from, mailName));
		} else {
			mimeMsg.setFrom(new InternetAddress(from));
		}	

        List<MailInfo> mailInfos = mailItem.getMailInfos();
        for( int i = 0;i < mailInfos.size();i++) {
        	MailInfo mailInfo = mailInfos.get(i);        	
        	AgileMailHelper.setParamter(mimeMsg,mailInfo);
        	
    		//附件
    		List<MailAttache> attaches = mailInfo.getAttaches();	
    		if (attaches != null && attaches.size() > 0){            	
        		Multipart mimeMultipart = new MimeMultipart();
        		
        		//正文
        		AgileMailHelper.addContent(mimeMultipart, mailInfo);        		
        		AgileMailHelper.addAttache(mimeMultipart,attaches);
        		
        		// 添加 Multipart到Message中
        		mimeMsg.setContent(mimeMultipart);    			
    		}else{ 			
    			mimeMsg.setContent(AgileMailUtils.composeContent(mailInfo),"text/html; charset=GBK"); 
    		}
        	
    		mimeMsg.saveChanges();    	
    		 
    		if(!transport.isConnected())
    			transport.connect(mailhost, username, password);

    		// 发送邮件
    		transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());

    		//Transport.send(mimeMsg);
    		logger.info(i + "-" + mailInfo.getMailTo() + " -> mail send!");
    		
    		//发送5封邮件时换连接
    		if((i + 1) % 5 == 0){
    			transport.close();
    			transport = null;
    			
    			//发送5封邮件时休息15s
    			Thread.sleep(15000);

    			transport = session.getTransport(AgileMailConstants.TransportWay.SMTP); 
    			if(transport == null)
    				transport = session.getTransport();		
    		}    		
        }
		return true;
	}
	
	@Override
	public String info() {
		return null;
	}

	@Override
	protected boolean needExecuteImmediate() {
		return true;
	}

	@Override
	public Task[] taskCore() {
		return null;
	}

	@Override
	protected boolean useDB() {
		return false;
	}
}

⌨️ 快捷键说明

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