IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Envoi de mail condition [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 33
    Par défaut Envoi de mail condition
    Bonjour,

    J'espère que vous allez bien

    Me revoila encore mais cette fois-ci c'est la dernière fois du moins je l'espère ^^

    Du coup j'ai crée un script qui analyse un tableau excel en .csv et en fonction si il trouve la valeur qui correspond a une requet il créer l'incident et me mets l'element de configuration dans mon ticket.
    Maintenant mon soucis sa serait si il ne trouve pas la valeur dans le tableau qui envoie un mail avec la valeur qui existe pas...
    J'ai déjà mis en place le script d'envoie de mail aussi

    La requete en powershell est : .\python '.\Service Now WEB API v3.3.py' XCTMHOMO1 GX10ARCH01 GX10HARCH0060 GX10 160731

    Donc dans mon tableau j'ai bien GX10 crée l'incident mais quand je n'ai pas GX10 dans mon tableau j'aimerais qu'il envoie un mail automatiquement mais sa ne marche pas dans mon script

    J'ai beau chercher mais je sèche... Est ceux que une âme charitable aurait la solution ?

    Il m'affiche KeyError : 'GX100" mais n'envoie pas de mail

    Screen :

    Nom : email.png
Affichages : 1145
Taille : 182,3 Ko

    Merci d'avance

    Cordialement

    Fataly

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Ca serait bien de poster votre code en utilisant la balise CODE.

    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for row in reader:
         if row[0] not in dico:
            dico[row[0]] = ...
         else:   
            ...
    vous devriez comprendre que les instructions sous le "else" seront exécutées dès qu'une ligne commence par une chaîne de caractère déjà rencontrée dans le fichier.
    Et pour savoir qu'aucune ligne ne commence par GX10, il faut regarder dico après avoir lu tout le fichier i.e. après la boucle "for row in reader" et non pendant.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 33
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Ca serait bien de poster votre code en utilisant la balise CODE.

    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for row in reader:
         if row[0] not in dico:
            dico[row[0]] = ...
         else:   
            ...
    vous devriez comprendre que les instructions sous le "else" seront exécutées dès qu'une ligne commence par une chaîne de caractère déjà rencontrée dans le fichier.
    Et pour savoir qu'aucune ligne ne commence par GX10, il faut regarder dico après avoir lu tout le fichier i.e. après la boucle "for row in reader" et non pendant.

    - W
    Salut,

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import http.client
    import sys
    import csv
    import smtplib
     
    MAILTMP = sys.argv[1]
    GROUP = sys.argv[2]
    JOBNAME = sys.argv[3]
    APPLICATION = sys.argv[4]
    ODATE = sys.argv[5]
    DESCRIPTION = JOBNAME
     
    fname = "tableau.csv"
    file = open(fname, "r")
     
    dico = {}
     
    try:
     
        reader = csv.reader(file, delimiter=';')
     
        for row in reader:
            if not (row[0] in dico ):
                dico [row[0]] = row[1]
            #except KeyError:
                #pass
            else:
                #print ("Attention, un doublon a été repéré !")
                server = smtplib.SMTP()
                #server.set_debuglevel(1) # Décommenter pour activer le debug
                server.connect('mg-smtp.mgsi.mg.com.fr')
                # (220, 'toto ESMTP Postfix') # Réponse du serveur
                server.helo()
                # (250, 'toto\nPIPELINING\nSIZE 10240000\nVRFY\nETRN\nSTARTTLS\nENHANCEDSTATUSCODES\n8BITMIME\nDSN') # Réponse du serveur
                fromaddr = 'CONTROLM_PROD<CONTROL-M_PRODUCTION@taores.fr>'
                toaddrs = ['daye.camara@taores.fr'] # On peut mettre autant d'adresses que l'on souhaite
                sujet = "Information CMDB"
                message = u"""\
                Bonjour, \n
                """
                msg = """\
                From: %s\r\n\
                To: %s\r\n\
                Subject: %s\r\n\
                \r\n\
                %s
                Bonjour, \n
                L'application %s n'est pas presente ou est en doublons dans la CMDB\n
                Nom du job : %s \n
                Bonne analyse \n
                Merci :) \n
                """ % (fromaddr, ", ".join(toaddrs), sujet, message, dico[APPLICATION], JOBNAME)
                try:
                    server.sendmail(fromaddr, toaddrs, msg)
                except smtplib.SMTPException as e:
                    print(e)
                # {} # Réponse du serveur
                server.quit()
                # (221, '2.0.0 Bye') # Réponse du serveur
    finally:
        file.close()
    J'ai compris maintenant à peu prêt je vais essayer de corriger mon erreur merci pour la piste.

    PS : J'ai jamais fait de python après , merci pour le temps que vous m'accorder

    A 16h23 :

    J'ai modifier mon code donc je fais autrement, vue que c'est un serveur en controlM qui va faire la requête je vais lui ordonnée de faire un GET de la variable et puis envoyé un mail... Je réfléchis encore pour le code.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Fataly Voir le message
    Je réfléchis encore pour le code.
    Plutôt que de vous prendre le chou avec l'envoi de mail, essayez de vous concentrer sur ces quelques lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import http.client
    import sys
    import csv
    import smtplib
     
    MAILTMP = sys.argv[1]
    GROUP = sys.argv[2]
    JOBNAME = sys.argv[3]
    APPLICATION = sys.argv[4]
    ODATE = sys.argv[5]
    DESCRIPTION = JOBNAME
     
    fname = "tableau.csv"
    file = open(fname, "r")
     
    dico = {}
     
    try:
     
        reader = csv.reader(file, delimiter=';')
     
        for row in reader:
            if not (row[0] in dico ):
                dico [row[0]] = row[1]
            #except KeyError:
                #pass
            else:
                print (dico[APPLICATION])
    finally:
        file.close()
    et comprendre le pourquoi du KeyError...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 33
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Plutôt que de vous prendre le chou avec l'envoi de mail, essayez de vous concentrer sur ces quelques lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import http.client
    import sys
    import csv
    import smtplib
     
    MAILTMP = sys.argv[1]
    GROUP = sys.argv[2]
    JOBNAME = sys.argv[3]
    APPLICATION = sys.argv[4]
    ODATE = sys.argv[5]
    DESCRIPTION = JOBNAME
     
    fname = "tableau.csv"
    file = open(fname, "r")
     
    dico = {}
     
    try:
     
        reader = csv.reader(file, delimiter=';')
     
        for row in reader:
            if not (row[0] in dico ):
                dico [row[0]] = row[1]
            #except KeyError:
                #pass
            else:
                print (dico[APPLICATION])
    finally:
        file.close()
    et comprendre le pourquoi du KeyError...

    - W
    Salut,

    Le KeyErrorapparait car une valeur n'existe pas dans le tableau et c'est ceux qui m'arrange. Car dans notre base de donner on a beaucoup de job controlM qu'on ne peux pas répertoriée pour x raison d’où j'aimerais récupérer la valeur du KeyError

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Fataly Voir le message
    Le KeyError apparait car une valeur n'existe pas dans le tableau et c'est ceux qui m'arrange. Car dans notre base de donner on a beaucoup de job controlM qu'on ne peux pas répertoriée pour x raison d’où j'aimerais récupérer la valeur du KeyError
    La vous me racontez à quoi servira votre code le jour où il fonctionnera. Moi, je vous demande d'essayer de comprendre pourquoi le code que vous avez écrit ne peut pas fonctionner.
    Votre code fait la même chose que le bout de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> d = {}
    >>> for ch in 'aba':
    ...     if ch not in d:
    ...        d[ch] = 1
    ...     else:
    ...        print (ch, d.get('c'))
    ...
    a None
    >>>
    vous voyez c'est beaucoup plus simple... et les questions sont:
    • pourquoi va-t-il dans le else lorsqu'il rencontre le deuxième "a" et
    • pourquoi "c" n'a aucune chance d'être dans le dictionnaire d dans ce cas.

    note: si un des lecteurs de cette discussion a envie d'écrire le code à votre place... tant mieux pour vous ou plutôt tant pis car ce n'est pas en recopiant bêtement du code aussi simple que vous apprendrez à programmer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2014, 23h15
  2. Macro pour envoi de mail auto selon conditions
    Par soadadrinker dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/06/2013, 00h16
  3. Envoi de mail automatique depuis Excel + ajout condition temporelle
    Par l'acrobate dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/05/2012, 11h46
  4. Envoie d’un mail automatique sous condition
    Par pythfred dans le forum Excel
    Réponses: 8
    Dernier message: 19/03/2012, 09h13
  5. [MySQL] Envoi de mail : souci avec les conditions
    Par mario94 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2011, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo