2 Star 0 Fork 0

mirrors_linagora/ews-javascript-api

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

ews-javascript-api

Exchange Web Service in JavaScript/TypeScript.

EWS managed API for TypeScript/JavaScript - code ported from OfficeDev/ews-managed-api. availbale for nodejs, browser and mobile devices (cordova).

Pluggable XHRApi adapter to replace client (browser) based XHR call with server brokered call (example coming soon). Example Ruby on rails, PHP or any server side framework where c# or nodejs is not available

Works with Office 365/Exchange Online and on-premises Exchange (2007 - 2016)

Authentication

use SSL for basic authentication
NTLM and Cookies Authentication works with nodejs only

Modules

  • commonjs module for NodeJs
  • AMD module for browser*

All http call is wrapped in promise using WinJS promise.
Code sample from EWS Managed API 2.1. should work with little modificaion to Promise format

Documentation

Api document generated using TypeDoc and is hosted at ews-javascript-api.github.io/api.
Check Wiki for more details

also track what is coming in backlog, keep eye on milestones when I start working on it

Whats new v0.4.0

Whats new v0.3.0 (including 0.2.8)

  • new: Mailbox synchronization now works, SyncFolderItems and SyncFolderHierarchy ExchangeService now availbale see MSDN for example
  • new: Pull Subscription should now work use MSDN example
  • new: SetTeamMailbox and UnpinTeamMailbox ExchangeService methods now availbale. (SetTeamMailbox does not work with Office 365, Access Denied error, on-prem test is pending) See official MSDN reference for detail ExchangeService.UnpinTeamMailbox method
  • new: GetRooms and GetRoomLists ExchangeService methods now availbale. See official MSDN reference for detail ExchangeService.GetRooms method and ExchangeService.GetRoomLists method
  • new: ConvertId and ConvertIds ExchangeService methods now availbale, see MSDN detail at EWS Identifiers in Exchange
  • new: GetClientAccessToken ExchangeService method now availbale, used with "Mail App" management, App management (#41) coming later
  • fix: ImpersonatedUserId bug #34

Whats new v0.2.7 (including 0.2.5 and 0.2.6)

  • new: Streaming Notification code updated, see issue #24 for example. More details at How to: Stream notifications about mailbox events by using EWS in Exchange
  • new: Pull Subscription should also work MSDN not updated yet, pushed to 0.2.8
  • new: SearchFilter code update. See official MSDN link for examples How to: Use search filters with EWS in Exchange
  • new: Some use of ExtendedPropertyDefinition works, see #23 for an example.
  • new: Grouping class updated, it can be applied on FindItems
  • new: AccountLockout detection in failed conenction. Does not work with Office 365
  • improvements: Contact object related code udpate, fix code errors
  • improvement: SoapFaultDetails updated for improved error handling, most EWS operation not return instance of SoapFaultDetails in case of any failure, it contains Exception property with information of failures oe exception in operation.
  • fix: FindItems improvements
    • bug fixed where code was not updated to handle correct constructor overload
    • SearchFilter can be used
    • Grouping can be used

Whats new v0.2.3

  • Appointment/CalendarItem code update
    • Appointment can be created using new Appointment()
    • Appointment can be saved with Appointment.Save()
    • Meeting invitation can be send using Appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy)
    • issue - HTML Body is not working using Appointment
  • GetUserOofSettings and SetUserOofSettings on ExchangeService is ready to be used.
  • fix: Autodiscover issue fixed, where it throws exception when redirecting to office 365 using 302 redirect from CNAME dns record

Whats new v0.2

  • Attachment Operations
    • GetAttachment method - load attachment information from Attachemnt or AttachmentId
    • Create email message with attachment, sample code in Wiki

Getting Started

install

[sudo] npm install ews-javascript-api

use

//classic Javascript style
var ews = require('ews-javascript-api');
var exch = new ews.ExchangeService(ExchangeVersion.Exchange2013);
//ES6 TypeScript style
import {ExchangeService, AutodiscoverService, Folder, Item, ExchangeVersion} from "ews-javascript-api";
var exch = new ExchangeService(ExchangeVersion.Exchange2013);

Autodiscover user settings

