Meta-Extractor

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
liberodark
Niveau 4
Niveau 4
Messages : 73
Enregistré le : jeu. 20 août 2015 20:33
Status : Hors ligne

Meta-Extractor

#1

Message par liberodark » mer. 14 mars 2018 16:57

Bonjour,

Cela fait un moment que je suis pas venu ici :D
Et je reviens vers vous pour faire un petit soft en autoit avec ce genre de fonctionnalités :
https://pastebin.com/AzUjQn9L
En gros cela dois lire une boite mail, et précisément un dossier spécifique prendre quelques données dans les mails.
Ensuite les déplacer dans un autre dossier.
Pour enfin les exporter en csv avec cette structure :
Dat = i.CreationTime
Cells(b, 1) = Serial
Cells(b, 2) = Dat
Cells(b, 3) = Noir
Cells(b, 4) = Couleur


Le plus compliqué pour moi c'est surtout comment aller lire les mails sur un serveur exchange ou dois je faire comme le vbs avec outlook ouvert ?
Ensuite reste l'export vers du csv beaucoup moins difficile mais bon.
J'ai donc trouvé ceci pour l'envoi d'email qui fonctionne très bien !
;
;##################################
; Include
;##################################
#Include<file.au3>
;##################################
; Variables
;##################################
$SmtpServer = "smtp.mail.yahoo.com"              ; address for the smtp-server to use - REQUIRED
$FromName = "Adrive"                      ; name from who the email was sent
$FromAddress = "Adrive_2531@yahoo.com" ; address from where the mail should come
$ToAddress = "Natraj550@yahoo.com"   ; destination address of the email - REQUIRED
$Subject = "Userinfo"                   ; subject from the email - can be anything you want it to be
$Body = "Hello"                              ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = ""                       ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
$CcAddress = ""       ; address for cc - leave blank if not needed
$BccAddress = ""     ; address for bcc - leave blank if not needed
$Importance = "Normal"                  ; Send message priority: "High", "Normal", "Low"
$Username = "Adrive_2531"                    ; username for the account used from where the mail gets sent - REQUIRED
$Password = "**********"                  ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = 25                            ; port used for sending the mail
$ssl = 0                                ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                          ; GMAIL port used for sending the mail
;~ $ssl=1                               ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
EndIf
;
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
;~          ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
        Case "Normal"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
        Case "Low"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
    $objEmail=""
EndFunc   ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
EndFunc   ;==>MyErrFun
Maintenant voici le VBS qui fait ça :
Sub LireMessages()

Dim olapp As New Outlook.Application
Dim NS As Object, Dossier As Object
Dim OlExp As Object
Dim i As Object
Dim mybody() As String
Dim fromsender As String


Set NS = olapp.GetNamespace("MAPI")
Set Dossier = NS.Folders("Dossiers personnels").Folders("Boîte de réception")
b = 2
For Each i In Dossier.Items
   
   
    If i.SenderEmailAddress = "alerte@alerte.com" And i.Subject = "Declenchement alerte" Then
        sujet = i.Subject
        mybody = Split(i.Body, vbCrLf)
        fromsender = i.SenderEmailAddress
        dejafait = True
        For compt = 0 To UBound(mybody)
            If InStr(1, UCase(mybody(compt)), UCase("ALERTE")) > 0 And dejafait = True Then
                alerte = LTrim(Split(mybody(compt), ":")(1))
                dejafait = False
            End If
            If InStr(1, UCase(mybody(compt)), UCase("Point de mesure")) > 0 Then
                PointMesure = LTrim(Split(mybody(compt), ":")(1))
            End If
            If InStr(1, UCase(mybody(compt)), UCase("Situation")) > 0 Then
                situation = LTrim(Split(mybody(compt), ":")(1))
           
            End If
            If InStr(1, UCase(mybody(compt)), UCase("Seuil")) > 0 Then
                seuil = LTrim(Split(mybody(compt), ":")(1))
            End If
            If InStr(1, UCase(mybody(compt)), UCase("Liste des alertes")) > 0 Then
                mydate = Mid(mybody(compt), InStr(1, mybody(compt), "/") - 2, 10)
                           
            End If
           
     
   
           
           
        Next
        Cells(b, 1) = fromsender
        Cells(b, 2) = sujet
        Cells(b, 3) = Format(mydate, "MM/DD/YYYY")
        Cells(b, 4) = alerte
        Cells(b, 5) = PointMesure
        Cells(b, 6) = seuil
        Cells(b, 7) = situation
   
     b = b + 1
       
  End If
 
