Avatar billede complier Nybegynder
03. maj 2001 - 14:29 Der er 16 kommentarer

Slette mail

Hvordan sletter jeg en mail, efter jeg har fået indholdet ?
I nedenstående, sletter jeg den efter en mysql query, men gør jeg det, udføres mysql queryen ikke ?
(//fputs($fp, \"DELE $k\\r\\n\");)


$fp = fsockopen($server, $port) or fejl($s_cannotConnect, 1, 1);
$foersteLinje = fgets($fp, 1024);
fputs($fp, \"USER $bruger\\r\\n\");
$andenLinje = fgets($fp, 1024);
fputs($fp, \"PASS $adgangskode\\r\\n\");

$fejl=fgets($fp,1024);
if(substr($fejl,0,4)==\"-ERR\"){
echo \"FEJL: $fejl\";
exit;
}


fputs($fp, \"STAT\\r\\n\");
$stat=fgets($fp,1024);
$stat2=split(\" \",$stat);
$no=$stat2[1];
           
$k=1;
while($k<=$no){
$bodyfound=0;
$old=\"\";
fputs($fp, \"TOP $k 1\\r\\n\");

$fejl=fgets($fp,1024);
$t=0;
    if(substr($fejl,0,3)==\"+OK\"){
                    while(substr($linje=fgets($fp,1024),0,1)!=\".\"){
               
                    if($bodyfound==1){
                    if($t==0){
                    $body=\"$linje\";
                    $t=1;
                    //fputs($fp, \"DELE $k\");
                    }
                    }else{
                    if(substr($linje, 0, 4) == \"From\"){
                    $fra=$linje;
                    }
                   
                    if(substr($linje, 0, 2) == chr(13).chr(10)){
                    $bodyfound=1;
                    }
                    }
                }
                }
eregi(\"<(([a-z0-9_]|\\\\-|\\\\.)+@([^[:space:]]*)([[:alnum:]-]))>\", $fra, $regs);
$fra=$regs[1];
flush();

mysql_query(\"insert into commands (fra, body) values (\'$fra\', \'$body\')\");
echo \"insert into commands (fra, body) values (\'$fra\', \'$body\')\";
//fputs($fp, \"DELE $k\\r\\n\");
$k=$k+1;
}
fputs($fp, \"QUIT\\r\\n\");
fclose($fp);
?>
Avatar billede barefoot Nybegynder
03. maj 2001 - 14:42 #1
Hvis du sletter noget efter en mysql kommando så udføres kommandoen.
Og da du ikke har nogle if-sætninger omkring din sletning og udførelsen af din mysql_query så vil mysql_query\'en blive udført under alle omstændigheder.
Avatar billede complier Nybegynder
03. maj 2001 - 14:55 #2
Ja, sådan vil jeg også gerne havde det, men faktum er at det sker ikke :(
Du kan evt. selv teste den på en mailkonto...
Hvis man seltter mailen, kommer echo ikke ...

mega underligt ...
Avatar billede complier Nybegynder
03. maj 2001 - 14:57 #3
mysql kommer heller ikke, echo er bare en hurtige måde at se om den laver den mysql ...
Avatar billede barefoot Nybegynder
03. maj 2001 - 15:03 #4
Hvad siger den så til det:

$hentSQL = \"insert into commands (fra, body) values (\'$fra\', \'$body\')\";

if(mysql_query($hentSQL)){

  echo \"insert into commands (fra, body) values (\'$fra\', \'$body\')\";

  //fputs($fp, \"DELE $k\\r\\n\");
  $k=$k+1;
  fputs($fp, \"QUIT\\r\\n\");
  fclose($fp);

}
else{
  echo \"udførte ikke mysql-kommandoen...\";
}

Her bliver mailen kun slettet hvis mysql bliver udført...
Avatar billede complier Nybegynder
03. maj 2001 - 15:59 #5
Der kommer intet echo, hverken udførte ikke... eller insert ...
Avatar billede barefoot Nybegynder
03. maj 2001 - 16:03 #6
Du har sikkert en if-sætning som afgør hvad der sker.
Men jeg kan ikke overskue din kode når du ikke har stillet den ordentligt op.

HVER gang du har lavet en if-sætning, så lave linieskift og indrykning.
Og lave flere linieskift!
Avatar billede complier Nybegynder
03. maj 2001 - 16:09 #7
Hmm, hvis der er 2 mails(eller flere) udfører den echo \"insert ...\"
én gang ...
og mysql tabellen passer
Avatar billede jd Nybegynder
03. maj 2001 - 16:22 #8
Apropro overskuelighed: http://delfs.dk/?p=articles&id=8
Avatar billede complier Nybegynder
03. maj 2001 - 16:27 #9
Har ændret den, så den bare skal hente mail1, skrive dety i mysql og slette den, men den sletter 2 mails ved hver kørsel?
På mailserveren står det som 2 connections, hvor den henter top 1 1, og derefter sletter 1
. Hvorfor ?
(Har lavet lidt indrykninger ...)


$fp = fsockopen($server, $port) or fejl($s_cannotConnect, 1, 1);
$foersteLinje = fgets($fp, 1024);
fputs($fp, \"USER $bruger\\r\\n\");
$andenLinje = fgets($fp, 1024);
fputs($fp, \"PASS $adgangskode\\r\\n\");

$fejl=fgets($fp,1024);

if(substr($fejl,0,4)==\"-ERR\"){
    echo \"FEJL: $fejl\";
    exit;
}


fputs($fp, \"STAT\\r\\n\");
$stat=fgets($fp,1024);
$stat2=split(\" \",$stat);
$no=$stat2[1];

if($no==0){
    echo \"No mails\";
    exit;
}
           
$bodyfound=0;
$old=\"\";
fputs($fp, \"TOP 1 1\\r\\n\");

$fejl=fgets($fp,1024);
$t=0;
    if(substr($fejl,0,3)==\"+OK\"){
                    while(substr($linje=fgets($fp,1024),0,1)!=\".\"){
               
                        if($bodyfound==1){
                            if($t==0){
                            $body=\"$linje\";
                            $t=1;
                            }
                        }else{
                        if(substr($linje, 0, 4) == \"From\"){
                            $fra=$linje;
                            }
                   
                            if(substr($linje, 0, 2) == chr(13).chr(10)){
                            $bodyfound=1;
                            }
                        }
                }
    }

eregi(\"<(([a-z0-9_]|\\\\-|\\\\.)+@([^[:space:]]*)([[:alnum:]-]))>\", $fra, $regs);
$fra=$regs[1];
flush();

$hentSQL = \"insert into commands (fra, body) values (\'$fra\', \'$body\')\";

if(mysql_query($hentSQL)){

  echo \"insert into commands (fra, body) values (\'$fra\', \'$body\')\";

  fputs($fp, \"DELE 1\\r\\n\");
}
else{
  echo \"udførte ikke mysql-kommandoen...\";
}

fputs($fp, \"QUIT\\r\\n\");
fclose($fp);
exit;
?>
Avatar billede barefoot Nybegynder
03. maj 2001 - 21:28 #10
Du connecter til et eller andet med:

$fp = fsockopen($server, $port) or fejl($s_cannotConnect, 1, 1);

Hvad er det helt præcist som du laver forbindelse til?
Avatar billede complier Nybegynder
03. maj 2001 - 23:59 #11
En mail server.
$server er dens hostname, port er 110 (pop3)
Avatar billede barefoot Nybegynder
07. maj 2001 - 20:23 #12
Jeg må indrømme at jeg er lidt blank...
Men så tænker jeg på at du jo ikke på noget sted opretter forbindelse til mysql.
Det skal du jo huske.
Prøv sådan her:


<?php
(Har lavet lidt indrykninger ...)


$fp = fsockopen($server, $port) or fejl($s_cannotConnect, 1, 1);
$foersteLinje = fgets($fp, 1024);
fputs($fp, \"USER $bruger\\r\\n\");
$andenLinje = fgets($fp, 1024);
fputs($fp, \"PASS $adgangskode\\r\\n\");

$fejl=fgets($fp,1024);

if(substr($fejl,0,4)==\"-ERR\"){
    echo \"FEJL: $fejl\";
    exit;
}


fputs($fp, \"STAT\\r\\n\");
$stat=fgets($fp,1024);
$stat2=split(\" \",$stat);
$no=$stat2[1];

if($no==0){
    echo \"No mails\";
    exit;
}
           
$bodyfound=0;
$old=\"\";
fputs($fp, \"TOP 1 1\\r\\n\");

$fejl=fgets($fp,1024);
$t=0;

if(substr($fejl,0,3)==\"+OK\"){
    while(substr($linje=fgets($fp,1024),0,1)!=\".\"){
           
        if($bodyfound==1){
            if($t==0){
                $body=\"$linje\";
                $t=1;
            }
        }
        else{
           
            if(substr($linje, 0, 4) == \"From\"){
                $fra=$linje;
            }
               
            if(substr($linje, 0, 2) == chr(13).chr(10)){
                $bodyfound=1;
            }
        }
    }
}

eregi(\"<(([a-z0-9_]|\\\\-|\\\\.)+@([^[:space:]]*)([[:alnum:]-]))>\", $fra, $regs);
$fra=$regs[1];
flush();

  $server = \"serveradressen_til_mysql\";
  $bruger = \"brugernavnet_til_mysql\";
  $kodeord = \"kodeordet_til_mysql\";
  $database = \"navnet_på_databasen\";
mysql_connect(\"$server\",\"$bruger\",\"$kodeord\");
mysql_select_db(\"$database\");
$hentSQL = \"insert into commands (fra, body) values (\'$fra\', \'$body\')\";

if(mysql_query($hentSQL)){
        echo \"Har udført kommandoen: \";
    echo \"insert into commands (fra, body) values (\'$fra\', \'$body\')\";

    if(fputs($fp, \"DELE 1\\r\\n\")){
        echo \"har slettet mailen....\";
    }
    else{
        echo \"har ikke slettet mailen...\";
    }
}
else{
        echo \"udførte ikke mysql-kommandoen...\";
}

mysql_close();

fputs($fp, \"QUIT\\r\\n\");
fclose($fp);
exit;
?>



Følgende:
  $server = \"serveradressen_til_mysql\";
  $bruger = \"brugernavnet_til_mysql\";
  $kodeord = \"kodeordet_til_mysql\";
  $database = \"navnet_på_databasen\";
Skal selvfølgelig udfyldes korrekt....
Avatar billede complier Nybegynder
07. maj 2001 - 20:56 #13
Jo, jeg går ...
Jeg har klippet de øverste 4 linjer der indeholder require(\"top.php\"); (mysql) og info til pop3 kontoen
Avatar billede barefoot Nybegynder
07. maj 2001 - 21:17 #14
Hvad så med mysql_close();

Hvor er den?
Den skal jo være i bunden....
Avatar billede complier Nybegynder
07. maj 2001 - 21:20 #15
Skal ?

Har aldrig brugt den :)
Avatar billede barefoot Nybegynder
07. maj 2001 - 21:33 #16
... Det er altid en god ide at afslutte forbindelsen til MySQL efter brug.
Når den er åben står den  bare og \"tapper kraft\" fra databasen.
Det gør den langsommere...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester