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

Web & réseau Delphi Discussion :

fichiers zipés à envoyer par mail


Sujet :

Web & réseau Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 73
    Points
    73
    Par défaut fichiers zipés à envoyer par mail
    Bonjour

    Votre avis m intéresse.

    J ai pour projet de créer un petit programme qui :

    etape 1 :
    me liste les fichiers et d'un répertoire et ses sous répertoires

    etape 2
    compare ses fichiers pour savoir s'il s'agit de nouveaux fichiers

    Si oui
    Envoie les nouveaux fichiers zipés par mail. (1 mail par fichier)
    et envoie un fichier de rapport listant l ensembles des mails envoyés.

    Est t-il possible de faire se programme avec delphi 7 ?
    Faut il d autre module en complément avec delphi 7 ?

    Si vous avez des pistes à me donner ne vous privez pas :-)

    Autre info :
    Le programme serai exécuter ensuite via une tâche planifiée.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 50
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Il ne me semble pas y avoir de probleme pour la realisation de ton projet.

    etape 1 :
    J'utiliserai d'abord TScruteDossier pour faire la liste des fichiers (tu peux aussi le coder toi même mais ce composant est très bien fait) que tu pourras trouver ici :

    http://www.phidels.com/php/index.php...ute.htm&id=225

    etape 2 : TscruteDossier

    Ensuite, pour Zipper, j'utilise actuellement ZipForge et pour envoyer des mails avec PJ, la procedure SendMail que tu trouveras sur ce forum (ou que je t'enverrai si besoin)

    Bonne continuation, Cyrille.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    Bonjour Cyrille36,

    Donc j ai suivi tes conseils en téléchargant les composants qui me manqués.
    • TScruteDossier
    • ZipForge


    J arrive à :
    parcourir l arborescence de mon répertoire et sous répertoires,
    récupérer les fichiers voulus suivant un filtre (*.pdf) et les dernières fichiers reçus (date de création)
    et enfin à les ziper.

    Il me reste à les envoyer

    tu parles de :
    ...et pour envoyer des mails avec PJ, la procedure SendMail que tu trouveras sur ce forum (ou que je t'enverrai si besoin)
    Je veux bien que tu m envoies tes infos pour que je puisse continuer si cela ne te dérange pas ?
    Dans la FAQ il parle de sendmail mais j ai l impression qu il faut avoir Outlook pour envoyer des mails.

    Dans mon cas je veux juste envoyer en automatique des mail avec en pièce joint un fichier zip.
    Tes idées ou Vos idées reste les bienvenues.

    Merci :-)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 50
    Points : 44
    Points
    44
    Par défaut
    Salut,

    Cette unité te permettra d'envoyer des mails avec PJ via ton client de messagerie.

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    unit EnvoiMailAvecClientMessagerie;
     
    interface
     
    Uses
      Windows, SysUtils, Classes, Controls, Forms, StdCtrls, MAPI, Buttons, Dialogs,StrUtils;
     
    Type
      TMapiFiles = Array Of TMapiFileDesc;
      TFilePath = Array[0..MAX_PATH] Of AnsiChar;
      PFilePath = ^TFilePath;
      TFileName = Array[0..MAX_PATH] Of AnsiChar;
      PFileName = ^TFileName;
      MapiInfos = Packed Record
        ToAddress : String;
        Subject : String;
        Body : String;
        AttachedFiles : TStrings;
      End;
     
     
    Procedure sendMail2(Infos : MapiInfos; liste, listeCc : tstrings);
     
    implementation
     
    Procedure sendMail2(Infos : MapiInfos; liste, listeCc : tstrings);
    // Construction du mail
    Var
      Files: TMapiFiles;
      MapiMessage: TMapiMessage;
      ToDesc: array of TMapiRecipDesc;
      MError: Cardinal;
      I: Integer;
      Flags: Cardinal;
      bou,bou1 : integer;
      S: AnsiString;
    Begin
      ZeroMemory(@Files, SizeOf(Files));
      ZeroMemory(@ToDesc, SizeOf(ToDesc));
      SetLength(ToDesc,liste.Count+listeCc.Count);
     
      If Infos.AttachedFiles <> nil Then
      Begin
        SetLength(Files, Infos.AttachedFiles.count);  // la taille est alloué une seule fois
        For I := 0 To Infos.AttachedFiles.count-1 do
        Begin
          Files[I].ulReserved := 0;
          Files[I].flFlags := MAPI_OLE_STATIC;
          Files[I].nPosition := Length(Infos.Body) - 1;
          S := AnsiString(Infos.AttachedFiles[I]);
          Files[I].lpszPathName := StrNew(PAnsiChar(S));
          S := AnsiString(ExtractFileName(Infos.AttachedFiles[I]));
          Files[I].lpszFileName := StrNew(PAnsiChar(S));
          Files[I].lpFileType := Nil;
        End;
      End;
     
     ///////////////////////////////////////////////////////////////////////////////
    for bou := 0 to liste.Count-1 do
    begin
      With ToDesc[bou] Do
      Begin
        ulReserved := 0;
        ulRecipClass := MAPI_TO;
        lpszName := strnew(PAnsiChar(AnsiString(Liste[Bou])));
        lpszAddress := Nil;
        ulEIDSize := 0;
        lpEntryID := Nil;
      End;
    end;
     
    for bou1 := liste.Count to (liste.Count+listeCc.Count)-1 do
    begin
      With ToDesc[bou1] Do
      Begin
        ulReserved := 0;
        ulRecipClass := MAPI_CC;
        lpszName := strnew(PAnsiChar(AnsiString(listeCc[Bou1-liste.Count])));
        lpszAddress := Nil;
        ulEIDSize := 0;
        lpEntryID := Nil;
      End;
    end;
     
      With MapiMessage Do
      Begin
        ulReserved := 0;
        lpszSubject := PAnsiChar(AnsiString(Infos.Subject));
        lpszMessageType := Nil;
        lpszDateReceived := Nil;
        lpszConversationID := Nil;
        flFlags := MAPI_SENT;
        lpOriginator := Nil;
     
    ////////////////////////////////////////////////////////////////////////////////
       If Trim(liste[0]) <> '' Then
        Begin
          nRecipCount := liste.Count+listecc.Count;
          //nRecipCount:=5;
          lpRecips := @ToDesc[0];
          Flags := 0;
        End
        Else
        Begin
          nRecipCount := 0;
          lpRecips := Nil;
          Flags := MAPI_DIALOG;
        End;
    ////////////////////////////////////////////////////////////////////////////////
     
     
        nFileCount := High(Files) + 1;
        lpFiles := Pointer(Files);
        lpszNoteText := PAnsiChar(AnsiString(Infos.Body));
      End;
      MError := MapiSendMail(0, Application.Handle, MapiMessage, Flags, 0);
      //libération de la memoire
      for I := 0 to High(Files) do
      begin
        StrDispose(Files[I].lpszPathName);
        StrDispose(Files[I].lpszFileName);
      end;
      If MError <> 0 Then  MessageDlg('Le message n''a pas été envoyé', mtError, [mbOK], 0);
    End;
     
    end.

    Et voici comment s'en Servir :

    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
    function TFc_Envois.Envoi : Boolean;
    var
     Txt                            : String;
     Bou, Bou1, Bou2, u, v    : Integer;
     Infos                          : MAPIInfos;
     Dest, Copie                  : String;
     A,Cc                           : TStrings;
    begin
      Result := True;
      try
       // Creation du corps
       for  Bou:=0 to Memo.Lines.Count-1 do Txt := Txt + Memo.Lines[Bou] + #13 + #10;
       // Creation de la chaine des Destinataires
       A:=TStringlist.Create;
       for u :=0  to ListBoxDestinataires.Items.Count-1 do A.Add(Dest);
       // Creation de la chaine des Destinataires en Copie
       Cc:=TStringlist.Create;
       for v :=0  to ListBoxCopies.Items.Count-1 do Cc.Add(Copie);
       // Renseignements
       With Infos Do
       Begin
        SubJect := Ed_Objet.Text;
        Body := Txt;
        AttachedFiles := TStringList.Create;
        AttachedFiles.Clear;
        for bou2:= 0 to ListBoxPJ.Count-1 do AttachedFiles.Add(ListBoxPJ.Items[Bou2]);
        SendMail2(Infos,A,Cc);
       End ;
       A.Free;
       Cc.Free;
      except;
       Result:=False;
       A.Free;
       Cc.Free;
      end;
    end;
    Cordialement, Cyrille.
    Code Testé avec : Delphi 2009 Pro - WinXp - Outlook Express-

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    Alors j ai eu un peu de temps pour avancer sur mon programme cette après midi.

    Alors je suis arrivé envoyé les mails avec en pièce jointe le fichier zip.

    Entre mon message de fin de matinée et ton mail je suis partie sur les composant indy 9.0

    j ai du installer ces composants car ils ne sont pas installés à l origine sur delphi 7 personnel.
    Bref j ai vu un peu tard ton message.

    Il me reste une dernière question sur l envoie de mail :
    si je veux utiliser un certificat SSL pour envoyer mes mails par un serveur qui attend une transmission sécurisée.
    si vous aviez des infos ou des pistes à ce niveau ? :-)

    voici un extrait de mon code avec composant indy 9.0

    pour info :
    srvsmtp: TIdSMTP;
    msgmail: TIdMessage;
    les valeurs des variables provienne en générale d un fichier ini

    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
     
        // CREATION DE L EMAIL AVEC LE FICHIER ZIP EN PIECE JOINT
     
        // RECUPERATION DES DONNEES POUR LES MAILS DANS LE FICHIER CONFIG.INI
        Ini2:=TIniFile.Create('C:\Documents and Settings\jrdeb\Mes documents\Téléchargements\tscrute\ini\CONFIG.INI');
        host:=Ini2.ReadString('MAIL','HOST','na'); // HOST
        port:=Ini2.ReadString('MAIL','PORT','na'); // PORT
        user:=Ini2.ReadString('MAIL','USERNAME','na'); // USERNAME
        pwd:=Ini2.ReadString('MAIL','PASSWORD','na'); // PASSWORD
        exped:=Ini2.ReadString('MAIL','EXPEDITEUR','na'); // EXPEDITEUR
        desti:=Ini2.ReadString('MAIL','DESTINATAIRE','na'); // DESTINATAIRE
        Ini2.Free;
     
        // ENTETE DU MAIL
        msgmail.Clear; //Efface l'entête et le corps du message
        msgmail.From.Text :=exped; //Adresse email de l'expediteur
        msgmail.ReplyTo.EMailAddresses:=exped; //Adresse email où le destinataire pourra répondre
        msgmail.Recipients.EMailAddresses:=desti; //Adresse email du destinataire
        msgmail.Date:=Date; //Date de l'envoi du message
        msgmail.Subject:='ESCRIBE ECG. Etude TATAT Site TITITI'; //Sujet du message
        msgmail.Priority:=mpNormal; //Priorité du message
        corp := 'ESCRIBE ECG message. Pièce jointe'+nomzip+'.zip';
        msgmail.Body.Text := corp; //Corps du message
     
        // PIECE JOINTE DU MAIL LE FICHIER ZIP
        TIdAttachment.Create(msgmail.MessageParts,'C:\Documents and Settings\jrdeb\Mes documents\Téléchargements\tscrute\drop\'+nomzip+'.zip'); //Attache le fichier
     
        // CONNEXION AU SERVER SMTP
        srvsmtp.AuthenticationType:=atLogin; //Type d'authentification
        srvsmtp.Host:=host; //Hôte (par exemple pour Free : smtp.free.fr)
        srvsmtp.Port:=strtoint(port); //Port (par exemple pour Free : 25)
        srvsmtp.UserName:=user; //Nom d'utilisateur
        srvsmtp.Password:=pwd; //Mot de passe
        srvsmtp.Connect; //Connexion
        try
          srvsmtp.Send(msgmail); //Envoi du message
        finally
          srvsmtp.Disconnect; //Déconnexion
        end;

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 50
    Points : 44
    Points
    44
    Par défaut
    Désolé, je n'ai aucune info sur le SSL.
    Cyrille.

  7. #7
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Pour le SSL 497 587 celui de Gmail ou Yahoo! utilise la version Indy10 c'est trés fiable & facile à manipuler.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/09/2013, 16h04
  2. Réponses: 19
    Dernier message: 21/03/2012, 16h17
  3. Réponses: 2
    Dernier message: 11/02/2011, 14h21
  4. Réponses: 1
    Dernier message: 11/12/2008, 14h44
  5. Envoyer par mail mon fichier modifié
    Par mattwarend dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 17/11/2008, 14h04

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