OA无侵入开发创建outlook会议

1.方法级代理,获取传入的参数以及返回值。

2.代码示例

@CommandDynamicProxy(
        target = NewMeetingCmd.class,
        desc = "创建会议代理")
public class CreateOutlookMeetingCmd extends AbstractCommandProxy<Map<String,Object>> {

    @Override
    public Map<String, Object> execute(Command<Map<String, Object>> targetCommand) {
//        System.out.println(getClass().getName() + "command 执行之前做一些事");
        //获取到被代理对象
        NewMeetingCmd newMeetingCmd = (NewMeetingCmd) targetCommand;
        //获取被代理对象的参数
        Map<String, Object> params = newMeetingCmd.getParams();
        //对参数做预处理
        //TODO
        //参数回写
        newMeetingCmd.setParams(params);
        //执行标准的业务处理
        Map<String, Object> result = nextExecute(targetCommand);
        //对返回值做加工处理
        if (result.get("meetingid") != null) {
            String meetingid = result.get("meetingid").toString();
            CreateOutlookMeetingUtil.sendEmail(meetingid,"REQUEST");
        }
//        System.out.println(getClass().getName() + "创建outlook会议完成");
        return result;
    }

}

发送生成会议的方法

    public static void send(String title, String text, String location, String startTime, String endTime, String uuid, String method, List<String> emails) {
        try {
            String fromEmail = emailProp.getProperty("fromEmail", name);
            Properties props = new Properties();
            try {
                //端口一般为 25/465/487 可以使用telnet host port查看是否可用 比如 telnet mail.unipower.cn 25
                props.put("mail.smtp.port", "");
                //配置outlook上查到的host
                props.put("mail.smtp.host", "");
                props.put("mail.transport.protocol", "");
                props.put("mail.smtp.ssl", "true");
//                props.put("mail.debug", "true");
            } catch (Exception e) {
                e.printStackTrace();
            }
            Session session;
            Authenticator authenticator = new EmailAuthenticator();
            session = Session.getInstance(props, authenticator);
            MimeMessage message = new MimeMessage(session);
            //设置发件人
            message.setFrom(new InternetAddress(fromEmail));
            //设置单个收件人
//            message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
            /*
             	设置多收件人,Message.RecipientType.CC:密送
             				Message.RecipientType.BCC:抄送
             				Message.RecipientType.TO:收件人
             */
            message.addRecipients(Message.RecipientType.TO,setRecipientT0(emails));
            message.setSubject(title);
//            String uuid= UUID.randomUUID().toString();
            StringBuffer buffer = new StringBuffer();
            buffer.append("BEGIN:VCALENDAR\n"
                    + "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n"
                    + "VERSION:2.0\n"
                    + "METHOD:"+method+"\n"        //METHOD:CANCEL 取消会议  METHOD:REQUEST 创建和更新会议
                    + "BEGIN:VEVENT\n"
                    + "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:"+fromEmail+"\n"
                    + "ORGANIZER:MAILTO:"+fromEmail+"\n"
                    + "DTSTART:"+startTime+"\n"
                    + "DTEND:"+endTime+"\n"
                    + "LOCATION:"+location+"\n"
                    //如果id相同的话,outlook会认为是同一个会议请求,所以使用uuid。
                    + "UID:"+uuid+"\n"
                    + "CATEGORIES:\n"
                    + "DESCRIPTION:"+text+"\n\n"  	// 会议内容换行为\\n
                    + "SUMMARY:会议邀请\n" + "PRIORITY:5\n"
                    + "SEQUENCE:1\n"			//设置优先级 其中cancel>update>create
                    + "CLASS:PUBLIC\n" + "BEGIN:VALARM\n"
                    + "TRIGGER:-PT15M\n" + "ACTION:DISPLAY\n"
                    + "DESCRIPTION:Reminder\n" + "END:VALARM\n"
                    + "END:VEVENT\n" + "END:VCALENDAR");
            log.info("sendOutlook:"+ buffer);
            Multipart multipart = new MimeMultipart();
            BodyPart messageBodyPart = new MimeBodyPart();
            // 测试下来如果不这么转换的话,会以纯文本的形式发送过去,
            //如果没有text/calendar;method=REQUEST;charset=\"UTF-8\",outlook会议附件的形式存在,而不是直接打开就是一个会议请求
            messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(buffer.toString(),"text/calendar;method=REQUEST;charset=\"UTF-8\"")));
            // 添加会议邀请内容
            multipart.addBodyPart(messageBodyPart);
            // 附件功能
            // 创建消息部分
            BodyPart fujianBodyPart = new MimeBodyPart();
            // 添加网络附件
            message.setContent(multipart,"text/html;charset=UTF-8");
            //message.setText("测试");
            Transport.send(message);
        } catch (MessagingException me) {
            me.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值