📄 agilemailtask.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 + -