Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
script_de_generation_de_template_mail_outlook [2025/10/22 14:52] – créée superadminscript_de_generation_de_template_mail_outlook [2025/10/30 11:54] (Version actuelle) superadmin
Ligne 2: Ligne 2:
  
 À adapter en fonction du contexte. Les templates de base doivent être au format HTML et contenir les variables sous la forme {variable}. À adapter en fonction du contexte. Les templates de base doivent être au format HTML et contenir les variables sous la forme {variable}.
 +
 +Extensions requises : ''pywin32'' et ''requests''
  
 <code python> <code python>
 import win32com.client as win32 import win32com.client as win32
 +import requests
 +import json
 +
 +#URL du webhook
 +webhook_url = 'https://webhook.test/123456'
  
 #fonction menu #fonction menu
Ligne 11: Ligne 18:
     print("1: Notification d'incident")     print("1: Notification d'incident")
     print("2: Notification de fin d'incident")     print("2: Notification de fin d'incident")
 +    print("3: [client1] Notification d'incident")
 +    print("4: [client1] Notification de fin d'incident")
     choix = input("Entrez le numéro de votre choix : ")     choix = input("Entrez le numéro de votre choix : ")
  
Ligne 17: Ligne 26:
     elif choix == '2':     elif choix == '2':
         fin_incident_notif()         fin_incident_notif()
 +    elif choix == '3':
 +        client1_incident_notif()
 +    elif choix == '4':
 +        client1_fin_incident_notif()
     else:     else:
         print("Choix invalide, fin du programme.")         print("Choix invalide, fin du programme.")
Ligne 23: Ligne 36:
 def incident_notif(): def incident_notif():
     # Demande des infos à l'utilisateur     # Demande des infos à l'utilisateur
-    destinatairesprincipaux = input("Entrez les adresses mail des destinataires principaux (séparer les adresses avec un ;) : ")+    destinatairesprincipaux = input("Entrez les adresses mail des destinataires principaux (séparer les adresses avec un ;) (l'incident management est déjà inclus) : ")
     destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) : ")     destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) : ")
     client = input("Client concerné : ")     client = input("Client concerné : ")
Ligne 31: Ligne 44:
     duree = input("Durée de l'incident : ")     duree = input("Durée de l'incident : ")
     equipement = input("Equipement(s) concerné(s) : ")     equipement = input("Equipement(s) concerné(s) : ")
-    incident_ref = input("Ticket OCEANE / SNOW : ")+    incident_ref = input("Ticket : ")
     impact = input("Impact client : ")     impact = input("Impact client : ")
  
Ligne 57: Ligne 70:
     next_update = input("Prochaine mise à jour : ")     next_update = input("Prochaine mise à jour : ")
     incident_owner = input("Responsable de l'incident : ")     incident_owner = input("Responsable de l'incident : ")
 +
 +    # Demande si on doit faire une notif mattermost ou non
 +    notif_equipe = input("Envoyer une notif mattermost immédiatement ? (O/N) ")
 +
 +    if notif_equipe == 'Y' or notif_equipe == 'O' or notif_equipe == 'y' or notif_equipe == 'o':
 +        notif_mattermost(webhook_url, client, incident_ref, description, impact, statut)
  
     # Concatenne les variables     # Concatenne les variables
     sujetmail = "Security Incident Notification || " + client + " || " + incident_ref + " || " + equipement + " || " + description     sujetmail = "Security Incident Notification || " + client + " || " + incident_ref + " || " + equipement + " || " + description
-    destinataires = "security.incident-mngt@orange.com;cso_itd_sec_inc_notif_l1@orange.com;" + destinatairesprincipaux +    destinataires = "test@test.fr;" + destinatairesprincipaux 
-    destinatairescopie = "itd-soc-france@orange.com;mickael.fleury@orange.com;" + destinatairessecondaires+    destinatairescopie = "test@test.fr;" + destinatairessecondaires
  
     # Charger le template HTML depuis un fichier externe     # Charger le template HTML depuis un fichier externe
Ligne 99: Ligne 118:
 def fin_incident_notif(): def fin_incident_notif():
     # Demande des infos à l'utilisateur     # Demande des infos à l'utilisateur
-    destinatairesprincipaux = input("Entrez les adresses mail des destinataires principaux (séparer les adresses avec un ;) : ")+    destinatairesprincipaux = input("Entrez les adresses mail des destinataires principaux (séparer les adresses avec un ;) (l'incident management est déjà inclus) : ")
     destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) : ")     destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) : ")
     client = input("Client concerné : ")     client = input("Client concerné : ")
Ligne 107: Ligne 126:
     duree = input("Durée de l'incident : ")     duree = input("Durée de l'incident : ")
     equipement = input("Equipement(s) concerné(s) : ")     equipement = input("Equipement(s) concerné(s) : ")
-    incident_ref = input("Ticket OCEANE / SNOW : ")+    incident_ref = input("Ticket  : ")
     impact = input("Impact client : ")     impact = input("Impact client : ")
  
