Archives par mot-clé : automatisation

Impression automatique des mails entrants sous Linux avec Microsoft Graph et PowerShell

Quand on travaille dans l’industrie, le papier reste parfois un élément important de traçabilité. Le passage au tout numérique n’est pas toujours aussi simple qu’on le souhaiterait.
L’impression de flux de commande est souvent une tâche chronophage, sans réelle valeur ajoutée. L’automatiser permet donc de libérer du temps utile pour les équipes.

Aperçu sur le flux d'impression

Dans cet article, je vous partage une solution déployée en production, permettant d’imprimer automatiquement les pièces jointes PDF reçues sur une boîte Exchange 365 partagée, sous environnement Linux Debian, avec un contrôle précis sur les émetteurs et les paramètres d’impression.


Objectifs du script

  • Se connecter à Microsoft Graph en mode application
  • Lire les mails non lus d’une boîte partagée
  • Filtrer les messages selon l’adresse de l’expéditeur
  • Télécharger uniquement les pièces jointes PDF
  • Les imprimer silencieusement via lp (CUPS)
  • Marquer les mails comme lus et les catégoriser (ex. « Imprimé »)

Architecture de la solution

ComposantDescription
OSDebian 12
LangagePowerShell Core (pwsh)
APIMicrosoft Graph via Invoke-RestMethod
HTML → PDFwkhtmltopdf (optionnel)
Impressionlp avec options CUPS (bac, recto, N&B)
Orchestrationcron (toutes les 5 min, 8h–18h, jours ouvrés)

Pourquoi Linux + PowerShell ?

  • Éviter la dépendance à Windows Server
  • Mutualiser avec d’autres scripts d’automatisation
  • S’appuyer sur CUPS, un composant robuste, standard et bien documenté

Cas d’usage métier

  • Impression automatique de bons de réservation
  • Réception d’alertes critiques (température, alarmes, flux patients)
  • Traitement de documents entrants par fax ou email à valeur légale

Points de vigilance

  • Vérifier les droits Graph API (accès à la boîte partagée)
  • Forcer le format PDF pour éviter les erreurs de conversion
  • S’assurer que l’imprimante supporte les options CUPS (bac, noir & blanc, recto)

Extrait de script (simplifié)

powershellCopierModifier# Authentification MS Graph
$token = Get-MSGraphToken -TenantId $tenantId -ClientId $clientId -ClientSecret $clientSecret

# Lire les mails non lus d’une boîte partagée
$messages = Invoke-RestMethod -Headers @{Authorization = "Bearer $token"} `
  -Uri "https://graph.microsoft.com/v1.0/users/$sharedMailbox/messages?filter=isRead eq false"

foreach ($mail in $messages.value) {
    if ($mail.from.emailAddress.address -in $allowedSenders) {
        foreach ($attachment in $mail.attachments) {
            if ($attachment.name -like "*.pdf") {
                $filePath = "/tmp/$($attachment.name)"
                [System.IO.File]::WriteAllBytes($filePath, [System.Convert]::FromBase64String($attachment.contentBytes))
                lp -d "printer-name" -o media=Custom.Bac3 -o sides=one-sided -o ColorModel=Gray $filePath
            }
        }
        # Marquer comme lu + catégorie "Imprimé"
        Invoke-RestMethod -Method PATCH -Headers @{Authorization = "Bearer $token"} `
          -Uri "https://graph.microsoft.com/v1.0/users/$sharedMailbox/messages/$($mail.id)" `
          -Body '{"isRead": true, "categories": ["Imprimé"]}' -ContentType "application/json"
    }
}

Sécurité

Le point critique à mon sens : le token d’accès à Microsoft Graph.

Dans sa configuration de base, il peut permettre un accès étendu à l’ensemble des boîtes partagées de votre tenant, avec des permissions puissantes : lecture, marquage, classification, suppression…

C’est très puissant, mais aussi un risque de sécurité majeur si mal maîtrisé. Une gestion fine des permissions (Application Permissions + Access Policies ciblées) est indispensable.

Je publierai prochainement un article spécifique sur la sécurisation des accès techniques Graph API.


Conclusion

Ce type de script montre bien que Linux et PowerShell peuvent former une alliance puissante pour automatiser des processus critiques.

Combiné à Microsoft Graph, on obtient une solution :

  • Robuste
  • Fiable
  • Adaptée aux contraintes métiers
  • Et surtout, à sécuriser rigoureusement