Avatar billede fixbabe Nybegynder
28. november 2006 - 22:57 Der er 18 kommentarer og
2 løsninger

Maillist timeout

Jeg har dette maillist script

if($action == "send") {

        $besked = stripslashes($_POST['besked']);
       
        $indhold = '<b>her kommer html indhold</b>';

        $subject = 'maillist';

        $headers = "From: mailbot@domæne.dk\r\n" .
      'X-Mailer: PHP/' . phpversion() . "\r\n" .
      "MIME-Version: 1.0\r\n" .
      "Content-Type: text/html; charset=iso-8859-1\r\n" .
      "Content-Transfer-Encoding: 8bit\r\n\r\n";     

        $res = mysql_query("select * FROM maillist order by id desc");
        while ($row = mysql_fetch_array($res)) {
       
        $email = $row[email];
        mail("$email", $subject, $indhold, $headers);       
        echo "Sendt til $email";
}

Problemet er at jeg har +500 brugere der modtager dette og jeg får timeout kort efter jeg trykker send. Hvordan løser jeg dette problem? er der en måde at tage 10 eller 30 personer afgangen? eller lign? Håber meget på en løsning som virker da dette er et stort problem.
Avatar billede michaeltryl Seniormester
28. november 2006 - 23:00 #1
vil tro at dette spørgsmål kan hjælpe dig på vej
http://www.eksperten.dk/spm/746511
Avatar billede mccookie Seniormester
28. november 2006 - 23:03 #2
Du skal lige indføre et flush(); og så skulle det virke, har selv afsendt over 2000 mail med ovenstående ;)
Avatar billede fixbabe Nybegynder
29. november 2006 - 16:33 #3
flush() ? forklaring?
Avatar billede mccookie Seniormester
29. november 2006 - 17:10 #4
Se her:

http://dk.php.net/manual/da/function.flush.php

Den tømmer din buffer...... så mailene kommer afsted
Avatar billede fixbabe Nybegynder
29. november 2006 - 21:34 #5
michaeltryl det eneste der ikke lige giver meget mening i det script er førlgende:

