[PHP] 10.000 leden mailen

Pagina: 1
Acties:
  • 189 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Hallo iedereen,

Ik wil iedereen een goede kerst en alvast een gezond en gelukkig 2007 wensen d.m.v. een e-mail. Ik heb 10.000 leden in de database staan en ik vroeg me nu af wat de beste manier is, om al deze leden te mailen.

Ik heb twee opties in gedachten:

1. Een while loop maken die keer op keer (10.000 keer dus) de mail() functie aanroept.
2. Eerst alle e-mail adressen uitlezen, seperaten d.m.v. een komma en vervolgens 1x de mail functie aanroepen en al deze mensen mailen via CC.

De tweede optie lijkt me het beste, maar ik ben bang dat hij dan in de spam box van iedereen terecht komt als ik iedereen 'bcc' en het 'to' adres members@website.nl doe.

Iemand ervaring mee en suggesties wat het beste is?

Alvast bedankt voor evt. replies :)

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Als je 10.000 keer mail() aanroept ben je nogal inefficiënt bezig. :) Je kan beter even zoeken bij Google naar een SMTP-class oid om direct tegen een SMTP-server te gaan praten en zo 1 voor 1 die 10.000 mailtjes te versturen.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Upsal
  • Registratie: Mei 2005
  • Laatst online: 27-08-2024
Heb hetzelfde probleem gehad. Dit heb ik opgelost door allemaal losse mails te sturen, maar niet in één keer. In mijn geval heb ik om de 2 min 100 mails verstuurd.

Tip; zorg dat je voldoende e-mail headers defineerd, en het verstuurd vanuit een 'erkende' mailserver, zodat ze bij hotmail abbonees ook netjes in Inbox komen.

[ Voor 33% gewijzigd door Upsal op 23-12-2006 12:53 ]


Acties:
  • 0 Henk 'm!

  • Nielsvr
  • Registratie: Maart 2004
  • Laatst online: 27-08 14:55
CC is geen goed plan, dan zou ik BCC doen. Heb je je hoster al nagevraagd of die het er uberhaubt mee eens is dat je 10.000 mails de deur uit gaat doen? Waarschijnelijk heeft hij liever dat je dit in fases doet, dus 100 per minuut ofzo ofzo, zodat andere diensten er niet te veel last van gaan hebben.

Het is bij zo'n grootschalige mailing ook belangrijk om al je headers op orde te hebben, voordat je onbedoeld je server in blacklijst krijgt.. Dus zorg er eerst voor dat je advies inwint van je hoster, voordat je verder gaat.

Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    $aantal_leden=mysql_query("select * from aanmelden");
    $aantal_leden=mysql_num_rows($aantal_leden);

    $lid_query=mysql_query("select * from aanmelden");

    while($lid=mysql_fetch_assoc($lid_query)) {
    $naam=$lid['naam'];
    $email=$lid['email'];
        error_reporting(E_ALL);

        $mailheaders = "From: xxx.nl <info@xxx.nl>\n";
        $mailheaders .= "X-Sender: <info@xxx.nl>\n";
        $mailheaders .= "Return-Path: <info@xxx.nl>\n";
     
        $body = "Beste {$naam},\n\n";
     
        $body .= "Hierbij ontvangt u de nieuwsbrief van xxx.nl. Bezoek onderstaand adres om de nieuwsbrief te lezen:\n";
        $body .= "http://www.xxx.com/nieuwsbrief.htm\n\n";
        $body .= "Met vriendelijke groet,\n\n";
        $body .= "xxx.nl\n";
        $body .= "http://www.xxx.nl/\n";
     
        $sendto = $email;
    
        $subject = "xxx.nl Nieuwsbrief";
     
        if (mail($sendto, $subject, $body, $mailheaders)) {
            echo"<BR>Nieuwsbrief verzonden naar $email";
        }
        else {
            echo"<BR>Nieuwsbrief <b>niet</b> verzonden naar $email";
        }
    }


Deze gebruik ik voor meerdere nieuwsbrieven, en werkt perfect.

