EWS
按照cron表达式自动执行寻找地址存放某个时间段的文件
package com.smile.schedule;
import java.util.HashSet;
import java.util.Set;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.smile.ews.EwsMailAttService;
import com.smile.ews.EwsMailVO;
@Component
@EnableScheduling
public class ScheduledTask {
// 两种表达式:Seconds Minutes Hours DayofMonth Month DayofWeek Year或
// Seconds Minutes Hours DayofMonth Month DayofWeek
// 每隔5秒执行一次:*/5 * * * * ?
// 每隔1分钟执行一次:0 */1 * * * ?
// 每天23点执行一次:0 0 23 * * ?
// 每天凌晨1点执行一次:0 0 1 * * ?
// 每月1号凌晨1点执行一次:0 0 1 1 * ?
// 每天0点运行一次 0 0 0 * * ?
// 每天晚上七点执行 "0 0 19 * * ?"
// 每一天凌晨1点执行一次
// @Scheduled(cron = "0 */1 * * * ?")
@Scheduled(cron = "0 0 19 * * ?")
public void reportCurrentByCron() {
EwsMailAttService service = new EwsMailAttService();
EwsMailVO ewsMail = new EwsMailVO();
ewsMail.setUrl("https://autodiscover.boshi.com.cn/ews/Exchange.asmx");
ewsMail.setUsername("CFETS");
ewsMail.setPassword("123QWEasd");
Set
//文件存放的地址\\\\ia\\temp\\liuxt\\1
targetFiles.add("\\\\ia\\temp\\liuxt\\1");
// targetFiles.add("\\\\ia\\temp\\liuxt\\1\\");
// targetFiles.add("\\\\ia\\temp\\liuxt\\1\\2\\3");
// targetFiles.add("\\\\ia\\temp\\liuxt\\2\\3");
ewsMail.setTargetFiles(targetFiles);
service.initMethod(ewsMail);
try {
service.saveAtt(ewsMail);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
EwsEmail格式
package com.smile.ews;
import java.util.Set;
import lombok.Data;
@Data
public class EwsMailVO {
/**
* 邮件服务器地址
*/
private String url;
/**
* 邮箱账户
*/
private String username;
/**
* 邮箱密码
*/
private String password;
/**
* 目标文件
*/
private Set
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
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 Set
return targetFiles;
}
public void setTargetFiles(Set
this.targetFiles = targetFiles;
}
}
主要过程
package com.smile.ews;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.util.CollectionUtils;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
import microsoft.exchange.webservices.data.core.enumeration.search.LogicalOperator;
import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.core.service.schema.EmailMessageSchema;
import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.property.complex.Attachment;
import microsoft.exchange.webservices.data.property.complex.AttachmentCollection;
import microsoft.exchange.webservices.data.property.complex.FileAttachment;
import microsoft.exchange.webservices.data.search.FindItemsResults;
import microsoft.exchange.webservices.data.search.ItemView;
import microsoft.exchange.webservices.data.search.filter.SearchFilter;
public class EwsMailAttService {
private ExchangeService service = null;
@PostConstruct
public void initMethod(EwsMailVO ewsMail) {
service = new ExchangeService(ExchangeVersion.Exchange2010);
ExchangeCredentials credentials = new WebCredentials("CFETS", "123QWEasd");
service.setCredentials(credentials);
try {
service.setUrl(new URI("https://autodiscover.boshi.com.cn/ews/Exchange.asmx"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
public void saveAtt(EwsMailVO ewsMail) throws Exception {
Set
if (CollectionUtils.isEmpty(targetfiles)) {
return;
}
// 质押式回购市场交易情况总结日报_20180816
ItemView view = new ItemView(Integer.MAX_VALUE);
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");//日期格式
String startTime = formatter.format(currentTime)+" 00:00:00";//当前最小日期
String endTime = formatter.format(currentTime)+" 23:59:59";//当前最大日期
SearchFilter start = new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeCreated, DateUtils.parseDate(startTime, "yyyy-MM-dd HH:mm:ss"));
SearchFilter end = new SearchFilter.IsLessThanOrEqualTo(EmailMessageSchema.DateTimeCreated, DateUtils.parseDate(endTime, "yyyy-MM-dd HH:mm:ss"));
SearchFilter filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, start, end);
FindItemsResults
ArrayList
Set
for (Item item : items) {
EmailMessage message = EmailMessage.bind(service, item.getId());
if (message.getHasAttachments()) {
// TODO 如果没有附件会否报错
AttachmentCollection atts = message.getAttachments();
for (Attachment attachment : atts) {
// 附件可能是邮件,也可能是文件。邮件的情况应该递归,但是业务上暂时遇不到,所以这里只处理文件类型的附件
if (attachment instanceof FileAttachment) {
FileAttachment att = (FileAttachment) attachment;
// 复制到指定的多个目录
for (String targetfile : targetfiles) {
Path path = Paths.get(targetfile);
// 层层创建目录
Files.createDirectories(path);
// 将文件名追加到路径
path = path.resolve(att.getName());
att.load();
// 需要判断是否xls
InputStream is = new ByteArrayInputStream(att.getContent());
HSSFWorkbook workbook = new HSSFWorkbook(is);
FileOutputStream os = new FileOutputStream(path.toFile());
workbook.write(os);
os.close();
workbook.close();
}
}
}
}
}
service.close();
}
}
springboot启动
package com.smile;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CopyEmailApplication {
public static void main(String[] args) {
SpringApplication.run(CopyEmailApplication.class, args);
}
}
POM配置文件