项目中有需要对outlook 日历进行管理的需求,熟悉outlook的同学提醒用EWS的方式对日历进行创建,更新跟取消操作,度娘了一圈,发现还可以通过ics的方式操作outlook日历,可能不想走寻常路吧,所以采用了第二种方式,支持日历操作,已经测试通过,记录下以免忘记也是方便他人。
第一步
引入lombok和javaMail相关的jar
<!-- lombok 简化代码 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version> </dependency>
第二步
核心代码,日历功能由方式sendCalendarMail实现
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CalendarMail {
public static final String SCHEDULED = "SCHEDULED";
public static final String RECURRING = "RECURRING";
/**
* 发起者
*/
private String organizerAddress;
/**
* 发起者显示名
*/
private String organizerName;
/**
* 接收人
*/
private String[] toAddresses;
/**
* 主题
*/
private String subject;
/**
* 地点
*/
private String location;
/**
* 开始时间
*/
private String startTime;
/**
* 兼容旧版本
*/
private String endTime;
/**
* 时长
*/
private Integer duration;
/**
* 类型
* SCHEDULED、RECURRING
*/
private String type;
/**
* 如果 type = RECURRING,此字段生效,用于填充周期信息
*/
private CalendarRecurrence recurrence;
/**
* 邮件正文
*/
private String content;
/**
* 会议取消/更新
*/
private String cancelId;
/**
* METHOD:CANCEL 取消会议 METHOD:REQUEST 创建和更新会议
*/
private String method = "REQUEST";
}
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.UUID;
/**
* 简单邮件(以HTML带附件的邮件)发送器
*/
@Service("SimpleMailSender")
public class SimpleMailSender implements IMailSender {
@QConfig("config.properties")
private Properties config;
/**
* 以文本格式发送邮件
*
* @param toAddress 收件人列表
* @param subject 标题
* @param content 内容
*/
public void sendTextMail(List<String> toAddress, List<String> ccAddress, String subject, String content) {
this.sendMail(toAddress, ccAddress, subject, content, true, null, null);
}
/**
* 以HTML格式发送邮件
*
* @param toAddress 收件人列表
* @param subject 标题
* @param content 内容
*/
public void sendHtmlMail(List<String> toAddress, List<String> ccAddress, String subject, String content) {
this.sendMail(toAddress, ccAddress, subject, content, false, null, null);
}
/**
* 发邮件
*
* @param toAddress 收件人列表
* @param subject 标题
* @param content 内容
* @param textType:true是text类型发送,false是html类型发送
*/
public void sendMail(List<String> toAddress, List<String> ccAddress, String subject, String content,
boolean textType, String[] attachFileNames, List<Image> imageList) {
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost(config.getProperty("mailServerHost"));
mailInfo.setMailServerPort(config.getProperty("mailServerPort"));
mailInfo.setFromAddress(config.getProperty("mailFromAddress"));
mailInfo.setUserName(config.getProperty("mailUser