Ligne 133: Ligne 152:
     next_update = input("Prochaine mise à jour : ")     next_update = input("Prochaine mise à jour : ")
     incident_owner = input("Responsable de l'incident : ")     incident_owner = input("Responsable de l'incident : ")
 +
 +    # Demande si on doit faire une notif mattermost ou non
 +    notif_equipe = input("Envoyer une notif mattermost immédiatement ? (O/N) ")
 +
 +    if notif_equipe == 'Y' or notif_equipe == 'O' or notif_equipe == 'y' or notif_equipe == 'o':
 +        notif_fin_mattermost(webhook_url, client, incident_ref, description, impact, statut)
  
     # Concatenne les variables     # Concatenne les variables
     sujetmail = "Security Incident Closure || " + client + " || " + incident_ref + " || " + equipement + " || " + description     sujetmail = "Security Incident Closure || " + client + " || " + incident_ref + " || " + equipement + " || " + description
-    destinataires = "security.incident-mngt@orange.com;cso_itd_sec_inc_notif_l1@orange.com;" + destinatairesprincipaux +    destinataires = "test@test.fr;" + destinatairesprincipaux 
-    destinatairescopie = "itd-soc-france@orange.com;mickael.fleury@orange.com;" + destinatairessecondaires+    destinatairescopie = "test@test.fr;" + destinatairessecondaires
  
     # Charger le template HTML depuis un fichier externe     # Charger le template HTML depuis un fichier externe
Ligne 161: Ligne 186:
         next_update=next_update,         next_update=next_update,
         incident_owner=incident_owner         incident_owner=incident_owner
 +        )
 +
 +    # Créer et afficher le mail Outlook
 +    outlook = win32.Dispatch('outlook.application')
 +    mail = outlook.CreateItem(0)
 +    mail.Subject = sujetmail
 +    mail.To = destinataires
 +    mail.CC = destinatairescopie
 +    mail.HTMLBody = contenu_html
 +    mail.Display()
 +
 +#fonction notification d'incident client1
 +def client1_incident_notif():
 +    # Demande des infos à l'utilisateur
 +    destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) (gouvernance déjà en destinataires) : ")
 +    perimetre = input("Périmètre de l'incident : ")
 +    description = input("Description de l'incident : ")
 +    start_date = input("Date de début d'incident : ")
 +    start_time = input("Heure de début d'incident (UTC sinon préciser): ")
 +    equipement = input("Equipement(s) concerné(s) : ")
 +    incident_ref = input("Ticket : ")
 +    impact = input("Impact client : ")
 +    statut = input("Statut actuel : ")
 +    client = "client1"
 +
 +    # Demande si on doit faire une notif mattermost ou non
 +    notif_equipe = input("Envoyer une notif mattermost immédiatement ? (O/N) ")
 +
 +    if notif_equipe == 'Y' or notif_equipe == 'O' or notif_equipe == 'y' or notif_equipe == 'o':
 +        notif_mattermost_client1(webhook_url, client, perimetre, incident_ref, description, impact, statut)
 +
 +    # Concatenne les variables
 +    sujetmail = "[" + client + "] " + incident_ref + " - " + perimetre + " - " + description
 +    destinataires = "test@test.fr;"
 +    destinatairescopie = "test@test.fr;" + destinatairessecondaires
 +
 +    # Charger le template HTML depuis un fichier externe
 +    with open('template_incident_notification_client1.html', 'r', encoding='utf-8') as file:
 +        template_html = file.read()
 +
 +    # Insérer toutes les variables dans le body
 +    contenu_html = template_html.format(
 +        client=client, 
 +        description=description,
 +        start_date=start_date,
 +        start_time=start_time,
 +        equipement=equipement,
 +        incident_ref=incident_ref,
 +        impact=impact,
 +        statut=statut,
 +        perimetre = perimetre
         )         )
  