Een while loop 10.000 keer lijkt me wel mogelijk, misschien dat je browser dan wel even vast loopt.

10.000 mensen via CC lijkt me eigenlijk niet slim. Dan ziet iedereen andermans e-mailadres, en krijg je gedoe met spam etc. Ook heb ik gelezen dat CC max. ???-aantal e-mailadressen mag bevatten, hetzelfde geldt voor BCC volgens mij.

Acties:
  • 0 Henk 'm!

  • soulrider
  • Registratie: April 2005
  • Laatst online: 27-11-2017
als je 't domein maskeert in de brief, doe dat dan ook effe in de headers ;)

Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 20:37
Ik zou (zo als al gezegd) zeker een email transfer class gebruiken, die zorgen er wel voor dat je headers er iets fatsoenlijker uit zien (je mist nogal wat te vermelden in je headers volgens mij). Zelf gebruik ik altijd http://phpmailer.sourceforge.net/

[ Voor 4% gewijzigd door robbert op 23-12-2006 13:04 ]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Hartstikke bedankt voor alle snelle replies. Zal even de SF mailclass proberen.:)

Ik laat jullie zo nog wel even weten hoe het is afgelopen! Tot zover bedankt!

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Als je alle mails in één keer wilt versturen, moet je oppassen met PHP's max_execution_time. Het zou zonde zijn als hij ergens stopt en je niet precies weet waar.
Afgezien van het technische aspect vraag ik me af of die 10.000 mensen wel zitten te wachten op de beste kerstwensen van een bedrijf waar ze ooit hun e-mailadres hebben achtergelaten. Het is gewoon verkapte spam.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Een while loop 10.000 keer lijkt me wel mogelijk, misschien dat je browser dan wel even vast loopt.
Dat soort dingen moet je ook niet vanuit een browser aanroepen...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
GlowMouse schreef op zaterdag 23 december 2006 @ 13:29:[..]
Afgezien van het technische aspect vraag ik me af of die 10.000 mensen wel zitten te wachten op de beste kerstwensen van een bedrijf waar ze ooit hun e-mailadres hebben achtergelaten. Het is gewoon verkapte spam.
Het is geen bedrijf en het zijn leden als je goed gelezen had.

Ik ga het idd niet via een browser aanvragen maar via commandline :)

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Toevallig vorige week nog 10.000 mails verstuurt. In 2 minuut 56 waren ze erdoorheen.

mail() gebruiken is inderdaad verschrikkelijk inëfficient. Die opent een verbinding naar de SMTP, doet de handshake, verstuur de mail, en sluit hem weer, keer op keer op keer.
Met fsockopen kun je zelf eenvoudig verbinden naar de SMTP serverm 1x handshaken, en al je mails erdoorheen pompen. Ik meen dat op php.net zelfs een stuk code staat in de user-notes op http://www.php.net/fsockopen

Acties:
  • 0 Henk 'm!

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

Volgens mij was hier het probleem als je alles als BCC stuurde dat de header te groot wordt, en de mail totaal werd gebounced.

Wat ik heb gedaan, is eerst sorteren op basis van domein, en vervolgens versturen in groepjes en net onder de maximale headersize blijven.

