ews-js-api-browser
Version:
EWS Managed api in JavaScript fo Ionic and Electron
91 lines (64 loc) • 4.62 kB
Markdown
`ews-js-api-browser`
==================
built for ionic, electron and Outlook Add-In (mail apps) from https://github.com/gautamsi/ews-javascript-api
based on `ews-javascript-api@0.9.1`
`npm install ews-js-api-browser`
install typescript globally `npm install -g typescript`
then run `tsc` or `npm run build` from command prompt
run `npm run build:outlook` (windows only) to build for Outlook Add-in/Mail apps.
npm install works, use loaders like webpack. use in ionic/electron/webview, open issues at original repo. if you are using plain js/ts in cordova, see last section for this.
`ionic serve` will have CORS issue, You want to test in emulator directly. You can also enable CORS in Chrome (chrome based browsers) by installing plugin from chrome web store [Allow-Control-Allow-Origin: *](https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi)
this may affect other browser based process. electron does not have this issue
webpack uglify hangs and ultimately logs following error for me, probably due to very large file, I will see if I can fix this without making single file, ultimately current implementation loads all file so not much difference.
```
<--- Last few GCs --->
[107880:000002A361520F20] 16262 ms: Mark-sweep 1393.6 (1448.1) -> 1393.5 (1415.1) MB, 280.1 / 0.0 ms last resort
[107880:000002A361520F20] 16472 ms: Mark-sweep 1393.5 (1415.1) -> 1393.5 (1415.1) MB, 209.9 / 0.0 ms last resort
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 000000E5FE6A66A1 <JS Object>
1: RegExpReplace [native regexp.js:~356] [pc=000002C27BC3C9A4](this=000002255C9F2D61 <JS RegExp>,z=000000160878A0C1 <Very long string[3071091]>,ak=000000E5FE6C15A1 <String[1]\: \n>)
2: 000003B7485C9C21 <Symbol: Symbol.replace>(aka [Symbol.replace]) [native regexp.js:1] [pc=000002C27C3AD329](this=000002255C9F2D61 <JS RegExp>,z=000000160878A0C1 <Very long string[3071091]>,ak=000000E5FE6...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
```
If you are using webpack/requirejs, just install using npm and configure loaders appropriately. dependency needed: base64-js, moment-timezone & uuid. moment is also needed as dependency to moment-timezone.
Follow examples from `ews-jsvascript-api`
see next section
you have to copy `dist/outlook/ExchangeWebService.js` (and `dist/outlook/ExchangeWebService.d.ts` if you need typing support in typescript) to your project/scripts directory, include ExchangeWebService.js in html file (`<script>` tag). This exposes a global namespace `EwsJS`.
> for outlook add-ins/mail apps, configure for outlook by caling call `EwsJS.ConfigureForOutlook()` inside `Office.initialize`.
specific example on how to use this way.
```ts
// The Office initialize function must be run each time a new page is loaded.
Office.initialize = function (reason) {
EwsJS.ConfigureForOutlook(); // only needed in outlook add-ins, not needed for other browser based process
$(document).ready(function () {
var element = document.querySelector('.ms-MessageBanner');
messageBanner = new fabric.MessageBanner(element);
messageBanner.hideBanner();
loadProps();
EwsJS.EwsLogging.DebugLogEnabled = false;
var exch = new EwsJS.ExchangeService(EwsJS.ExchangeVersion.Exchange2013);
exch.Credentials = new EwsJS.WebCredentials("user","password"); // any fake stuff needed, it is not used properly
exch.Url = new EwsJS.Uri("https://outlook.office365.com/Ews/Exchange.asmx"); // anything valid url
EwsJS.Folder.Bind(exch, new EwsJS.FolderId(EwsJS.WellKnownFolderName.MsgFolderRoot))
.then(function (root) {
return root.FindFolders(new EwsJS.FolderView(100));
}).then(function (subfolders) {
subfolders.Folders.forEach(function (f) {
console.log(f.DisplayName + " : " + f.FolderClass + " : " + f.TotalCount); // just logging here, do what you want.
});
}).catch(function (err) {
console.log("Error occurred");
console.log(err);
});
});
};
```