PDA

Bekijk Volledige Versie : [PHP] nieuwsbrief versturen aan > 15.000 abbo



Jan Smeelen
09/01/05, 19:05
Een klant van me, is verhuisd naar een andere server,
en heeft een nieuwsbrief bestand van > 15.000 abbo's

Klant draait nu op 'n server met postfix, echter gebruikt
de normale mail() functie van PHP, met als gevolg dat de qeue
behoorlijk oploopt.
( Op de vorige server had men geen problemen (?) , echter
weet ik niet of die ook werkte met postfix )

Iemand een tip, om rechtstreeks postfix aan te sturen,
ik verwacht namelijk, dat dat behoorlijk wint aan snelheid,
of mogelijk een andere tip om nieuwbrieven te versturen
aan zulk groot aantal abbo's ?

Even voor de duidelijkheid : het gaat hier niet over het versturen van SPAM
!!

Iedereen heeft zich keurig netjes ingeschreven, en kan zichzelf
ook uitschrijven, het betreft een klant die al jarenlang bezig is
met een online shop op een nette manier !

Bedankt voor reply !
Jan.

Rene Pijlman
09/01/05, 19:55
Jan Smeelen:
>Een klant van me, is verhuisd naar een andere server,
>en heeft een nieuwsbrief bestand van > 15.000 abbo's
>
>Klant draait nu op 'n server met postfix

Ik gebruik ook postfix, met rond de 30.000 abonnees.

>echter gebruikt de normale mail() functie van PHP

Ik gebruik de normale mail functie van Python. Maar dan wel 30.000 keer
sendmail op 1 server object, zodat er maar 1 postfix proces draait om die
mailtjes in ontvangst te nemen.

>met als gevolg dat de qeue behoorlijk oploopt.

Ja ach, daar is ie voor :-)

>( Op de vorige server had men geen problemen (?)

Welke problemen heeft men dan nu?

>Iemand een tip, om rechtstreeks postfix aan te sturen,
>ik verwacht namelijk, dat dat behoorlijk wint aan snelheid,
>of mogelijk een andere tip om nieuwbrieven te versturen
>aan zulk groot aantal abbo's ?

Dingen die veel invloed hebben op de performance zijn bijvoorbeeld:

1. Het aantal niet-meer-werkende mail adressen. Is er bounce handling?

2. Mailtjes individueel of batch-gewijs versturen (1 mail aan 100 abonnees
op hetzelfde domein). De meeste mailing list software doet dat voor je,
maar het is alleen zinnig als de mailtjes niet gepersonaliseerd zijn.

Verder zou je naar de Postfix- en de Unix/Linux-configuratie moeten
kijken.

Het draait bij mij ook niet zo snel als ik zou willen. Ik heb de indruk
dat er teveel disk I/O is, misschien omdat alles in de mail queue naar
disk geschreven wordt en het op een journalling ext3 file system draait.
De kjournald heeft het in ieder geval erg druk tijdens het verzenden van
de nieuwsbrief. Moet ik nog eens naar kijken.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

Jan Smeelen
10/01/05, 04:25
"Rene Pijlman" <reply.in.the.newsgroup@my.address.is.invalid> schreef in
bericht news:egu2u0900ilaokhh82sa9jm21khq5j1riv@4ax.com...
> Jan Smeelen:
>>Een klant van me, is verhuisd naar een andere server,
>>en heeft een nieuwsbrief bestand van > 15.000 abbo's

> gebruikt normale mail() functie van PHP met postfix, met rond de 30.000
> abonnees.
>
>
> Ik gebruik de normale mail functie van Python. Maar dan wel 30.000 keer
> sendmail op 1 server object, zodat er maar 1 postfix proces draait om die
> mailtjes in ontvangst te nemen.
>
>>( Op de vorige server had men geen problemen (?)
>
> Welke problemen heeft men dan nu?

Behoorlijke vertraging in het versturen van andere mails die achteraan
in de qeue terechtkomen... ;o)

Ik vraag me af, of deze functie
function SendEmail($to,$asunto,$html,$from) {
$fd = popen("/usr/sbin/sendmail -t", "w");
fputs($fd, "Content-type: text/html\r\n");
fputs($fd, "To: $to\r\n");
fputs($fd, "From: TRYKE <" . $from . ">\r\n");
fputs($fd, "Subject: $asunto\r\n");
fputs($fd, "X-Mailer: PHP3\r\n\r\n");
fputs($fd, $html);
pclose($fd);
}


van www.php.net zorgt
voor snelheid winst, omdat postfix dan rechtstreeks wordt
aangestuurd ???

> Dingen die veel invloed hebben op de performance zijn bijvoorbeeld:
>
> 1. Het aantal niet-meer-werkende mail adressen. Is er bounce handling?

Nee dus.

> 2. Mailtjes individueel of batch-gewijs versturen (1 mail aan 100 abonnees
> op hetzelfde domein). De meeste mailing list software doet dat voor je,
> maar het is alleen zinnig als de mailtjes niet gepersonaliseerd zijn.

Hé, begrijpt ik het goed, dat als je sorteert op de @domeinnaam.nl
de mail sneller afgeleverd wordt ?
Zou mooi meegenomen zijn, en met weinig werk te realiseren ! :o)

