antonkach/outlook-spam-cleaner
Outlook-Spam-Cleaner
Αυτό το repo αφαιρεί την εξάρτηση από composio και παρέχει εργαλεία για να διαβάζεις και να καθαρίζεις τον φάκελο JunkEmail σε Outlook/Exchange Online χρησιμοποιώντας Microsoft Graph.
Quick contents:
main.py: script που καθαρίζει τοJunkEmailγια τον interactive χρήστη (device code flow). Υποστηρίζει--dry-run.webhook.py: Flask webhook για Microsoft Graph change notifications (app-only flow).create_subscription.py: παράδειγμα για δημιουργία subscription για έναν χρήστη.requirements.txt:msal,requests,Flask.
Απαιτήσεις
- Python 3.8+
1) Εγγραφή εφαρμογής στο Azure AD
- Azure Portal → Azure Active Directory → App registrations → New registration.
- Σημείωσε
Application (client) IDκαιDirectory (tenant) ID. - Για interactive (τοπικό) χρήση: δεν απαιτείται secret, θα χρησιμοποιήσουμε device code flow.
- Για webhook + subscription (server-to-server): Add a
Client secret(Certificates & secrets) και σημείωσε το value.
2) Δώσε Permissions
- API Permissions → Microsoft Graph → Delegated permissions:
Mail.ReadWrite(γιαmain.py). - Για webhook/subscriptions που δουλεύουν χωρίς interactive sign-in απαιτούνται Application permissions:
Mail.ReadWrite.All(admin consent required). Admin consent χρειάζεται από tenant admin.
3) Περιβάλλον & εγκατάσταση
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt4) Εκτέλεση main.py (device flow, single user)
export AZURE_CLIENT_ID=<your-client-id>
export AZURE_TENANT_ID=<your-tenant-id>
python main.py --dry-runΤο script θα εμφανίσει οδηγίες για το device-code flow: άνοιξε το URL και εισήγαγε τον κωδικό για να δώσεις πρόσβαση. Χρησιμοποίησε --dry-run πρώτα για να δεις τι θα διαγραφόταν.
5) Webhook + subscription (πιο κοντά σε real-time)
- Δημιούργησε Client secret και όρισε env vars:
export AZURE_CLIENT_ID=<app-id>
export AZURE_TENANT_ID=<tenant-id>
export AZURE_CLIENT_SECRET=<client-secret>
export NOTIFICATION_URL=https://<your-public-host>/webhook
export TARGET_USER_ID=<user-id-to-monitor>- Τρέξε το webhook (π.χ. για development με ngrok):
python webhook.py
# σε άλλο τερματικό, έκθεσε το τοπικό port 5000 με ngrok- Δημιούργησε το subscription:
python create_subscription.pyΤο subscription θα στέλνει notifications στο NOTIFICATION_URL. Το webhook.py θα ανταποκρίνεται στην validation handshake και, για κάθε notification, θα προσπαθεί να διαγράψει το μήνυμα με app credentials.
Σημαντικές Σημειώσεις
- Subscriptions λήγουν (max ~72 ώρες). Αυτοματισμός για επαναδημιουργία είναι απαραίτητος.
- Για παραγωγή: τρέξε το webhook σε HTTPS δημόσιο endpoint, υιοθέτησε certificate, logging και retry/backoff.
- Χρησιμοποίησε
--dry-runγια να αποφύγεις ανεπιθύμητες διαγραφές κατά το testing. - Αν δεν θες app-wide permissions, μπορείς να χρησιμοποιήσεις delegated subscriptions για έναν χρήστη μέσω device flow, αλλά αυτό δύσκολα παίζει για unattended server.
Αν θέλεις, προχωρώ και:
- α) Να προσθέσω auto-renew για subscription (background task)
- β) Να προσθέσω λεπτομερή scripts για deployment (gunicorn+systemd)
- γ) Να κάνω commit & να φτιάξω παράδειγμα
ngrokεντολών
