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

Langage Delphi Discussion :

codes sources du point 6.11 erronés


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut codes sources du point 6.11 erronés
    J'ai voulu reprendre les sources du point 6.11 de ce site pour essayer et ça ne fonctionne pas.Qqn peux me dire pourquoi?

    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
     
    procedure TfrmMain.btnSendClick(Sender: TObject);
    Var MAPIMessage: TMAPIMessage;
        MAPIFile     : TMAPIFileDesc;
        MAPIRecip    : TMAPIRecipDesc;
        MAPIRecips   : Array[0..1]Of TMAPIRecipDesc;
        i            : Integer;
        Name, tmp    : String;
    begin
     
    //------------------------ Définition de MAPIFile -----------------------\\
       MAPIFile.ulReserved   := 0;
       MAPIFile.flFlags      := 0;
       MAPIFile.nPosition    := 0;
       MAPIFile.lpszPathName := PChar(edFile.Text);                 //Chemin complet du fichier à joinde
       MAPIFile.lpszFileName := PChar(ExtractFileName(edFile.Text));//Nom "interne" du fichier joint
       MAPIFile.lpFileType   := nil;                                //nil : le type de fichier sera déterminé par le système
    //-----------------------------------------------------------------------\\
     
    //--------------- Récupération du pseudo du destinataire ----------------\\
      tmp := edAdr.Text;
      For i := 1 To Length(tmp) Do
      Begin
        If tmp[i] = '@' Then Break
        Else Name := Name + tmp[i];
      end;
    //-----------------------------------------------------------------------\\
     
    //----------------------- Définition de MAPIRecip -----------------------\\
       MAPIRecip.ulReserved   := 0;
       MAPIRecip.ulRecipClass := MAPI_TO;           //Destinataire principal; MAPI_CC et MAPI_BCC pour des copies/copies cachées
       MAPIRecip.lpszName     := PChar(Name);       //Nom du destinataire
       MAPIRecip.lpszAddress  := PChar(edAdr.Text); //et son adresse
       MAPIRecip.ulEIDSize    := 0;
       MAPIRecip.lpEntryID    := nil;
    //-----------------------------------------------------------------------\\
     
    MAPIRecips[0] := MAPIRecip; //MAPISendMail prend un tableau de MAPIRecipDesc en paramètre
     
    //---------------------- Définition de MAPIMessage ----------------------\\
      With MAPIMessage Do
      Begin
        ulReserved         := 0;
        lpszSubject        := PChar(edSjt.Text);         //Sujet du message
        lpszNoteText       := PChar(memTexte.Lines.Text);//Texte du message
        lpszMessageType    := nil;                       //nil lors d'un envoi
        lpszDateReceived   := nil;
        lpszConversationID := nil;
        flFlags            := 0;
        lpOriginator       := nil;                       //Pointeur éventuel vers une description de l'expéditeur
        nRecipCount        := 1;                         //Nombre de destinataires
        lpRecips           := @MAPIRecips[0];            //On passe l'adresse du premier élément du tableau de destinataires
        nFileCount         := 1;                         //Nombre de fichiers joints
        lpFiles            := @MAPIFile;                 //Pointeur vers la description du fichier joint
      end;
    //-----------------------------------------------------------------------\\
     
     
    //------------------------ Appel de MAPISendMail ------------------------\\
     If MAPISendMail(0, 0, MAPIMessage, MAPI_NEW_SESSION or
                     MAPI_DIALOG, 0) <> SUCCESS_SUCCESS Then
     ShowMessage('Une erreur est apparue lors de l''envoi du message')
     Else ShowMessage('Envoi effectué !');
    //-----------------------------------------------------------------------\\
     
    end;

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Plus de précision ?
    J'ai ma fonction sendmail
    et j'ai noté 1 erreur possible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lpRecips           := @MAPIRecips[0];   // FAUX ??
    lpRecips           := @( MAPIRecips[0] );   // VRAI EN TOUT CAS
    Attention ce code marche avec une seule pièce jointe, avec bug incorporé invisible

    En fait le piège, c'est qu'avec UNE piece jointe, ca marche, par chance, car la chaine de car. est dans un no mans land sans être écrasé par les fichiers joints suivant...

    Le code corect pour plusieurs pieces jointe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       MAPIFile.lpszPathName := strnew( PChar(edFile.Text));                 //Chemin complet du fichier à joinde
       MAPIFile.lpszFileName := strnew( PChar(ExtractFileName(edFile.Text)));//Nom "interne" du fichier joint
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       MAPIFile.lpszPathName := PChar(edFile.Text);                 //Chemin complet du fichier à joinde
       MAPIFile.lpszFileName := PChar(ExtractFileName(edFile.Text));//Nom "interne" du fichier joint
    LIBERER Les chaines avec strdispose ensuite...

    [Modération]
    Merci d'utiliser les balises code ou quote, Laurent Dardenne
    [/Modération]
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    As-tu essayé d'exécuter ces sources? Si je mets un fichier avec une adresse email valide il n'y a pas d'erreur de compil et d'exécution mais j'ai en retour 'Une erreur est apparue lors de l''envoi du message' au lieu de 'envoi effectué'

Discussions similaires

  1. Contribuez à la FAQ et aux CODES SOURCE XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 21/04/2008, 20h52
  2. code source de netstat
    Par calif dans le forum Développement
    Réponses: 3
    Dernier message: 28/09/2003, 08h39
  3. Defragmenteur code-source
    Par ak-k dans le forum Windows
    Réponses: 7
    Dernier message: 25/08/2003, 14h36
  4. Je cherche le code-source d'un interface de Windows
    Par Robert A. dans le forum Windows
    Réponses: 5
    Dernier message: 02/06/2003, 09h45
  5. [VB6] Code source pour modifier MsgBox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/02/2003, 15h13

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