/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Udsendelse af nyhedsbrev med mail()
Fra : Bo Kamp Dudek


Dato : 19-03-04 21:45

Hejsa

Jeg har en script, som udsender nyhedsbrev til en liste. Der er pt.
300 tilmeldte. Jeg sender en mail til mig selv og looper igennem alle
modtagere, som bliver tilføjet som BCC en efter en i en header.

Jeg er efterhånden ret usikker på, om folk overhovedet modtager mine
mails, da jeg ikke får feedback.

Mit spørgsmål er nu, når fremgangsmåden er som beskrevet ovenfor, hvad
sker der så, når der er en ugyldig emailadresse ind imellem? Kommer
det an på mailserveren, modtager de resterende alligevel deres mails,
eller hvad sker der i grunden?

Mvh
Bo Dudek
www.bodudek.dk


 
 
Lars Olesen (20-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 20-03-04 10:01

Bo Kamp Dudek wrote:

> Jeg har en script, som udsender nyhedsbrev til en liste. Der er pt.
> 300 tilmeldte. Jeg sender en mail til mig selv og looper igennem alle
> modtagere, som bliver tilføjet som BCC en efter en i en header.

Når du alligevel laver et loop, så var det da smaretere at sende
nyhedsbrevet til de enkelte med deres adresse. Hvis du sender
nyhedsbrevet til dig selv og kun dem i bcc, så tror jeg der er en
rimelig sandsynlighed for, at du kan blive detekteret som spam.

Så når du laver loopet, så sæt modtagerne i to!

> Mit spørgsmål er nu, når fremgangsmåden er som beskrevet ovenfor, hvad
> sker der så, når der er en ugyldig emailadresse ind imellem?

Ved bare at sende 300 særskilte e-mails, kan du i hvert fald relativt
let lave noget errorhandling, der gør, at scriptet kører videre.

Altså noget i den retning her:

<?php

// databasekald

while (der er noget i databasen)
{
   if (mail(de rette parametre for mail)) // modtager sættes til to
   {
      echo 'mailen blev sendt';
   }
   else
   {
      echo 'mailen blev ikke sendt';
   }
}

?>

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

Bo Kamp Dudek (20-03-2004)
Kommentar
Fra : Bo Kamp Dudek


Dato : 20-03-04 11:11

>> Jeg har en script, som udsender nyhedsbrev til en liste. Der er pt.
>> 300 tilmeldte. Jeg sender en mail til mig selv og looper igennem alle
>> modtagere, som bliver tilføjet som BCC en efter en i en header.
>
>Når du alligevel laver et loop, så var det da smaretere at sende
>nyhedsbrevet til de enkelte med deres adresse. Hvis du sender
>nyhedsbrevet til dig selv og kun dem i bcc, så tror jeg der er en
>rimelig sandsynlighed for, at du kan blive detekteret som spam.

men er der ikke sandsynlighed for, at mailserveren kan nægte, hvis der
bliver forsøgt at sende nogle hundrede mails på een gang? og hvad så,
når der er 1000 tilmeldinger (og dermed modtagere) istedet for 200?

Mvh
Bo Dudek
www.bodudek.dk


Lars Olesen (20-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 20-03-04 11:33

Bo Kamp Dudek wrote:

> men er der ikke sandsynlighed for, at mailserveren kan nægte, hvis der
> bliver forsøgt at sende nogle hundrede mails på een gang? og hvad så,
> når der er 1000 tilmeldinger (og dermed modtagere) istedet for 200?

Næ, for du forsøger jo ikke at sende dem på en gang, men sender dem en
efter en (ganske vist hurtigt efter hinanden i en løkke). Jeg har sendt
nyhedsbreve til 1400 ved at bruge PHP's interne mail()-funktion.

Alternativt kan du - hvis udbyderen stiller det til rådighed - bruge
deres smtp-server (du kan finde en klasse til at send e-mail via smtp
hos Zend).

Men altså der skulle ikke være nogen problemer med det andet. Jeg tror
snarere, at du får problemer med at putte 1000 modtagere i bcc, for det
tror jeg ikke den er beregnet til!

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

Jonas Koch Bentzen (20-03-2004)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 20-03-04 12:13

Lars Olesen skrev:
>
> Jeg tror
> snarere, at du får problemer med at putte 1000 modtagere i bcc, for det
> tror jeg ikke den er beregnet til!

Mange SMTP-servere har en begrænsning på, hvor mange modtagere, en enkelt
mail kan have. For Postfix er det f.eks. 50 (mener jeg).

--
- Jonas Koch Bentzen

http://understroem.dk/
http://findhim.com/

Bo Kamp Dudek (21-03-2004)
Kommentar
Fra : Bo Kamp Dudek


Dato : 21-03-04 12:25

[...]

men når jeg forsøger at sende de knap 300 mails en efter en, så får
jeg flg. fejl:

Fatal error: Maximum execution time of 30 seconds exceeded in send.php
on line 64

... og linie 54-64 indeholder

// headers mm. indstilles
$emne="Nyhedsbrev fra Glad og Slank";
$headers = "MIME-Version: 1.0\n";
$headers.= "Content-type: text/html; charset=iso-8859-1\n";
$headers.= "From: Glad og Slank<service@gladogslank.dk>\n";

// modtagerne hentes og der sendes en mail til hver
$query=mysql_query("select * from mailliste order by id asc");
while ($result=mysql_fetch_array($query)){
mail($result["email"], $emne, $tekst, $headers);
}

Der ligger som sagt ikke mere en 300 modtagere i tabellen i databasen,
så jeg er usikker på, hvor den går galt henne.. ehm.. og det er lidt
skidt at blive ved med at teste løs, for det går jo ud over de
stakkels 300 modtagere.

Anyone?

Mvh
Bo Dudek
www.bodudek.dk


Anders Christiansen (21-03-2004)
Kommentar
Fra : Anders Christiansen


Dato : 21-03-04 12:57

Få en hurtigere server

eller del scriptet op i flere dele, hurtigt skematiseret sådan..

if (!$mailcounter)$mailcounter = 0;
hent adresser limit (30, $mail counter)//(er der ikke cirka noget i den
retning limit syntaxen lyder ?)
her kommer sendmail loopet.
$mailcounter +=30;
header: location $phpself?mailcounter =$mailcounter.

så burde du ikke få det problem..

Anders Christiansen

P.S. jeg er complet noob, men det burde da virker..
P.P.S. undskyld for mailen.. den skulle have været her første gang..

"Bo Kamp Dudek" <bo@bodudek.dk> skrev i en meddelelse
news:hkuq505heuh7su1gc6p3chbj9su6a9f3st@4ax.com...
> [...]
>
> men når jeg forsøger at sende de knap 300 mails en efter en, så får
> jeg flg. fejl:
>
> Fatal error: Maximum execution time of 30 seconds exceeded in send.php
> on line 64
>
> .. og linie 54-64 indeholder
>
> // headers mm. indstilles
> $emne="Nyhedsbrev fra Glad og Slank";
> $headers = "MIME-Version: 1.0\n";
> $headers.= "Content-type: text/html; charset=iso-8859-1\n";
> $headers.= "From: Glad og Slank<service@gladogslank.dk>\n";
>
> // modtagerne hentes og der sendes en mail til hver
> $query=mysql_query("select * from mailliste order by id asc");
> while ($result=mysql_fetch_array($query)){
> mail($result["email"], $emne, $tekst, $headers);
> }
>
> Der ligger som sagt ikke mere en 300 modtagere i tabellen i databasen,
> så jeg er usikker på, hvor den går galt henne.. ehm.. og det er lidt
> skidt at blive ved med at teste løs, for det går jo ud over de
> stakkels 300 modtagere.
>
> Anyone?
>
> Mvh
> Bo Dudek
> www.bodudek.dk
>



Anders Christiansen (21-03-2004)
Kommentar
Fra : Anders Christiansen


Dato : 21-03-04 13:47

Kender i det når man får en kop kaffe, så ser man lidt anerledes på tingene.

Husk at lave et stop klods noget i retningen af
før loopet:
$henvisning = $phpself?mailcounter =$mailcounter..

i loopet:
if (!$mailmodtager = (henter data fra database limit $mailcounter, 30))
$henvisning= "sendt.php";
(kan også laves ved mysql_fetch_attay..)
efter loopet:
header: location $henvisning.

Så stopper den når den er færdig og går til sendt.php, som bare skal
fortælle dig at mailsne er sendt..


"Anders Christiansen" <dsl91136@vip.cybercity.dk> skrev i en meddelelse
news:c3jvv5$25oj$1@news.cybercity.dk...
> Få en hurtigere server
>
> eller del scriptet op i flere dele, hurtigt skematiseret sådan..
>
> if (!$mailcounter)$mailcounter = 0;
> hent adresser limit (30, $mail counter)//(er der ikke cirka noget i den
> retning limit syntaxen lyder ?)
> her kommer sendmail loopet.
> $mailcounter +=30;
> header: location $phpself?mailcounter =$mailcounter.
>
> så burde du ikke få det problem..
>
> Anders Christiansen
>
> P.S. jeg er complet noob, men det burde da virker..
> P.P.S. undskyld for mailen.. den skulle have været her første gang..
>
> "Bo Kamp Dudek" <bo@bodudek.dk> skrev i en meddelelse
> news:hkuq505heuh7su1gc6p3chbj9su6a9f3st@4ax.com...
> > [...]
> >
> > men når jeg forsøger at sende de knap 300 mails en efter en, så får
> > jeg flg. fejl:
> >
> > Fatal error: Maximum execution time of 30 seconds exceeded in send.php
> > on line 64
> >
> > .. og linie 54-64 indeholder
> >
> > // headers mm. indstilles
> > $emne="Nyhedsbrev fra Glad og Slank";
> > $headers = "MIME-Version: 1.0\n";
> > $headers.= "Content-type: text/html; charset=iso-8859-1\n";
> > $headers.= "From: Glad og Slank<service@gladogslank.dk>\n";
> >
> > // modtagerne hentes og der sendes en mail til hver
> > $query=mysql_query("select * from mailliste order by id asc");
> > while ($result=mysql_fetch_array($query)){
> > mail($result["email"], $emne, $tekst, $headers);
> > }
> >
> > Der ligger som sagt ikke mere en 300 modtagere i tabellen i databasen,
> > så jeg er usikker på, hvor den går galt henne.. ehm.. og det er lidt
> > skidt at blive ved med at teste løs, for det går jo ud over de
> > stakkels 300 modtagere.
> >
> > Anyone?
> >
> > Mvh
> > Bo Dudek
> > www.bodudek.dk
> >
>
>