Bedankt voor je reply !

Jan.

Rene Pijlman
10/01/05, 10:25
Jan Smeelen:
>Behoorlijke vertraging in het versturen van andere mails die achteraan
>in de qeue terechtkomen... ;o)

Ja leuk, maar waar hebben we het dan over? Hoeveel staan er in de queue?
Waarom staan ze in de queue (queue status en foutmelding)? Hoelang duurt
het?

>Ik vraag me af, of deze functie
[...]
> van www.php.net zorgt
>voor snelheid winst, omdat postfix dan rechtstreeks wordt
>aangestuurd ???

Je zoekt het kennelijk in PHP, maar het lijkt me onwaarschijnlijk dat de
performance van mailbezorging daarmee te maken heeft.

>> Dingen die veel invloed hebben op de performance zijn bijvoorbeeld:
>>
>> 1. Het aantal niet-meer-werkende mail adressen. Is er bounce handling?
>
>Nee dus.

Toen het bij mij onuitstaanbaar traag werd bleek dat te maken te hebben
met bestandsvervuiling, waardoor bijna 20% van de mailtjes bouncete. De
bounce handling van mijn mailing list server bleek een
schaalbaarheidsprobleem te hebben. In dat soort dingen moet je het zoeken.

>> 2. Mailtjes individueel of batch-gewijs versturen (1 mail aan 100 abonnees
>> op hetzelfde domein). De meeste mailing list software doet dat voor je,
>> maar het is alleen zinnig als de mailtjes niet gepersonaliseerd zijn.
>
>Hé, begrijpt ik het goed, dat als je sorteert op de @domeinnaam.nl
>de mail sneller afgeleverd wordt ?

Nee. Je moet de mailtjes per batch aan postfix aanbieden. Dus: 1 mailtje
aan meerdere ontvangers.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

Daniel Tryba
10/01/05, 12:05
Jan Smeelen <ivalid@invalid.invalid> wrote:
> Ik vraag me af, of deze functie
> function SendEmail($to,$asunto,$html,$from) {
> $fd = popen("/usr/sbin/sendmail -t", "w");
> fputs($fd, "Content-type: text/html\r\n");
> fputs($fd, "To: $to\r\n");
> fputs($fd, "From: TRYKE <" . $from . ">\r\n");
> fputs($fd, "Subject: $asunto\r\n");
> fputs($fd, "X-Mailer: PHP3\r\n\r\n");
> fputs($fd, $html);
> pclose($fd);
> }
>
> van www.php.net zorgt
> voor snelheid winst, omdat postfix dan rechtstreeks wordt
> aangestuurd ???

Zie ./ext/standard/mail.c van de php source, in essentie staat daar
precies het zelfde (tenzij het hier om een windows machine gaat):

sendmail = popen(sendmail_cmd, "w");
fprintf(sendmail, "To: %s\n", to);
fprintf(sendmail, "Subject: %s\n", subject);
if (headers != NULL)
{
fprintf(sendmail, "%s\n", headers);
}
fprintf(sendmail, "\n%s\n", message);
ret = pclose(sendmail);

Het "probleem" zit dus niet in het in de que plaatsen, maar in de
afhandeling van deze que. Wat je bv zou kunnen doen is een andere
mailserver gebruiken om te versturen (stel dat je locale sendmail een
smarthost gebruikt zou je zelf direct met die smarthost kunnen
babbelen).

Jan Smeelen
10/01/05, 14:35
"Rene Pijlman" <reply.in.the.newsgroup@my.address.is.invalid> schreef in
bericht news:nsh4u0pahuk2cldiejouqsuf7b7s00cimd@4ax.com...
> Jan Smeelen:
>>Behoorlijke vertraging in het versturen van andere mails die achteraan
>>in de qeue terechtkomen... ;o)
>
> Ja leuk, maar waar hebben we het dan over? Hoeveel staan er in de queue?
> Waarom staan ze in de queue (queue status en foutmelding)? Hoelang duurt
> het?

Probleem is gevonden en opgelost door de systeembeheerder :o)

Wat was het geval ?

Alle uitgaande mailtjes gingen allemaal door de ClamAV en SpamAssasin
scanners wat voor de nodig vertraging zorgde.....

Bedankt voor het meedenken !

Jan.