Ligne 171: Ligne 247:
     mail.HTMLBody = contenu_html     mail.HTMLBody = contenu_html
     mail.Display()      mail.Display() 
 +
 +def client1_fin_incident_notif():
 +    # Demande des infos à l'utilisateur
 +    destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) (gouvernance déjà en destinataires) : ")
 +    perimetre = input("Périmètre de l'incident : ")
 +    description = input("Description de l'incident : ")
 +    start_date = input("Date de début d'incident : ")
 +    start_time = input("Heure de début d'incident (UTC sinon préciser): ")
 +    equipement = input("Equipement(s) concerné(s) : ")
 +    incident_ref = input("Ticket : ")
 +    impact = input("Impact client : ")
 +    statut = input("Statut actuel (+rootcause) : ")
 +    client = "client1"
 +
 +    # Demande si on doit faire une notif mattermost ou non
 +    notif_equipe = input("Envoyer une notif mattermost immédiatement ? (O/N) ")
 +
 +    if notif_equipe == 'Y' or notif_equipe == 'O' or notif_equipe == 'y' or notif_equipe == 'o':
 +        notif_fin_mattermost_client1(webhook_url, client, perimetre, incident_ref, description, impact, statut)
 +
 +    # Concatenne les variables
 +    sujetmail = "[" + client + "] Fin d'incident " + incident_ref + " - " + perimetre + " - " + description
 +    destinataires = "test@test.fr;"
 +    destinatairescopie = "test@test.fr;" + destinatairessecondaires
 +
 +    # Charger le template HTML depuis un fichier externe
 +    with open('template_incident_closure_client1.html', 'r', encoding='utf-8') as file:
 +        template_html = file.read()
 +
 +    # Insérer toutes les variables dans le body
 +    contenu_html = template_html.format(
 +        client=client, 
 +        description=description,
 +        start_date=start_date,
 +        start_time=start_time,
 +        equipement=equipement,
 +        incident_ref=incident_ref,
 +        impact=impact,
 +        statut=statut,
 +        perimetre = perimetre
 +        )
 +
 +    # Créer et afficher le mail Outlook
 +    outlook = win32.Dispatch('outlook.application')
 +    mail = outlook.CreateItem(0)
 +    mail.Subject = sujetmail
 +    mail.To = destinataires
 +    mail.CC = destinatairescopie
 +    mail.HTMLBody = contenu_html
 +    mail.Display()
 +
 +#fonction d'envoi de notif de début d'incident
 +def notif_mattermost(webhook_url, client, incident_ref, description, impact, statut):
 +
 +    message_mattermost = "🚨 Incident critique : [" + client + "] " + incident_ref + " - " + description + " - " + impact + " - " + statut + " 🚨"
 +
 +    # Contenu du message
 +    message = {
 +        "text": message_mattermost
 +    }
 +
 +    # Envoyer la requête POST
 +    response = requests.post(
 +        webhook_url,
 +        data=json.dumps(message),
 +        headers={'Content-Type': 'application/json'}
 +    )
 +
 +    # Vérifier la réponse
 +    if response.status_code == 200:
 +        print("Message envoyé avec succès!")
 +    else:
 +        print(f"Erreur lors de l'envoi du message : {response.status_code} - {response.text}")
 +
 +#fonction d'envoi de notif de fin d'incident
 +def notif_fin_mattermost(webhook_url, client, incident_ref, description, impact, statut):
 +    # URL du webhook Mattermost
 +
 +    message_mattermost = "✅ Fin d'incident : [" + client + "] " + incident_ref + " - " + description + " - " + impact + " - " + statut + " ✅"
 +
 +    # Contenu du message
 +    message = {
 +        "text": message_mattermost
 +    }
 +
 +    # Envoyer la requête POST
 +    response = requests.post(
 +        webhook_url,
 +        data=json.dumps(message),
 +        headers={'Content-Type': 'application/json'}
 +    )
 +
 +    # Vérifier la réponse
 +    if response.status_code == 200:
 +        print("Message envoyé avec succès!")
 +    else:
 +        print(f"Erreur lors de l'envoi du message : {response.status_code} - {response.text}"     
 +
 +#fonction d'envoi de notif de début d'incident client1
 +def notif_mattermost_client1(webhook_url, client, perimetre, incident_ref, description, impact, statut):
 +
 +    message_mattermost = "🚨 Incident critique : [" + client + "] " + incident_ref + " - " + perimetre + " - " + description + " - " + impact + " - " + statut + " 🚨"
 +
 +    # Contenu du message
 +    message = {
 +        "text": message_mattermost
 +    }
 +
 +    # Envoyer la requête POST
 +    response = requests.post(
 +        webhook_url,
 +        data=json.dumps(message),
 +        headers={'Content-Type': 'application/json'}
 +    )
 +
 +    # Vérifier la réponse
 +    if response.status_code == 200:
 +        print("Message envoyé avec succès!")
 +    else:
 +        print(f"Erreur lors de l'envoi du message : {response.status_code} - {response.text}")
 +
 +#fonction d'envoi de notif de fin d'incident client1
 +def notif_fin_mattermost_client1(webhook_url, client, perimetre, incident_ref, description, impact, statut):
 +    # URL du webhook Mattermost
 +
 +    message_mattermost = "✅ Fin d'incident : [" + client + "] " + incident_ref + " - " + perimetre + " - " + description + " - " + impact + " - " + statut + " ✅"
 +
 +    # Contenu du message
 +    message = {
 +        "text": message_mattermost
 +    }
 +
 +    # Envoyer la requête POST
 +    response = requests.post(
 +        webhook_url,
 +        data=json.dumps(message),
 +        headers={'Content-Type': 'application/json'}
 +    )
 +
 +    # Vérifier la réponse
 +    if response.status_code == 200:
 +        print("Message envoyé avec succès!")
 +    else:
 +        print(f"Erreur lors de l'envoi du message : {response.status_code} - {response.text}"    
  
 #  appel du menu #  appel du menu
 menu() menu()
 +
 +
  
  
 </code> </code>