You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过EWS-JavaScript-API获取Exchange账户今日会议列表?

使用EWS-JavaScript-API获取Exchange账户今日会议列表

嘿,这事儿我熟!下面一步步教你怎么用EWS-JavaScript-API拿到今日的所有会议,代码和注意事项都给你整理好了:

1. 先准备好依赖

首先得把EWS-JavaScript-API引入到你的项目里:

  • 如果用npm:npm install ews-javascript-api
  • 如果是浏览器环境,可以直接用CDN引入:<script src="https://unpkg.com/ews-javascript-api"></script>

2. 核心代码实现

下面是完整的示例代码,我加了详细注释,你直接替换邮箱密码就能用:

// Node.js环境引入API,浏览器环境会自动挂载到全局对象
const ews = require('ews-javascript-api');

async function getTodayMeetings(email, password) {
    try {
        // 1. 初始化Exchange服务实例,指定Exchange版本(这里用2016,可根据你的环境调整)
        const service = new ews.ExchangeService(ews.ExchangeVersion.Exchange2016);
        
        // 2. 设置账户认证信息
        service.Credentials = new ews.WebCredentials(email, password);
        
        // 3. 通过自动发现获取EWS地址,也可以手动指定(比如Office 365的地址是https://outlook.office365.com/EWS/Exchange.asmx)
        await service.AutodiscoverUrl(email, (redirectionUrl) => {
            // 生产环境建议添加URL安全校验逻辑,这里用默认校验规则
            return ews.AutodiscoverRedirectionUrlValidationCallback.validateUrl(redirectionUrl);
        });
        
        // 4. 定义今日的时间范围:从当天0点到次日0点,确保覆盖全天所有会议
        const startOfToday = new Date();
        startOfToday.setHours(0, 0, 0, 0);
        const endOfToday = new Date(startOfToday);
        endOfToday.setDate(endOfToday.getDate() + 1);
        
        // 5. 创建日历视图,指定时间范围和单页最大返回数
        const calendarView = new ews.CalendarView(startOfToday, endOfToday, 100);
        
        // 6. 指定要加载的会议属性,按需添加,比如主题、时间、地点、组织者等
        calendarView.PropertySet = new ews.PropertySet(
            ews.BasePropertySet.FirstClassProperties,
            ews.ItemSchema.Subject,
            ews.AppointmentSchema.Start,
            ews.AppointmentSchema.End,
            ews.AppointmentSchema.Location,
            ews.AppointmentSchema.Organizer
        );
        
        // 7. 查询日历文件夹中的会议
        const results = await service.FindItems(ews.WellKnownFolderName.Calendar, calendarView);
        
        // 8. 格式化返回的会议数据
        const meetings = results.Items.map(appt => ({
            主题: appt.Subject,
            开始时间: appt.Start.toLocaleString(),
            结束时间: appt.End.toLocaleString(),
            地点: appt.Location,
            组织者: appt.Organizer.Name
        }));
        
        console.log('今日会议列表:', meetings);
        return meetings;
    } catch (error) {
        console.error('获取会议失败:', error.message);
        throw error;
    }
}

// 调用函数,替换成你的Exchange账户信息
getTodayMeetings('your-exchange-email@domain.com', 'your-password');

3. 关键注意事项

  • 时区问题:代码里用的是本地时间,但EWS默认会转换为UTC处理,如果需要精准时区控制,可以给ExchangeService设置时区:service.TimeZone = ews.TimeZoneInfo.local;
  • 权限问题:确保你的Exchange账户允许EWS访问,部分企业环境可能禁用了EWS,需要联系管理员开启
  • 自动发现失败:如果自动发现无法获取地址,直接手动设置EWS URL:service.Url = new ews.Uri('https://your-exchange-server/EWS/Exchange.asmx');
  • 安全提醒:生产环境绝对不要硬编码密码!建议用环境变量或密钥管理工具存储敏感信息

内容的提问来源于stack exchange,提问作者0xh8h

火山引擎 最新活动