Next i
End Sub
J'ai aussi remarqué que outlookEX pourrait m'aider sur les déplacement des mail !
https://www.autoitscript.com/forum/file ... outlookex/
Vous que on utilise outlook.

Mais je souhaite seulement lire les mails qui arrive dessus dans un dossier.

Donc si vous avez des idée je suis à votre écoute.

De ce fait j'aurais bien besoin de votre aide !

Cordialement

liberodark
Niveau 4
Niveau 4
Messages : 73
Enregistré le : jeu. 20 août 2015 20:33
Status : Hors ligne

Re: Meta-Extractor

#2

Message par liberodark » jeu. 15 mars 2018 16:47

Re voici donc un début pas trop mal du script :
Il peut créer un dossier dans outlook malheuresement j'ai du mal à savoir comment lui dire de les passer sur le dossier "compteurs-OK"
Mais avant lui demander de lire chaque mail pour extraire les données ci dessous !

Dat = i.CreationTime
Cells(b, 1) = Serial
Cells(b, 2) = Dat
Cells(b, 3) = Noir
Cells(b, 4) = Couleur

#include <IE.au3>

Global Const $olFolderInbox = 6

$sSender = "mon@mai.fr"
$sFolder1 = "cs-compteurs-coul"
$sFolder2 = "cs-compteurs-noir"
$sNewFolder = "compteurs-OK"

_IEErrorHandlerRegister()
$o_Outlook = ObjCreate("Outlook.Application")
$oNameSpace = $o_Outlook.GetNameSpace("MAPI")
$oInbox = $oNameSpace.GetDefaultFolder($olFolderInbox)
$oFolders = $oInbox.Parent.Folders

$oNewFolder = 0
For $oFolder In $oFolders
    If String($oFolder.Name) = $sNewFolder Then
        $oNewFolder = $oFolder
    EndIf
Next

If Not IsObj($oNewFolder) Then
    $iReturn = MsgBox(4, "Warning", "Folder '" & $sNewFolder & "' was not found." & @CR & @CR & _
            "Would you like to create it?")
    If $iReturn = 6 Then
        $oNewFolder = $oFolders.Add($sNewFolder)
        If Not IsObj($oNewFolder) Then
            MsgBox(64, "Error", "Unable to create the folder '" & $sNewFolder & "'.")
            Exit
        EndIf
    Else
        Exit
    EndIf
EndIf

$oItems = $oInbox.Items
For $oItem In $oItems
    If String($oItem.SenderEmailAddress) = $sSender Then
        $oItem.Move($oNewFolder)
    EndIf
Next
 


Cordialement

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 544
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Meta-Extractor

#3

Message par walkson » jeu. 15 mars 2018 18:20

Bonjour,
Habituellement, j'ai plaisir à traduire du VBA en autoit mais là, avec OutLook, j'avoue avoir une certaine allergie qui me fait pousser les canines !!!
Je regrette, mais je n'irais pas sur ce terrain mais je peux vous conseiller plusieurs possibilités
https://www.autoitscript.com/forum/topi ... ookex-udf/
voir les discutions comme https://www.autoitscript.com/forum/topi ... tlook-udf/

Après, il y a la possibilité de se passer de Outlook comme https://www.autoitscript.com/forum/topi ... p3au3-udf/
Il y a 2 ou 3 ans, j'ai testé un UDF POP, si j' avais réussi c'est que le message n'était pas crypté, et que je n'ai pas regardé le temps passé... pour la vélocité, c'est loupé :mrgreen:

Je vous souhaite toutes les chances de réussir :bisou:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Répondre