Avatar billede m_bold Praktikant
27. december 2008 - 18:18 Der er 8 kommentarer og
1 løsning

max antal modtagere i PHPs mail-funktion

Hejsa.

Er der et max på, hvor mange modtagere, man kan tilføje til Bcc i PHPs mail() funktion?
- og hvordan løser man problemstillingen, hvis man gerne vil sende til flere?
Avatar billede nemlig Professor
27. december 2008 - 19:42 #1
Jeg ved ikke om der er en øvre grænse. Hvor mange skal du sende til?
Jeg vil foreslå, at du anvender mail() i fx. en while-løkke for hver bcc-adresse.
Hvis du så anvender MySQL kan du vælge at skrive til en tabel hver gang løkken løbes igennem - altså samtidig med at emailen sendes.
På den måde kan du efterfølgende se, om det er lykkedes at sende til alle, og hvis ikke, kan du se, hvem det er lykkedes for eller modsat.

Jeg selv anvender PHPmailer, og når der skal sendes mange emails, er det min erfaring, at SMTP-opsætning er hurtigere.
Avatar billede coderdk Praktikant
27. december 2008 - 22:04 #2
Du kan loope, og så sende til f.eks. 50 ad gangen - Der er en begrænsning, men det er vist den enkelte mailserver der sætter dend
Avatar billede mcardle Nybegynder
28. december 2008 - 00:14 #3
Du kan sætte en timer på. Jeg mener du skulle kunne nøjes med at putte en sleep(15) ind i din for-løkke efter hver 50. mail.

Noget a la:
for($i=1; $i<$antal_mails; $i++){
  if(($i % 50) == 0){
    sleep(15);
  }
  mail(bla, bla, bla...);
}

//mcarlde
Avatar billede m_bold Praktikant
28. december 2008 - 08:32 #4
mcardle --> hvor for bruge sleep()? Kan man ikke bare sende flere mails hurtigt efter hinanden. Mange webhoteller har jo også en timeout, hvor de dræber PHP-scripts, der har kørt i fx 30 sek...
Avatar billede nemlig Professor
28. december 2008 - 10:03 #5
Nogle webhoteller anvender ikke timeout hvis der sendes via smtp. Fx. så anvender one.com ingen timeout, men har til gengæld en limit på 500 stk. i timen (er ikke helt sikker på tallet).

Hvor mange skal du sende?
Avatar billede m_bold Praktikant
28. december 2008 - 11:01 #6
nemlig --> Det er faktisk et One.com webhotel, der anvendes og jeg vil p.t. sende til ca. 180 modtagere, men mail()-funktionen returnerer FALSE, når der kommer ca. 75 modtagere på i Bcc... Dette stemmer dog ikke overens med One.coms limit på 500 stk. pr. ½-time (det har jeg fået oplyst)... Derfor kom jeg til at tænke på, om selve mail()-funktionen havde nogle limits...

Men jeg har nu lavet et loop, hvor jeg deler mailsne op, så der kun er 50 mail-adresser i hver Bcc, og det ser ud til at virke. Jeg bruger ikke sleep(), da jeg ikke kan se, hvad den gør godt for.

Men hvis der er nogen, der kan opklare, hvorfor mail() returnerer FALSE ved ca. 75 adresser i Bcc, så er der stadig points at hente...
Avatar billede nemlig Professor
28. december 2008 - 11:08 #7
Jeg melder pas.
Må jeg lige spørge, hvordan du koder din loop? Er lidt nysgerrig, da jeg har lavet et emailsystem, men kun prøvet af sende omkring 40 stk. emails på én gang.

Har du i øvrigt overvejet at gemme i MySQL hver gang der sendes en email. Det giver en god mulighed for at tjekke, hvem der er sendt til.
Avatar billede m_bold Praktikant
28. december 2008 - 11:15 #8
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$row_rsSite['sitenavn']." <".$row_rsSite['mail'].">\r\n";

$headers .= "Bcc: ";
$i = 1;
while ($row_rsModtagere = mysql_fetch_assoc($rsModtagere)) {
    $headers .= $row_rsModtagere['mail'].",";

    //send kun mails med max 50 modtagere
    if($i % 50 == 0 || $i == $totalRows_rsModtagere){
        $headers = substr($headers, 0, strlen($headers)-1);
       
        $subject = $row_rsNyhedsbrev['titel'];
       
        $text  = $row_rsNyhedsbrev['indhold'];
   
        $status = mail($to, $subject, $text, $headers);
       
        if($status == false){
            echo "There has been a mail error sending to mails.<br>"; 
        }
                       
        //start nyt brev
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        $headers .= "From: ".$row_rsSite['sitenavn']." <".$row_rsSite['mail'].">\r\n";
        $headers .= "Bcc: ";
    }

    $i++;
}

Tja, man kunne jo godt gemme hver gang, men sender og man kunne også bare udskrive dem, som ikke bliver sendt. I det her tilfælde udskriver jeg bare "There has been a mail error sending to mails", så jeg ved, om der overhovedet kommer noget afsted. Der kom nemlig intet afsted ved mere end 75 modtagere.
Avatar billede m_bold Praktikant
06. marts 2012 - 08:41 #9
Lukker
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

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