Steun Elkaar, Kopieer Nederlands Waar!


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Gister nog als volgt gedaan naar 9000 adressen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$text = "This is a HTML e-mail.";

            $mail = new htmlMimeMail();
            $mail->setHTMLCharset('utf-8');
            $mail->setHeadCharset('utf-8');

            $mail->addHTMLImage($mail->getFile(BASE_DIR.'mailings/'.$_POST['newsletter'].'/06311-_k.jpg'), '06311-_k.jpg', 'image/jpeg');
            $mail->addHTMLImage($mail->getFile(BASE_DIR.'mailings/'.$_POST['newsletter'].'/bottom-rechts.jpg'), 'bottom-rechts.jpg', 'image/jpeg');

            $mail->setHTML($body);
            $mail->setSMTPParams('smtp.xs4all.nl', 25, 'MAILER', true,'login','password');
            
            $mail->setReturnPath(MAIL_REPLY_TO_ADRESS);
            $mail->setFrom(MAIL_FROM_ADRESS);
            $mail->setSubject($_POST['title']);
            $mail->setHeader('X-Mailer', 'HTML Mime mail class (http://www.phpguru.org)');

            $mailerrors = array();
            $mailsent = array();

            $addresses[] = "test@verrekdatiskekkieqsdsda.nl";
            $addresses[] = "test@verrasdasdsadasdsadasdsad.weee";

            if(is_array($addresses) && count($addresses) > 0) {
                foreach($addresses as $mailaddress) {
                    $result = $mail->send( array($mailaddress) , 'smtp');
                    if(isset($mail->errors) ) {
                        $mailerrors[$mailaddress] = $mail->errors;
                    }
                    else {
                        $mailsent[] = $mailaddress;
                    }
                }
            }
            else {
                echo "Er zijn geen geldige mailadressen in het bestand gevonden.";
            }


Met de mail class van: http://www.phpguru.org

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
He Brakkie, bedankt voor je reply..

Ik gebruik hem nu ook, even getest op mijn eigen e-mail adres maar krijg de volgende error:

code:
1
array(1) { ["****@gmail.com"]=>  array(2) { [0]=>  string(42) ": Relay access denied" [1]=>  string(26) "Error: no valid recipients" } }


Heb ff gegoogled en het lijkt een probleem te zijn met de SMTP server. Ik kan er echter wel heen verbinden. Heb jij dit probleem ook gehad? Hoe kan ik kenbaar maken dat ik 'ik' ben en dat ik e-mail wil versturen aan de server.

Deze code gebruik ik:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$text = "Test";
$addresses[] = "mijn@email.nl";

$mail = new htmlMimeMail();
            $mail->setHTMLCharset('utf-8');
            $mail->setHeadCharset('utf-8');

            //$mail->addHTMLImage($mail->getFile(BASE_DIR.'mailings/'.$_POST['newsletter'].'/06311-_k.jpg'), '06311-_k.jpg', 'image/jpeg');
            //$mail->addHTMLImage($mail->getFile(BASE_DIR.'mailings/'.$_POST['newsletter'].'/bottom-rechts.jpg'), 'bottom-rechts.jpg', 'image/jpeg');

            $mail->setHTML($body);
            $mail->setSMTPParams('smtp.domeinnaam.nl', 25, 'MAILER');
            
            $mail->setReturnPath("info@domeinnaam.nl");
            $mail->setFrom("info@domeinnaam.nl");
            $mail->setSubject("Domeinnaam wenst je een fijne kerst en een gelukkig 2007!");
            $mail->setHeader('X-Mailer', 'HTML Mime mail class (http://www.phpguru.org)');

            $mailerrors = array();
            $mailsent = array();

            if(is_array($addresses) && count($addresses) > 0) {
                foreach($addresses as $mailaddress) {
                    $result = $mail->send( array($mailaddress) , 'smtp');
                    if(isset($mail->errors) ) {
                        $mailerrors[$mailaddress] = $mail->errors;
                    }
                    else {
                        $mailsent[] = $mailaddress;
                    }
                }
            }
            else {
                echo "Er zijn geen geldige mailadressen in het bestand gevonden.";
            }
            
            echo "<pre><code>" . var_dump($mailsent) . "</code></pre>";
            
            echo "<pre><code>" . var_dump($mailerrors) . "</code></pre>";


Kon niks vinden op phpguru.org. :)

[ Voor 82% gewijzigd door Zenda op 23-12-2006 14:45 ]

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

Verwijderd

't MAIL_FROM_ADDRESS moet natuurlijk wel een geldig mail adres zijn bij de SMTP server waar je 't naartoe stuurt. Geen enkele weldenkende provider staat relaying van niet-eigen mail adressen toe, binnen de kortste keren ben je dan een spam engine...

Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Dat heb ik toch? Overal waar info@domein.nl staat heb ik mijn eigen e-mail adres die op die server staat :).

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Heb het al.. Was een verkeerde SMTP server aan het gebruiken :D

Tnx voor iedereen's hulp! Fijne kerst & uiteinde allemaal..

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

Verwijderd

Dan staat je SMTP server alleen maar het afleveren naar mail adressen toe die 'ie kent. Stond ook vrij duidelijk in de foutmelding die je kreeg...

Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
't was al gelukt spuit 11..

Tnx voor de tip Brakkie. Geweldige class.. Ondertussen alle 10.000 leden gemaild!

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:10

Robtimus

me Robtimus no like you

Verwijderd schreef op zaterdag 23 december 2006 @ 12:55:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    $aantal_leden=mysql_query("select * from aanmelden");
    $aantal_leden=mysql_num_rows($aantal_leden);

    $lid_query=mysql_query("select * from aanmelden");

    while($lid=mysql_fetch_assoc($lid_query)) {
    $naam=$lid['naam'];
    $email=$lid['email'];
        error_reporting(E_ALL);

        $mailheaders = "From: Fantom.nl <info@fantom.nl>\n";
        $mailheaders .= "X-Sender: <info@fantom.nl>\n";
        $mailheaders .= "Return-Path: <info@fantom.nl>\n";
     
        $body = "Beste {$naam},\n\n";
     
        $body .= "Hierbij ontvangt u de nieuwsbrief van xxx.nl. Bezoek onderstaand adres om de nieuwsbrief te lezen:\n";
        $body .= "http://www.xxx.com/nieuwsbrief.htm\n\n";
        $body .= "Met vriendelijke groet,\n\n";
        $body .= "xxx.nl\n";
        $body .= "http://www.xxx.nl/\n";
     
        $sendto = $email;
    
        $subject = "xxx.nl Nieuwsbrief";
     
        if (mail($sendto, $subject, $body, $mailheaders)) {
            echo"<BR>Nieuwsbrief verzonden naar $email";
        }
        else {
            echo"<BR>Nieuwsbrief <b>niet</b> verzonden naar $email";
        }
    }


Deze gebruik ik voor meerdere nieuwsbrieven, en werkt perfect.
Beetje offtopic, maar als ik jou was zou ik die eerste twee regels verwijderen. Je voert een query uit, haalt daaruit het aantal records, doet daar niets mee en voert vervolgens dezelfde query opnieuw uit.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Verwijderd

Zenda schreef op zaterdag 23 december 2006 @ 15:22:
Tnx voor de tip Brakkie. Geweldige class.. Ondertussen alle 10.000 leden gemaild!
En nu te vaak gaan doen, want daarmee komt je domein/ip wel eens op een blacklist terecht...
(bedrijven besteden om die reden mailing lists maar al te graag uit)

Acties:
  • 0 Henk 'm!

  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 18-09 16:14
GlowMouse schreef op zaterdag 23 december 2006 @ 13:29:
Afgezien van het technische aspect vraag ik me af of die 10.000 mensen wel zitten te wachten op de beste kerstwensen van een bedrijf waar ze ooit hun e-mailadres hebben achtergelaten. Het is gewoon verkapte spam.

offtopic: voordeel: met de feestdagen weet ik weer bij welke sites ik mij heb aangemeld en waar ik mij weer moet afmelden :P :+

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Dit probleem is al vaker ter sprake gekomen. Als je een oplossing wil die gegarandeert werkt (goede performance, geen te hoge serverload), kijk dan eens naar mijn reply van een tijd terug.

Acties:
  • 0 Henk 'm!

Verwijderd

Tja, ik probeerde alleen maar mee te denken en te helpen. Dat jij 2 minuten daarvoor doorhad dat je aan het klooien was geweest is mooi, maar doet niets af aan mijn reacties.

Maar als je in de toekomst niet wilt dat ik meedenk moet je 't maar zeggen, hoor. Ik heb er geen moeite mee om Zenda te negeren als ik die naam op GoT tegenkom...
Pagina: 1