outlook-native
$
npx mdskill add taracodlabs/aiden/outlook-nativeAccess and manage Outlook calendar and inbox directly from PowerShell
- Check calendar events, unread emails, and schedule meetings
- Uses PowerShell COM or Microsoft Graph API for automation
- Filters and sorts data based on date, sender, or event time
- Returns structured data like subject, time, and sender for clarity
SKILL.md
.github/skills/outlook-nativeView on GitHub ↗
---
name: outlook-native
description: Outlook calendar + inbox via PowerShell COM or Microsoft Graph
category: windows
version: 1.0.0
platform: windows
tags: outlook, calendar, email, inbox, meeting, schedule, microsoft
license: Apache-2.0
---
# Outlook Native
Read Outlook calendar events, check inbox, send emails, and schedule meetings using PowerShell COM automation or Microsoft Graph API — no browser required.
## When to Use
- User asks "what's on my calendar today / this week"
- User wants to check unread emails or a specific sender's messages
- User wants to send an email or schedule a meeting from Aiden
- User needs upcoming meeting reminders or free/busy info
## How to Use
### Check today's calendar (COM)
```powershell
$outlook = New-Object -ComObject Outlook.Application
$ns = $outlook.GetNamespace("MAPI")
$cal = $ns.GetDefaultFolder(9) # 9 = olFolderCalendar
$today = [DateTime]::Today
$items = $cal.Items
$items.IncludeRecurrences = $true
$items.Sort("[Start]")
$filter = "[Start] >= '$($today.ToString('g'))' AND [Start] < '$($today.AddDays(1).ToString('g'))'"
$items.Restrict($filter) | Select-Object Subject, Start, End, Location
```
### Read unread emails (COM)
```powershell
$outlook = New-Object -ComObject Outlook.Application
$ns = $outlook.GetNamespace("MAPI")
$inbox = $ns.GetDefaultFolder(6) # 6 = olFolderInbox
$inbox.Items | Where-Object { $_.UnRead -eq $true } |
Select-Object Subject, SenderName, ReceivedTime |
Sort-Object ReceivedTime -Descending |
Select-Object -First 10
```
### Send email (COM)
```powershell
$outlook = New-Object -ComObject Outlook.Application
$mail = $outlook.CreateItem(0) # 0 = olMailItem
$mail.To = "recipient@example.com"
$mail.Subject = "Subject here"
$mail.Body = "Message body"
$mail.Send()
```
### Schedule a meeting (COM)
```powershell
$outlook = New-Object -ComObject Outlook.Application
$appt = $outlook.CreateItem(1) # 1 = olAppointmentItem
$appt.Subject = "Team Sync"
$appt.Start = "2026-04-20 14:00"
$appt.Duration = 60
$appt.Location = "Conference Room A"
$appt.RequiredAttendees = "colleague@example.com"
$appt.Save()
```
### Graph API fallback (requires GRAPH_TOKEN env var)
```powershell
$token = $env:GRAPH_TOKEN
$headers = @{ Authorization = "Bearer $token" }
Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/me/calendarView?startDateTime=$(Get-Date -Format o)&endDateTime=$((Get-Date).AddDays(1) | Get-Date -Format o)" -Headers $headers
```
## Examples
**"What meetings do I have today?"**
→ Run the COM calendar filter for today's date range, return Subject, Start, End, Location for each event.
**"Any unread emails from Vikram?"**
→ Filter inbox items where `UnRead -eq $true` and `SenderName -like '*Vikram*'`.
**"Send a quick email to team@company.com — subject: Sprint update, body: Demo at 3pm"**
→ Create olMailItem via COM, set fields, call Send().
## Cautions
- Outlook must be installed and the user must be logged in for COM to work
- COM operations open Outlook silently in the background — this is normal
- Graph API requires an access token (GRAPH_TOKEN); obtain via `az login` or the Microsoft identity platform
- Avoid sending bulk emails or automating mass replies
- Always confirm email content with the user before calling Send()