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

VBScript Discussion :

VBS : Envoi mail sous double condition


Sujet :

VBScript

  1. #1
    Membre averti
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    36
    Détails du profil
    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2013
    Messages : 36
    Par défaut VBS : Envoi mail sous double condition
    Bonjour,

    Je fais appel à vous car j'ai un petit problème avec la conception d'un script VBS.
    Voilà, j'essaie en fait de concevoir un script VBS qui, via une tache planifiée Windows, check le contenu d'un dossier sur un serveur à intervalles réguliers (toutes les 1 ou 2 heures).
    Dans ce dossier, il y a constamment des fichiers de plusieurs types. Je voudrais donc qu'il se concentre sur les fichiers d'un certains types et qu'il contrôle ensuite leur date et heure de modification.

    En effet, ces fichiers sont déposés là via un traitement automatisé toutes les 30 minutes. Je désirerais en fait recevoir une alerte mail si tous ces fichiers sont âgés de plus de 30 minutes afin de déceler rapidement si un problème de traitement a eu lieu.

    Pour l'instant tout ce que je viens de vous expliquer fonctionne à peu près dans mon script actuel, le seul petit hic c'est que j'utilise la fonction "For Each" et du coup, il m'envoie un mail PAR fichier datant de plus de 30 minutes.... Et comme il existe un nombre important de ces fichiers dans le dossier... Hors je ne voudrais recevoir qu'un seul mail d'alerte par exécution du script...

    De plus, je ne sais pas encore comment intégrer ma variable "nomfichier" pour que mon VBS centre son action sur ces seuls fichiers dans le dossier (j'ai essayé de l'ajouter au "If" avec un "And" mais ça ne marche pas).
    Mes connaissances en VBS étant relativement limitées, auriez-vous idée de la fonction à utiliser à la place de For Each et aussi de la méthode pour filtrer l'action sur les fichiers nommés "AC*.EDI" ?

    Voici le script en question :
    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
    strFolder = "D:\Chemin d'accès du dossier\"
    nomfichier = "AC*.EDI"
    Dim objFile
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strFolder)
    Set colFiles = objFolder.Files
    For Each objFile In colFiles
        If DateDiff("N", objFile.DateLastModified, Now()) > 30 Then
            With CreateObject("CDO.Message")
                .From = "Integration@mon-entreprise.com"
                .To = "service.info@mon-entreprise.com"
                .CC = ""
                .Subject = "Erreur d'integration"
                .TextBody = "Bonjour," & Chr(13) & "Une potentielle erreur de traitement dans l'intégration des commandes été détectée." & Chr(13) & "Il semblerait qu'il n'y ait pas eu d'intégration de commandes depuis plus de 30 minutes. " & Chr(13) & "Cordialement"
                .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
                .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mon-entreprise.com"
                .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
                .Configuration.Fields.Update
                On Error Resume Next
                .Send
                If Err.Number <> 0 Then
                    MsgBox Err.Description, 16, "Erreur"
                End If
                On Error GoTo 0
            End With
        End If
    Next

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    Remplacer pour compléter la ligne 8 par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DateDiff("N", objFile.DateLastModified, Now()) > 30 And _
        Left(objFile.Name, 2) = "AC" And _
        Right(objFile.Name, 4) = ".EDI" Then
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre averti
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    36
    Détails du profil
    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2013
    Messages : 36
    Par défaut
    Merci de ta réponse ProgElecT.

    Grâce à elle, en planchant dessus et en récupérant un peu d'aide sur d'autres fofo, j'ai la solution finale.

    Voici le code pour ceux que ça intéresse !

    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
    62
    Option Explicit
     
    Dim objArrayList
    Set objArrayList = CreateObject("System.Collections.ArrayList")
     
    Call CheckFiles("D:\Test\","AC","EDI",30)
     
     
    If objArrayList.Count <> 0 Then Call SendMail()
     
    Set objArrayList = Nothing
    '#############################################################
    Sub CheckFiles(argPath,argFile,argExt,argTime)
        Dim objFso, objFile 
        Set objFso = CreateObject("Scripting.FileSystemObject")
     
        If objFso.FolderExists(argPath) Then
           For Each objFile In objFso.GetFolder(argPath).Files
               If DateDiff("n", objFile.DateLastModified, Now) < argTime And _
                  Left(objFile.Name,2) = argFile And _
                  UCase(objFso.GetExtensionName(objFile.Name)) = argExt Then 
    			  WScript.Quit
    			Else
                  objArrayList.Add objFile.DateLastModified & Space(3) & objFile.Path 
               End If
           Next
        End If
        objArrayList.Sort
        objArrayList.Reverse
     
        Set objFso = Nothing
    End Sub
    '#############################################################
    Sub SendMail()
        Dim strBody
     
        strBody = "Bonjour," & Chr(13) & Chr(13) &_
                  "Une potentielle erreur de traitement dans l'integration " &_
                  "des commandes a ete detectee." & Chr(13) &_
                  "Il semblerait qu'il n'y ait pas eu d'integration de commandes " &_
                  "depuis plus de 30 minutes." & Chr(13) &_
    	      "Hors le traitement a lieu toutes les demi-heure." & Chr(13) & Chr(13) &_
                  "Le fichier le plus recent sur " &_
    	      "D:\Test est :" & Chr(13) & objArrayList(0) & Chr(13) & Chr(13) & "Cordialement"
     
     
        With CreateObject("CDO.Message")
             .From = "integration@mon-entreprise.com"
             .To = "mon-mail@mon-entreprise.com"
             .CC = ""
             .Subject = "Erreur d'integration des commandes AC sur le serveur"
             .TextBody= strBody
             .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
             .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mon-entrepise.com"
             .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
             .Configuration.Fields.Update
             On Error Resume Next
             .Send
             'If Err.Number <> 0 Then MsgBox Err.Description,16,"Erreur"
             On Error GoTo 0
        End With 
    End Sub

    Ça marche nichouel !


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

Discussions similaires

  1. [PHP 5.3] erreur 550 envoi mail sous php
    Par nolliug dans le forum Langage
    Réponses: 7
    Dernier message: 03/03/2012, 09h48
  2. envoi mail sous linux
    Par ja1985va dans le forum Linux
    Réponses: 8
    Dernier message: 22/07/2011, 12h59
  3. envoi mail sous Forms 10 g
    Par ciel59 dans le forum Forms
    Réponses: 4
    Dernier message: 19/03/2009, 12h00
  4. Envoi mail sous Unix avec Java
    Par dimitris dans le forum Général Java
    Réponses: 6
    Dernier message: 15/03/2008, 22h57

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