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); ?>
Annonceindlæg fra Arctic Wolf
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.
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 ...
mysql kommer heller ikke, echo er bare en hurtige måde at se om den laver den mysql ...
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...
Der kommer intet echo, hverken udførte ikke... eller insert ...
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!
Hmm, hvis der er 2 mails(eller flere) udfører den echo \"insert ...\" én gang ... og mysql tabellen passer
jd
Nybegynder
03. maj 2001 - 16:22
#8
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; ?>
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?
En mail server. $server er dens hostname, port er 110 (pop3)
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....
Jo, jeg går ... Jeg har klippet de øverste 4 linjer der indeholder require(\"top.php\"); (mysql) og info til pop3 kontoen
Hvad så med mysql_close(); Hvor er den? Den skal jo være i bunden....
Skal ? Har aldrig brugt den :)
... 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...
Vi tilbyder markedets bedste kurser inden for webudvikling