Suppression mail

Signaler
Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006
-
Messages postés
15
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
13 février 2006
-
Petite question toute bête.

Est ce que quelqu'un saurait comment faire pour supprimer un e-mail directement sur un serveur pop?

D'après mes recherches, l'instruction idpop3.delete(numéro_du_mail) devrait faire l'affaire mais je ne parviens pas à supprimer les mails.

Voici mon script, il permet de récupérer les e-mail sur un serveur pop
contenant des logs de firewall puis il traite les logs en retenant que
les attaques que reçoient le firewall et réexpédie le tout sous forme
d'e-mail.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3, IdSMTP;

type
TForm1 = class(TForm)
IdPOP31: TIdPOP3;
IdMessage1: TIdMessage;
Memo1: TMemo;
Memo2: TMemo;
IdSMTP1: TIdSMTP;
procedure FormCreate(Sender: TObject);

private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses
IniFiles, FileUtil, Ucommun;

procedure TForm1.FormCreate(Sender: TObject);

var

MAIL,email,i,j,k,nbmel,melport2,NoLg1,NoLg2 : Integer;
Msg : TIdMessage;
senders,sandy,mel,melrep,melserv,melsuj,host,userid,pass,melport : string;
inifile : TIniFile;
liststr,liststr2 : TStringList;

begin

inifile := TIniFile.Create(NormalDir(ExtractFilePath(Application.ExeName)) + 'firewall.ini');
host := inifile.ReadString('POP','Host','');
userid := inifile.ReadString('POP','UserId','');
pass := inifile.ReadString('POP','Password','');
mel := inifile.ReadString('Mail', 'meldest','');
melrep := inifile.ReadString('Mail', 'melrep','');
melsuj := inifile.ReadString('Mail', 'melsujet','');
melport := inifile.ReadString('Mail', 'smtpport','');
melserv := inifile.ReadString('Mail', 'smtpserver','');
ListStr := TStringList.Create;
StringToTstringList(inifile.ReadString('Erreur','err',''), ListStr, ':');
ListStr2 := TStringList.Create;
StringToTstringList(inifile.ReadString('Erreur','pyld',''), ListStr2, ':');
inifile.Free;

IdPOP31.Host := host;
IdPOP31.UserId := userid;
IdPOP31.Password := pass;
IdPOP31.Connect;

nbmel := idpop31.CheckMessages;
ShowMessage(IntToStr(nbmel));

For MAIL := 1 to nbmel -1 do begin
msg := TIdMessage.Create(self);
idpop31.Retrieve(MAIL,msg);
idpop31.RetrieveHeader(MAIL,Msg);
senders := (Msg.From.Text);
For email := 1 to nbmel -1 do begin
msg := TIdMessage.Create(self);
idpop31.Retrieve(email,msg);
idpop31.RetrieveHeader(email,Msg);
sandy := (Msg.From.Text);
If senders = sandy then begin
if Msg.MessageParts.Items[0] is TIdText then begin


Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[0]).Body);
end;
end;
end;

for i := 0 to Memo1.Lines.Count -1 do begin
for j := 0 to ListStr.Count -1 do begin
for k := 0 to ListStr2.Count -1 do begin


if (pos(ListStr[j],Memo1.Lines[i])>0) then begin


Memo2.Lines.Add(UpperCase(senders));


Memo2.Lines.Append(' ==> ' + Memo1.Lines[i]);
end;


if (pos(ListStr2[k],Memo1.Lines[i])>0)then begin


Memo2.Lines.Add(UpperCase(senders));


Memo2.Lines.Append(' ==> ' + Memo1.Lines[i -
1]);


Memo2.Lines.Append(' ' +
Memo1.Lines[i]);
end;
end;
end;
end;
IdPOP31.Delete(MAIL);
end;

//Suppression des doublons
NoLg1 : = 0;
NoLg2 := NoLg1 + 1;
Memo2.Lines.BeginUpdate;

While NoLg1 <= (Memo2.Lines.Count - 2) do Begin
While (NoLg2 <= (Memo2.lines.Count - 1)) do Begin
If Memo2.Lines.Strings[NoLg1] = Memo2.Lines.Strings[NoLg2] then
Memo2.Lines.Delete(NoLg2)
else
Inc(NoLg2);
end;
Inc(NoLg1);
NoLg2 := NoLg1 + 1;
End;
Memo2.Lines.EndUpdate;

IdMessage1 := TIdMessage.Create(nil);
IdMessage1.From.Address :=melrep;//senders; //@ émetteur
IdMessage1.ReplyTo.Add.Address :=senders; //@ de réponse et / ou destinataire
IdMessage1.Recipients.Add.Address := mel;
IdMessage1.Subject := melsuj; //Sujet du message
IdMessage1.ContentType := 'text/plain'; // Message texte
IdMessage1.Body := Memo2.Lines; //corps du message

//Envoi du message
IdSMTP1 := TIdSMTP.Create(nil);
melport2 := StrToInt(melport);
IdSMTP1.Port := melport2; //port smtp
IdSMTP1.Host := melserv; //serveur smtp

//Connexion et envoi du message
if (Memo2.Lines.Count) <> 0 then begin
IdSMTP1.Connect;
IdSMTP1.Send(IdMessage1);
IdSMTP1.Disconnect;
IdSMTP1.Free;
IdMessage1.Free;
end;
msg.Free;
Application.terminate;
end;
end.

2 réponses

Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006

Personne n'a d'idée?
Messages postés
15
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
13 février 2006
1
Salut,

La syntaxe de suppression des mails est bien la bonne. Je pense seulement qu'il y a un méli mélo dans tes boucles...

Cilmarseille