Ceci est une ancienne révision du document !


Script de Génération de template mail outlook

À adapter en fonction du contexte. Les templates de base doivent être au format HTML et contenir les variables sous la forme {variable}.

import win32com.client as win32
 
#fonction menu
def menu():
    print("Choisissez un template : ")
    print("1: Notification d'incident")
    print("2: Notification de fin d'incident")
    choix = input("Entrez le numéro de votre choix : ")
 
    if choix == '1':
        incident_notif()
    elif choix == '2':
        fin_incident_notif()
    else:
        print("Choix invalide, fin du programme.")
 
#fonction notification d'incident
def incident_notif():
    # Demande des infos à l'utilisateur
    destinatairesprincipaux = input("Entrez les adresses mail des destinataires principaux (séparer les adresses avec un ;) : ")
    destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) : ")
    client = input("Client concerné : ")
    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): ")
    duree = input("Durée de l'incident : ")
    equipement = input("Equipement(s) concerné(s) : ")
    incident_ref = input("Ticket OCEANE / SNOW : ")
    impact = input("Impact client : ")
 
    # Demander à l'utilisateur de choisir la gravité :
    choix_severite = input("Gravité de l'incident (1, 2 ou 3) : ")
 
    # Initialiser les cases
    severite1 = "[ ] 1"
    severite2 = "[ ] 2"
    severite3 = "[ ] 3"
 
    # Mettre à jour en fonction du choix
    if choix_severite == '1':
        severite1 = "[X] 1"
    elif choix_severite == '2':
        severite2 = "[X] 2"
    elif choix_severite == '3':
        severite3 = "[X] 3"
    else:
        print("Choix invalide, aucune case cochée.")
 
    statut = input("Statut actuel : ")
    ttr = input("Temps de réparation estimé : ")
    next_actions = input("Prochaines actions : ")
    next_update = input("Prochaine mise à jour : ")
    incident_owner = input("Responsable de l'incident : ")
 
    # Concatenne les variables
    sujetmail = "Security Incident Notification || " + client + " || " + incident_ref + " || " + equipement + " || " + description
    destinataires = "security.incident-mngt@orange.com;cso_itd_sec_inc_notif_l1@orange.com;" + destinatairesprincipaux
    destinatairescopie = "itd-soc-france@orange.com;mickael.fleury@orange.com;" + destinatairessecondaires
 
    # Charger le template HTML depuis un fichier externe
    with open('template_incident_notification.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,
        duree=duree,
        incident_ref=incident_ref,
        impact=impact,
        severite1=severite1,
        severite2=severite2,
        severite3=severite3,
        statut=statut,
        ttr=ttr,
        next_actions=next_actions,
        next_update=next_update,
        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 de fin d'incident
def fin_incident_notif():
    # Demande des infos à l'utilisateur
    destinatairesprincipaux = input("Entrez les adresses mail des destinataires principaux (séparer les adresses avec un ;) : ")
    destinatairessecondaires = input("Entrez les adresses mail en copie (séparer les adresses avec un ;) : ")
    client = input("Client concerné : ")
    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): ")
    duree = input("Durée de l'incident : ")
    equipement = input("Equipement(s) concerné(s) : ")
    incident_ref = input("Ticket OCEANE / SNOW : ")
    impact = input("Impact client : ")
 
    # Demander à l'utilisateur de choisir la gravité :
    choix_severite = input("Gravité de l'incident (1, 2 ou 3) : ")
 
    # Initialiser les cases
    severite1 = "[ ] 1"
    severite2 = "[ ] 2"
    severite3 = "[ ] 3"
 
    # Mettre à jour en fonction du choix
    if choix_severite == '1':
        severite1 = "[X] 1"
    elif choix_severite == '2':
        severite2 = "[X] 2"
    elif choix_severite == '3':
        severite3 = "[X] 3"
    else:
        print("Choix invalide, aucune case cochée.")
 
    statut = input("Statut actuel : ")
    ttr = input("Temps de réparation estimé : ")
    next_actions = input("Prochaines actions : ")
    next_update = input("Prochaine mise à jour : ")
    incident_owner = input("Responsable de l'incident : ")
 
    # Concatenne les variables
    sujetmail = "Security Incident Closure || " + client + " || " + incident_ref + " || " + equipement + " || " + description
    destinataires = "security.incident-mngt@orange.com;cso_itd_sec_inc_notif_l1@orange.com;" + destinatairesprincipaux
    destinatairescopie = "itd-soc-france@orange.com;mickael.fleury@orange.com;" + destinatairessecondaires
 
    # Charger le template HTML depuis un fichier externe
    with open('template_incident_closure.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,
        duree=duree,
        incident_ref=incident_ref,
        impact=impact,
        severite1=severite1,
        severite2=severite2,
        severite3=severite3,
        statut=statut,
        ttr=ttr,
        next_actions=next_actions,
        next_update=next_update,
        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() 
 
#  appel du menu
menu()