EWS java api 向Exchange 服务器中创建日历会议

通过会议管理系统将客户会议信息发送到Exchange 服务系统日历中.
有小伙伴留言怎么添加附件,于是我在代码中补充了添加附件的代码.
在这里插入图片描述
我写了个工具类如下:

pom.xml

 <dependency>
            <groupId>com.microsoft.ews-java-api</groupId>
            <artifactId>ews-java-api</artifactId>
            <version>2.0</version>
        </dependency>

工具类

 /**
     *  Exchange 发送一条会议邮件
    */
    public static String sendEws(MeetTaskDTO meetTaskDTO) {
    
    
        String sendEwsId = "";
        //封装数据
        MeetTaskEwsDto meetTaskEwsDto = transferMeetTaskDTO2MeetTaskEwsDTO(meetTaskDTO);
        //获取当前租户的邮箱配置
        MailField mailField = MailUtils.getMailField(meetTaskDTO.getTenantId());
        //ExchangeVersion.Exchange2010 版本不支持流式通知,需要不断的执行 GetEvents 方法达到实时监听。
        //获取版本  采用枚举的方式获取默认版本
        String exchangeversion = StringUtils.isNotEmpty(mailField.getExchangeVersion()) ?mailField.getExchangeVersion() : MailConfig.getDefaultMailField().getExchangeVersion();
        try {
    
    
            //设置版本
            ExchangeService service = new ExchangeService(ExchangeVersion.valueOf(exchangeversion));
            //Exchange服务器的域名,使用ip可能会连接失败,如服务器在本地,没有域名可以在host文件中添加一条域名解析规则 
            //serverHost 为Exchange服务器域名
            String serverHost = mailField.getExchangeServeHost();
            //登录的账号和密码,账号一定是可以登录进去的账号,不一定是邮箱地址
            //mailField.getExchangeAccount() 获取账号   mailField.getExchangePwd()获取密码
            ExchangeCredentials credentials = new WebCredentials(mailField.getExchangeAccount(), mailField.getExchangePwd());
            service.setCredentials(credentials);
            //固定写法
            service.setUrl(new URI("https://" + serverHost + "/ews/exchange.asmx"));
            service.setCredentials(credentials);
            service.setTraceEnabled(true);
            //设置时区  中国时区  getTimeZoneDefinition 方法 必须2010以上版本不然会报错
            TimeZoneDefinition tz = getTimeZoneDefinition(service, "UTC+08:00");
            //发送信息
            Appointment appointment = new Appointment(service);
            appointment.setSubject(meetTaskEwsDto.getTaskName());   //会议主题
            appointment.setBody(MessageBody.getMessageBodyFromText(meetTaskEwsDto.getContent()));  //会议消息体
            appointment.setStart(meetTaskEwsDto.getTaskStartTime()); //开始时间
            appointment.setStartTimeZone(tz);   //开始时间时区 必须设置
            appointment.setEnd(meetTaskEwsDto.getTaskEndTime()); //结束时间
            appointment.setEndTimeZone(tz);  //结束时间时区 必须设置
            appointment.setLocation(meetTaskEwsDto.getRoomName());//会议位置

		**//添加附件  官方有很多具体用法**
  //appointment.getAttachments().addFileAttachment("C:\\temp\\FileAttachment.txt");
   //appointment.getAttachments().addFileAttachment("SecondAttachment.txt", "C:\\temp\\FileAttachment2.txt");
   // byte[] theBytes = File.ReadAllBytes("C:\\Temp\\Tulips.jpg");
  // appointment.getAttachments().addFileAttachment("ThirdAttachment.jpg", theBytes);
         // appointment.getResources().add("会议资源账号,如:[email protected]");  //会议资源
           //参会员工收件账号 这里是多个参会员工时写法
           //meetTaskEwsDto.getParticipantsnEmail()  自定义获取参与员工的账号集合必须是 Exchange服务账号
            if(StringUtils.isNotEmpty(meetTaskEwsDto.getParticipantsnEmail())){
    
      
                for(String mail:meetTaskEwsDto.getParticipantsnEmail()){
    
    
                    appointment.getRequiredAttendees().add(mail); //必须参加的员工的账号
                }
            }
            //必须参加的员工的账号  
            //appointment.getRequiredAttendees().add("[email protected]"); 
            //可选参加的员工的账号
            //appointment.getOptionalAttendees().add("[email protected]"); 
            //appointment.setIsAllDayEvent(); // 是否全天事件
            
           // appointment.save(); 方法列举如下参数 
            //SendInvitationsMode.SendToNone 不发送邀请模式  
            // WellKnownFolderName.Calendar 发送到日历  
            //SendInvitationsMode.SendToAllAndSaveCopy 发送给所有人并保存副本
            appointment.save(WellKnownFolderName.Calendar);   // 发送到日历  
            //appointment.update(ConflictResolutionMode.AutoResolve); //冲突解决 自动解决模式
            //新建日历会议后生成的id并保存
            sendEwsId = appointment.getId().toString();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return sendEwsId;    
 /**
     * 获取时区
     * @param service
     * @param timeZoneID
     * @return
     */
   private static TimeZoneDefinition getTimeZoneDefinition(ExchangeService service, String timeZoneID) {
        TimeZoneDefinition timeZoneDefinition = null;
        try {
            for (TimeZoneDefinition tzd : service.getServerTimeZones()) {
                if(tzd.getId().equalsIgnoreCase(timeZoneID)) {
                    timeZoneDefinition = tzd;
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return timeZoneDefinition;
    }
 /**
     * 封装数据
     * @param meetTaskDTO
     * @return
     * meetTaskDTO 是传过来的对象
     */
    private static MeetTaskEwsDto transferMeetTaskDTO2MeetTaskEwsDTO(MeetTaskDTO meetTaskDTO) {
        MeetTaskEwsDto meetTaskEwsDto =new MeetTaskEwsDto();
        meetTaskEwsDto.setTaskName(meetTaskDTO.getTaskName());
        meetTaskEwsDto.setRoomName(meetTaskDTO.getRoomName());
        meetTaskEwsDto.setContent(meetTaskDTO.getContent());
        //拼接开始时间和结束时间
        String  taskStartTime = meetTaskDTO.getTaskDate()+" "+meetTaskDTO.getTaskStartTime();
        String  taskEndTime = meetTaskDTO.getTaskDate()+" "+meetTaskDTO.getTaskEndTime();
        meetTaskEwsDto.setTaskStartTime(DateUtils.allStringToDate (taskStartTime));
        meetTaskEwsDto.setTaskEndTime(DateUtils.allStringToDate(taskEndTime));
        //通过任务id 查询参与人员对象信息
        //由于静态工具类无法注入 这个是获取 bean
        MeetTaskPersonService meetTaskPersonService = SpringUtils.getBean(MeetTaskPersonService.class);   
        List<MeetTaskPersonDTO> meetTaskPersonDTOS = meetTaskPersonService.listEmployeeParticipatesByTaskId(meetTaskDTO.getId());
        meetTaskDTO.setEParticipates(meetTaskPersonDTOS);
        //将参与人集合对象 转换成userid 集合
        List<String> personIdList = meetTaskDTO.getEParticipates().stream().map(MeetTaskPersonDTO::getPersonId).collect(Collectors.toList());
        //判断参会人员是否有发起人 如果不包含就添加
        if(!personIdList.contains(meetTaskDTO.getCreateUser())){
            personIdList.add(meetTaskDTO.getCreateUser());
        }
        //获取用户邮箱
        List<String> mails = new ArrayList<>();
        UserService userService = SpringUtils.getBean(UserService.class);
        for (String personId:personIdList){
        //由于是工具 这个是获取 bean
            UserDTO userDto = userService.getUserById(personId).getData();  
            mails.add(userDto.getEmail());
        }
        meetTaskEwsDto.setParticipantsnEmail(mails);
        return  meetTaskEwsDto;
    }

如果有小伙伴觉得不够详细具体可看官方网址:
https://docs.microsoft.com/zh-cn/exchange/client-developer/exchange-web-services/how-to-add-attachments-by-using-ews-in-exchange

欢迎大家留言讨论
如有转载请标明出处

猜你喜欢

转载自blog.csdn.net/qq_25288617/article/details/106718471
今日推荐