if ( mail($email,$emne,$nytekst,$header) )
{
Avatar billede michaeltryl Seniormester
29. november 2006 - 21:55 #6
hvis mailen bliver sendt skal den udføre det der er mellem { og }
Avatar billede fixbabe Nybegynder
29. november 2006 - 22:06 #7
alene med en kopi af dit oprindelige script får jeg timeout
Avatar billede michaeltryl Seniormester
29. november 2006 - 22:11 #8
okay jeg har fået scriptet herinde, af en som bruger det til at sende til 1500 brugere uden problemer og jeg har heller ikke problemer med det. Men fordelen er jo at der bliver registreret i databsen hvem der er sendt til, så den samme bruger kun får mailen én gang, men kan også godt følge dig i, at det er træls, at skulle genstarte scriptet flere gange før alle mails er sendt.
Jeg har ikke en løsning på hvad problemet kan være. ved du om din host har sat et max antal mails der kan sendes inden for en given tid?
Avatar billede fixbabe Nybegynder
29. november 2006 - 22:12 #9
aner det ikke, men kan høre dem ad. Det er suckttown der er min udbyder (surftown)
Avatar billede fixbabe Nybegynder
29. november 2006 - 22:15 #10
<?php
$res = mysql_query("SELECT email FROM users WHERE sendt ='nej'");
while ($row = mysql_fetch_assoc($res)){

$email = $row[email];
$id = $row[id];

      flush();
      sleep(1);
      flush();
      echo "Email til $email blev sendt";
     
}
?>

Dette får også time out selv om det ikke sender.
Avatar billede michaeltryl Seniormester
29. november 2006 - 22:30 #11
ja det lyder jo mærkeligt.
jeg er blevet lidt nysgerrig efter hvor godt mit script virker. Derfor har jeg opsat en lille test side. den er her hvis du vil mere med til at teste
http://www.magiske-michael.dk/prove/mail-test.php
men prøv at tage kontakt til surftown. Det eneste jeg kender til dem er, at jeg har hørt om flere der har haft problemer ved dem.
Avatar billede fixbabe Nybegynder
29. november 2006 - 22:37 #12
gider du paste en kopi af dit script som du bruger nu?
Avatar billede fixbabe Nybegynder
29. november 2006 - 22:45 #13
Jeg har lige bixet noget sammen, det er primitivt men det virker som det skal.

<?php

    $indhold = 'indhold i emailen';

    $subject = 'nyhedsbrev';

    $headers = "From: mailbot@domæne.dk\r\n" .
      'X-Mailer: PHP/' . phpversion() . "\r\n" .
      "MIME-Version: 1.0\r\n" .
      "Content-Type: text/html; charset=iso-8859-1\r\n" .
      "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
     
    include "../inc/connect.php";

    $idx = $_GET[idx];

    $res = mysql_query("SELECT * FROM databasen WHERE id > '$idx' limit 1");
    while ($row = mysql_fetch_assoc($res)){

    $email = $row[email];
    $id = $row[id];
   
    mail("$email", $subject, $indhold, $headers);
    echo "Email til $email blev sendt";
   
    flush();
    sleep(3);
    flush();
    print('<script type="text/javascript">window.location="?idx='.$id.'"</script>');
}
?>
Avatar billede michaeltryl Seniormester
29. november 2006 - 22:45 #14
jep det er her

<?
$mail = $_GET[mail];
$mailen = mysql_query("SELECT * FROM mails WHERE mailid ='$mail'") or die(mysql_error());
while ( $a = mysql_fetch_array($mailen))
{
$emne = $a[emne];
$besked = $a[mail];
$nybesked = nl2br("$besked");
}
$hent = mysql_query("SELECT email FROM brugere WHERE sendt ='nej'"); /** henter e-mails fra tabel **/
while ( $row = mysql_fetch_assoc ( $hent ) )  /** udskriver dem alle **/
{
$email = $row[email];



    $header  = "MIME-Version: 1.0" . "\r\n";
    $header .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";

if ( mail($email,$emne,"Hej $email<br><br>$nybesked",$header) )
{
      /** indsæt til mysql, fordi nu er den true, og ER sendt **/
mysql_query("UPDATE brugere SET sendt = 'ja' WHERE email='$email' AND liste='$liste'") or die(mysql_error());

      flush();
      sleep(1); /** venter 1 sekundt, før den går videre **/
      flush();
      echo "$email blev sendt <strong>korrekt</strong><br />\r\n";
} else {
      /** indsæt til mysql, fordi nu er den false, og IKKE sendt **/
mysql_query("UPDATE brugere SET sendt = 'nej' WHERE email='$email' AND liste='$liste'") or die(mysql_error());
      flush();
      sleep(1); /** venter 1 sekundt, før den går videre **/
      flush();
      echo "$email blev sendt <strong>ukorrekt</strong><br />\r\n";
}}
echo"<h2>Er alle mails sendt korrekt</h2>";
echo"<h3><a href='Link til en side som sætter alle sendt felter til nej'>Ja</a> | ";
echo"<a href='link til samme side så scriptet køres igen og sender til de personer som blev sendt ukorrekt'>Nej</a>";
echo"</h3>";
?>
Avatar billede fixbabe Nybegynder
29. november 2006 - 23:00 #15
Status: har sendt +250 med mit script :)
Avatar billede michaeltryl Seniormester
29. november 2006 - 23:10 #16
så virker det da meget fornuftigt og det vigtigste er at det virker
Avatar billede fixbabe Nybegynder
29. november 2006 - 23:39 #17
Sådan 671 emails sendt med 2 seks mellemrum :) smid et svar så får du de 60 points for at hjælpe
Avatar billede michaeltryl Seniormester
29. november 2006 - 23:53 #18
tag halvdelen eller det hele selv du fandt jo selv en løsning
Avatar billede fixbabe Nybegynder
30. november 2006 - 17:43 #19
Okay
Avatar billede michaeltryl Seniormester
30. november 2006 - 18:34 #20
tak for point
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

IT-JOB

Netcompany A/S

Network Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Unified Communications specialist til IT-Operations i Cyberdivisionen

JP/Politikens Hus

Digital Workplace Supporter

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET