Building an MS Exchange email client using:
This is based on the shadcn-vue Mail example.
The code for that example is located here.
Since the Microsoft Graph JavaScript Client Library is too complicated to setup properly and since it doesn't add a lot of value, we don't use it.
Since the MSAL.js + Vue 3 + TypeScript Sample is complicated, the authentication aspect is based on Dave Stewart's article: A guide to MSAL authentication in Vue.
We follow the Vite installation instructions for shadcn-vue.
- Use
create-vuepackage to scaffold the project as described in Vue's tooling documentation page.
This will use Vite as the build tool and development environment.
- Add Tailwind and its configuration
- Edit
tsconfig.json - Update
vite.config.ts - Delete default Vite styles
- Set up the project to use
shadcn-vue:
- Update
main.tsto use Tailwind styles
VSCode + Volar (and disable Vetur).
TypeScript cannot handle type information for .vue imports by default, so we replace the tsc CLI with vue-tsc for type checking. In editors, we need Volar to make the TypeScript language service aware of .vue types.
See Vite Configuration Reference.
npm installCreate a .env file at the root of the project and specify the following variables:
VITE_MSAL_CLIENT_ID=
VITE_MSAL_TENANT_ID=The meaning of those environment variables is explained here.
npm run devnpm run buildRun Unit Tests with Vitest
npm run test:unitRun End-to-End Tests with Playwright
# Install browsers for the first run
npx playwright install
# When testing on CI, must build the project first
npm run build
# Runs the end-to-end tests
npm run test:e2e
# Runs the tests only on Chromium
npm run test:e2e -- --project=chromium
# Runs the tests of a specific file
npm run test:e2e -- tests/example.spec.ts
# Runs the tests in debug mode
npm run test:e2e -- --debugLint with ESLint
npm run lintFormat with Prettier
npm run format- Fix the
Replyissue:
This seems to be due to the usage of a trial teanant as explained here.
- Add Husky hooks
- Get rid of
element-plusand useshadcn-vueinstead.