//import ews module
var ews = require('ews-javascript-api');
//create AutodiscoverService object
var autod = new ews.AutodiscoverService(new ews.Uri("https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc"), ews.ExchangeVersion.Exchange2010);
//you can omit url and it will autodiscover the url, version helps throw error on client side for unsupported operations.example - //var autod = new ews.AutodiscoverService(ews.ExchangeVersion.Exchange2010);
//set credential for service
autod.Credentials = new ews.ExchangeCredentials("userName", "password");
//create array to include list of desired settings
var settings = [
ews.UserSettingName.InternalEwsUrl,
ews.UserSettingName.ExternalEwsUrl,
ews.UserSettingName.UserDisplayName,
ews.UserSettingName.UserDN,
ews.UserSettingName.EwsPartnerUrl,
ews.UserSettingName.DocumentSharingLocations,
ews.UserSettingName.MailboxDN,
ews.UserSettingName.ActiveDirectoryServer,
ews.UserSettingName.CasVersion,
ews.UserSettingName.ExternalWebClientUrls,
ews.UserSettingName.ExternalImap4Connections,
ews.UserSettingName.AlternateMailboxes
];
//get the setting
autod.GetUserSettings(["email1@domain.com", "email2@domain.com"], settings)
.then(function (response) {
    //do what you want with user settings    
    var tabcount = 0;
    var tabs = function () { return ews.StringHelper.Repeat("\t", tabcount); };
    console.log(autod.Url.ToString());
	//uncoment next line to see full response from autodiscover, you will need to add var util = require('util');
	//console.log(util.inspect(response, { showHidden: false, depth: null, colors: true }));
    for (var _i = 0, _a = response.Responses; _i < _a.length; _i++) {
        var resp = _a[_i];
        console.log(ews.StringHelper.Format("{0}settings for email: {1}", tabs(), resp.SmtpAddress));
        tabcount++;
        for (var setting in resp.Settings) {
            console.log(ews.StringHelper.Format("{0}{1} = {2}", tabs(), ews.UserSettingName[setting], resp.Settings[setting]));
        }
        tabcount--;
    }
}, function (e) {
    //log errors or do something with errors
});

Example EWS operations

Example of user availability

var ews = require('ews-javascript-api');
//create ExchangeService object
var exch = new ews.ExchangeService(ews.ExchangeVersion.Exchange2013);
exch.Credentials = new ews.ExchangeCredentials("userName", "password");
//set ews endpoint url to use
exch.Url = new ews.Uri("https://outlook.office365.com/Ews/Exchange.asmx"); // you can also use exch.AutodiscoverUrl

var attendee =[ new ews.AttendeeInfo("email1@domain.com"), new ews.AttendeeInfo("email2@domain.com")];
//create timewindow object o request avaiability suggestions for next 48 hours, DateTime and TimeSpan object is created to mimic portion of .net datetime/timespan object using momentjs
var timeWindow = new ews.TimeWindow(ews.DateTime.Now, new ews.DateTime(ews.DateTime.Now.TotalMilliSeconds + ews.TimeSpan.FromHours(48).asMilliseconds())); 
exch.GetUserAvailability(attendee, timeWindow, ews.AvailabilityData.FreeBusyAndSuggestions)
.then(function (availabilityResponse) {
    //do what you want with user availability
}, function (errors) {
    //log errors or do something with errors
});
        

Porting status

Review Core/ExchangeService methods in api document, Any method not marked private oe internal (internal marker is in description of method) is posted and can be used, open issue if it doe snot work

List of ExchangeService methods available

ArchiveItems
AutodiscoverUrl
BindToGroupItems
BindToItems
ConvertId
ConvertIds
CopyItems
CreateItems
DeleteItems
ExpandGroup
FindAppointments
FindFolders
FindItems
GetAttachments
GetClientAccessToken
GetPasswordExpirationDate
GetRoomLists
GetRooms
GetUserAvailability
GetUserOofSettings
GetUserOofSettings
LoadPropertiesForItems
MarkAsJunk
MoveItems
ResolveName
SetTeamMailbox
SetUserOofSettings SetUserOofSettings
SubscribeToPullNotifications
SubscribeToStreamingNotifications
SubscribeToStreamingNotificationsOnAllFolders
SyncFolderHierarchy
SyncFolderItems
UnpinTeamMailbox
UpdateItems
GetInboxRules
UpdateInboxRules
AddDelegates
GetDelegates
RemoveDelegates
UpdateDelegates

List of Folder object methods available

BindToFolder
CopyFolder
CreateFolder
DeleteFolder
EmptyFolder
FindFolders
FindItems
Load
LoadPropertiesForFolder
MarkAllItemsAsRead
MarkAllItemsAsUnread
RemoveExtendedProperty
SetExtendedProperty
MoveFolder
Save
UpdateFolder

List of Item object methods available

ArchiveItem
BindToItem
CopyItem[s]
CreateItem
DeleteItem[s]
FindAppointments
FindItems
LoadPropertiesForItems
MarkAsJunk
MoveItem
SendItem
Save
UpdateItem[s]
RemoveExtendedProperty
SetExtendedProperty
AcceptTentatively [Appointment]
AcceptTentatively [Appointment]
Decline [Appointment]

Use in Cordova

AMD module for require.js to be included in build system, bower module and related documentation will be published.

Tests

in progress....

License

Licensed under MIT

The MIT License (MIT) Copyright (c) 2014-2015 Gautam Singh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

暂无描述 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors_linagora/ews-javascript-api.git
git@gitee.com:mirrors_linagora/ews-javascript-api.git
mirrors_linagora
ews-javascript-api
ews-javascript-api
master

搜索帮助