Page 1 sur 1

Extraction d'adresse mail d'un fichier .txt puis faire une copie sur un fichier .txt (recup)

Posté : mar. 11 août 2020 14:21
par Sharki
Bonjour à tous et à toutes,

Comme indiqué sur ma présentation je suis un néophyte en terme de programmation.
Certes où je travail (salle de réalité virtuelle) nous faisons appel parfois à un informaticien mais chaque intervention bloque notre activité pendant quelques temps.

Je viens vers vous aujourd'hui car nous envoyons des fichiers (photos de fin de session ainsi qu'un message post séance) à nos clients. Le problème c'est que nous n'arrivons plus à récupérer les adresses mails à partir du fichier .txt. Les mails partent mais l'extraction des adresses ne se fait plus...

Fichier .txt des joueurs
Mission2
1;Sharki;XXX@XXX.fr
2;Alex;YYY@YYY.fr
3;Name;
4;Name;
Partie du script
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Rc:" & $rc)
EndIf
   $rc = _INetSmtpMailCom($FileList, $s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
    ;Send("^v") ;On la colle
    ;Send("{ENTER}");On entre l'adresse
 Next
EndIf

Func _INetSmtpMailCom($FileList, $s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    $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 = 1 Then
        For $x = 1 To $FileList[0]
            $FileList[$x] = _PathFull ($FileList[$x])
            If FileExists($FileList[$x]) Then
                $objEmail.AddAttachment ($FileList[$x])
            Else
                $i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $FileList[$x]
                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
    $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
; Sent the Message
    $objEmail.Send
    if @error then
        SetError(2)
        return $oMyRet[1]
    EndIf
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 ;==>MyErrFunc

$stock = FileOpen ("recup.txt", 0)
$CheminStock = FileOpen(@DesktopDir & "\Stockage_email.txt", 1)

While 1
    $line = FileReadLine($stock)
    If @error = -1 Then ExitLoop
    If StringInStr($line, $mot, 0) Then FileWriteLine($CheminStock, $line)
   Wend

   MsgBox (1, "Mail parti!", "Les mail sont parti! checkez tout de même la boite mail au cas ou on sait jamais")
En espérant avoir était le plus clair possible.
Merci par avance pour toutes l'aides que vous pourrez me donner.

Re: Extraction d'adresse mail d'un fichier .txt puis faire une copie sur un fichier .txt (recup)

Posté : mer. 12 août 2020 22:38
par Tlem
Bonsoir Alex.
Avant de pouvoir répondre correctement à votre question, il faudrait déjà éclaircir certains points !

Votre fichier texte est-il toujours de la même forme ?
Est-ce qu'il peux y avoir plusieurs adresses mail ? Si oui jusqu'à combien ?
Devez-vous envoyer le mail à toutes les adresses indiquées dans le fichier texte ?

Re: Extraction d'adresse mail d'un fichier .txt puis faire une copie sur un fichier .txt (recup)

Posté : mer. 12 août 2020 23:47
par Sharki
Bonsoir Tlem,
Oui en effet j'ai omis certains petits détails désolé d'ailleurs...

Pour répondre à vos questions.

- Oui en effet toujours de la même forme.
- Il peut y avoir de 2 jusqu'à 4 adresses mails par dossier.
- Je dois en effet envoyer le même mail avec les photos à chaques adresses mails présentent par dossier.

Toutes les adresses mails contenues dans chaques dossiers devra être copié dans un fichier de récupération de données clients (pour nos futurs ccampagnes comme pub, avis....)

Re: Extraction d'adresse mail d'un fichier .txt puis faire une copie sur un fichier .txt (recup)  

Posté : jeu. 13 août 2020 00:52
par Tlem
Voici un code qui devrait vous aider. Il faut l'adapter et le compléter.
Il vous permettra de récupérer toutes les adresses email du fichier (qu'il y en ait 1, 2, 4 ou plus).

Code : Tout sélectionner

Global $sEmailFile = FileRead("Stockage_email.txt")
If @error Then
	MsgBox(16, "Erreur", "Erreur de lecture du fichier Stockage_email.txt")
	Exit
EndIf

; Ici on triture le contenu du fichier texte pour obtenir un tableau avec toutes les adresses email trouvées.
Global $aEmail = StringRegExp($sEmailFile,";([-.\w]+@[-.\w]+\.[\w]{2,4})",3)

; Ici on lit le tableau ligne par ligne.
For $i = 0 To UBound($aEmail) - 1
	; C'est ici qu'il faut mettre l'appel à la fonction d'envoi par mail - INetSmtpMailCom(......)
	ConsoleWrite("Email N° " & $i + 1 & " ---> " & $aEmail[$i] & @CRLF) ; Cette ligne écrit les adresses email dans la console juste pour vous montrer
Next

Exit
; Ici c'est la fin du code principal du script

; ===============================================
; C'est ici que vous devez mettre vos fonctions :
Func Fonction1()
	;....
EndFunc

Func Fonction2()
	;....
EndFunc

Re: Extraction d'adresse mail d'un fichier .txt puis faire une copie sur un fichier .txt (recup)

Posté : ven. 14 août 2020 12:50
par Sharki
Merci Tlem.