Avatar billede zkov82 Nybegynder
08. november 2007 - 17:59 Der er 7 kommentarer

mail på linux server, henter fra db

Jeg har sat et mailscript op på en linixserver.
Jeg henter ca. 200 mailadresser ud fra en db, og kører dem igennem og skulle gerne sende til dem. Men når jeg tester (ved at spamme mig selv), så modtager jeg ikke 200, men mellem 40 og 80 mails, altså den sender ikke alle de mails den skal.
Samtidig har jeg sat det op til at den skal udskrive status på fra mail(...), men den viser bare en blank skærm.
Selv hvis jeg forsøger at echo noget inden while-løkken kommer det ikke frem.

Koden ser således ud:

function composeMail() {
if(isset($_POST['send'])) {
    if(strlen($_POST['tekst'])!=0) {
        $tekst = $_POST['tekst'];
        $header = $_POST['subject'];
        $adresser = setSql();
        echo memory_get_usage(true);
        echo "<table>";
        while($adr = mySql_fetch_array($adresser)) {
        $tsend = sendPost($adr[0],$tekst,$header,$adr[1])? "Mailen er sendt" : "Mailen er IKKE sendt";
        echo "<tr><td>";
        echo $adr[0];
        echo "</td><td>";
        echo "send status: " . $tsend;
        echo "</td><td>";
        echo $adr[1];
        echo "</td></tr>";
        $i++;
        }
        echo "</table>";
        }else{
        echo "Synes du ikke lige du skal skrive noget i mailen? - ellers bliver folk jo nok lidt trætte af det!!";
        }

    }else {
    echo "Overskriften til mailen:";
    echo "<form action='' method='POST'>";
    echo "<textarea name='subject' rows='1' cols='50'></textarea><br><br>";
    echo "Teksten til mailen:<br>";
    echo "<textarea name='tekst' rows='10' cols='50'></textarea><br><br>";
    echo "<input type='submit' value='send mail' name='send'></form>";
    }
}


hvor sendPost henviser til en metode hvor jeg sætter mailen op og sender den.  $tsend er status på om mailen er sendt.

Jeg har også prøvet at lade den køre løkken igennem 100 gange, men det hjælper ikke.
Er der nogen der har en ide?
Avatar billede jakobdo Ekspert
08. november 2007 - 18:20 #1
Prøv at smid flush(); efter hver gang du kalder din composeMail();
Avatar billede zkov82 Nybegynder
08. november 2007 - 18:52 #2
ComposeMail bliver kun kaldt en gang - men jeg kalder sendPost(..) 100+ gange.
Jeg har prøvet at placere flush() nederst i while-løkken, men det hjælper heller ikke.

Hvis jeg prøver at køre løkken uden at kalde sendPost() altså den del der køre mail(..),  så virker det fint, altså lige bortset fra at jeg ikke får sendt en eneste mail.
Avatar billede jakobdo Ekspert
08. november 2007 - 19:15 #3
prøv at smid flush() efter $i++;
Avatar billede zkov82 Nybegynder
08. november 2007 - 21:22 #4
Har jeg prøvet - det giver det samme resultat.
Spørgsmålet er om det er serveren der ikke kan holde til at jeg opretter så mange forbindelser på meget kort tid?
Avatar billede leif Seniormester
08. november 2007 - 22:21 #5
Kan anbefale dig at overveje at bruge SMTP connection i stedet for mail() (Jeg formoder du bruger mail kommandoen)
Avatar billede zkov82 Nybegynder
08. november 2007 - 22:34 #6
OK...det lyder da spændende.
Er det embedded i php, eller skal der installeres mere?
Avatar billede leif Seniormester
08. november 2007 - 23:00 #7
Med mindre at din webhost har blokket for det.

Et godt bud er at kigge på http://phpmailer.sourceforge.net/ som er en færdig class med mulighed for enten SMTP eller mail()
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