node-ews使用Bearer认证调用Office365 EWS获取邮件报错求助
修复方案
1 认证错误(no auth mechanism defined)解决
你使用的node-ews库的Bearer认证配置结构错误,当前把token放在配置顶级、auth字段填字符串的写法不符合要求,正确配置结构如下:
const ewsConfig = { host: 'https://outlook.office365.com/EWS/Exchange.asmx', auth: { type: 'bearer', bearer: token }, username: '随便填任意字符串即可' // 旧版本库校验必填,实际不影响认证 };
之前你遇到的认证报错就是因为配置结构不对,库无法识别到Bearer认证参数导致的。
2 WSDL文件损坏错误解决
该错误是node-ews自动下载EWS的WSDL依赖文件失败导致的,下载失败后生成的临时文件为空,就会触发格式校验报错。可按优先级选择以下方案修复:
- 优先使用本地WSDL文件:提前下载Office 365 EWS对应的三个依赖文件
services.wsdl、messages.xsd、types.xsd,存放到项目的固定目录下,在ewsConfig中添加配置指定路径,跳过在线下载逻辑:const ewsConfig = { // 其他配置不变 wsdl_path: '/path/to/your/wsdl/directory' }; - 排查网络与权限:确认运行代码的服务器可以正常访问outlook.office365.com,同时确认你使用的Bearer Token已经申请了
EWS.AccessAsUser.All的API权限。 - 配置代理:如果运行环境需要代理才能访问公网,在配置中添加代理参数即可:
const ewsConfig = { // 其他配置不变 proxy: 'http://你的代理地址:端口' };
3 其他代码逻辑问题修复
你当前代码中存在参数大小写不匹配的问题:调用getItem方法时传入的参数是{id:mailID},但方法内部取值时用的是item.Id,大写开头的Id字段不存在,会导致后续请求的邮件ID为空,需要统一大小写:
// 调用处改成 console.log(await this.getItem({Id:mailID},ews))
内容的提问来源于stack exchange,提问作者Cacus
相关产品推荐
相关产品推荐

