Bonjour,

J'ai une DLL qui me permet d'envoyer des mails.
Lorsque j'envoie plusieurs mails de suite j'ai un message "Acces Violation"
Je pense qu'il s'agit d'un pb de mémoire cependant je ne sais pas comment faire pour eviter ce problème

Voici le code de la procédure contenu dans ma DLL

Merci d'avance pour votre aide

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
 
// -------------------------------------------------------
// Envoi d'un mail
// -------------------------------------------------------
procedure EnvoiMail(destinataire:Pchar; envoyeur:Pchar; sujet:Pchar; Mess:Pchar; CheminPiece:Pchar; Confirmation:Pchar);stdcall
  Var
  IdSMTP1: TIdsmtp;
  IdMessage1: TIdMessage;
  i: byte;
  listedoc: string;
  chemin: String;
  longueur: integer;
  AdresseATester : string;
  AdresseOK : string;
  ListeDestinataireATester : string;
  ListeDestinataireOK : string;
 
  begin
  IdMessage1:= TIdmessage.Create(nil);
  IdSMTP1:= TIdSMTP.Create(nil);
 
  With Idmessage1 do
    Begin
    Charset:='iso-8859-1';
    Encoding:=meMIME;
    ContentType:='text/plain';
    // si contenu html
    Body.Text:=Mess;
    From.Text:=envoyeur;
    Recipients.EMailAddresses:=destinataire;
    Subject:=sujet;
    // on teste d'abord si la variable
    // cheminpiece est renseignée
    // sinon on teste si le fichier
    // c:\Fichiersjoints existe
    // afin d'attacher les pièces jointes
    i:=Pos(';',cheminpiece);
    //if cheminpiece <> ' ' then
    if i > 0 then
    begin
      listedoc:=cheminpiece;
      i:=Pos(';',listedoc);
      while (i>0) or (listedoc<>'') do
      begin
        chemin:=copy(listedoc,1,i-1);
        TIdAttachment.create(Idmessage1.MessageParts,chemin);
        Showmessage(Chemin + ' attaché');
        longueur:=length(listedoc)-i;
        listedoc:=copy(listedoc,i+1,longueur);
        i:=Pos(';',listedoc);
      end;
    end;
  end;
  IdSMTP1.Host:='host';
  // Connexion au serveur de messagerie
  IdSMTP1.Connect();
  // ********************************************
 
  // ********************************************
  Try
    Try
      IdSMTP1.Send(IdMessage1);
    except
      on e: exception do
      begin
      Idmessage1.Body.Text:='Message pour : ' + destinataire + Chr(13) + 'Sujet :' + sujet + Chr(13) + 'Message : ' + Mess + Chr(13) + 'pas envoyé';
      Idmessage1.From.Text:='expediteur';
      Idmessage1.Recipients.EMailAddresses:='destinataire';
      Idmessage1.Subject:='Pb envoi de mail';
      IdSMTP1.Send(IdMessage1);
      end;
    end;
  finally
    IdSMTP1.Disconnect;
    // on se deconnecte
  End;
  IdMessage1.Free;
  IdSMTP1.Free;
 
  if Confirmation = 'O' then  Showmessage('Message envoyé');
 
 
End;