Jonas Koch Bentzen (21-03-2004)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 21-03-04 14:37

Anders Christiansen skrev:

> Kender i det når man får en kop kaffe, så ser man lidt anerledes på
> tingene.
>
> Husk at lave et stop klods noget i retningen af
> før loopet:
> $henvisning = $phpself?mailcounter =$mailcounter..

En Location-HTTP-header skal have en fuld URI:
header('Location: http://'.$_SERVER['HTTP_HOST']
$_SERVER['PHP_SELF'].'?mailCounter='.$mailCounter);

> i loopet:

Jeg mener, flere browsere (i hvert fald Mozilla, Mozilla Firefox mm.) har en
(lav) grænse for hvor mange viderestillinger vha. Location, der tillades,
før man kommer til en egentlig side. Om det bliver et problem i det her
tilfælde, skal jeg ikke kunne sige, men det er nok klogt at være opmærksom
på det.

PS. http://usenet.dk/netikette/citatteknik.html

--
- Jonas Koch Bentzen

http://understroem.dk/
http://findhim.com/

Jonas Koch Bentzen (21-03-2004)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 21-03-04 14:38

Jonas Koch Bentzen skrev:
>
> header('Location: http://'.$_SERVER['HTTP_HOST']
> $_SERVER['PHP_SELF']

Der mangler lige et punktum mellem $_SERVER['HTTP_HOST'] og
$_SERVER['PHP_SELF'].

--
- Jonas Koch Bentzen

http://understroem.dk/
http://findhim.com/

Anders Christiansen (21-03-2004)
Kommentar
Fra : Anders Christiansen


Dato : 21-03-04 19:15

det kan vel løses ved hjælp af Java Script.. ikke at jeg er nogen haj, men

<body onLoad:"window.location.href'<?php echo "
http://'.$_SERVER['HTTP_HOST'] "; ?>'";>
</body>

burde kunne gøre det.. ellers kan man vel lave er script der kræver at man
selv klikker hver 3. gang man skal sende mails ud.

Venlig Hilsen

Anders Christiansen

"Jonas Koch Bentzen" <ingen.email@eksempel.dk> skrev i en meddelelse
news:c3k5dl$2c0j$2@news.cybercity.dk...
> Jonas Koch Bentzen skrev:
> >
> > header('Location: http://'.$_SERVER['HTTP_HOST']
> > $_SERVER['PHP_SELF']
>
> Der mangler lige et punktum mellem $_SERVER['HTTP_HOST'] og
> $_SERVER['PHP_SELF'].
>
> --
> - Jonas Koch Bentzen
>
> http://understroem.dk/
> http://findhim.com/



Thomas Lindgaard (22-03-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 22-03-04 00:42

On Sun, 21 Mar 2004 12:25:21 +0100, Bo Kamp Dudek wrote:

> men når jeg forsøger at sende de knap 300 mails en efter en, så får
> jeg flg. fejl:
>
> Fatal error: Maximum execution time of 30 seconds exceeded in send.php
> on line 64

Hejsa

Nu har du godt nok fået indtil flere andre svar... men er løsningen ikke
bare at putte

set_time_limit(0);

ind i toppen af scriptet så det ikke bliver slået ihjel inden det når
at køre færdigt?

Mvh.
/Thomas

Jonas Koch Bentzen (22-03-2004)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 22-03-04 09:43

Thomas Lindgaard skrev:
>
> Nu har du godt nok fået indtil flere andre svar... men er løsningen ikke
> bare at putte
>
> set_time_limit(0);
>
> ind i toppen af scriptet så det ikke bliver slået ihjel inden det når
> at køre færdigt?

Dels vil *browseren* time ud, hvis det tager for lang tid, og dels kan man
ikke bruge set_time_limit(0), hvis PHP kører i safe mode (hvad den nok gør,
hvis det er et webhotel).

--
- Jonas Koch Bentzen

http://understroem.dk/
http://findhim.com/

Thomas Lindgaard (22-03-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 22-03-04 09:50

On Mon, 22 Mar 2004 09:42:51 +0100, Jonas Koch Bentzen wrote:

> Dels vil *browseren* time ud, hvis det tager for lang tid, og dels kan man
> ikke bruge set_time_limit(0), hvis PHP kører i safe mode (hvad den nok gør,
> hvis det er et webhotel).

Okidoki - live and learn :)

/Thomas

Henrik Stidsen (22-03-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 22-03-04 21:58

Jonas Koch Bentzen <ingen.email@eksempel.dk> wrote in
news:c3m8g7$2454$1@news.cybercity.dk

>> ind i toppen af scriptet så det ikke bliver slået ihjel inden
>> det når at køre færdigt?
>
> Dels vil *browseren* time ud, hvis det tager for lang tid,

Det kan omgås ved at sende et "blanktegn" til browseren med X
sekunders mellemrum så den hele tiden får noget data at "arbejde
med". Det betyder så desværre at man ikke kan sende headers efter man
har sendt mails.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
http://såkadulæredet.dk/ => http://xn--skadulredet-x8as.dk/

Henrik Stidsen (22-03-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 22-03-04 00:16

Lars Olesen <lsolesen@hotmail.com> wrote in
news:405c0819$0$134$edfadb0f@dread11.news.tele.dk

> while (der er noget i databasen)
> {
> if (mail(de rette parametre for mail)) // modtager sættes
> til to {
> echo 'mailen blev sendt';
> }
> else
> {
> echo 'mailen blev ikke sendt';
> }
> }
>
> ?>

Alt efter hvordan mailserveren er sat op kan du risikere at få true
på alle udsendelser uanset om den reelt blev sendt eller ej. (er vist
mest hvis man benytter ekstern SMTP).

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
http://såkadulæredet.dk/ => http://xn--skadulredet-x8as.dk/

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste