Avatar billede mulles.tk Nybegynder
16. november 2003 - 21:44 Der er 40 kommentarer og
1 løsning

mail() til 1500?

Jeg har et rimelig stort problem! Jeg fandt på værste vis ud af at funktionen mail() ikke kan sende til 1500 på en gang, men jeg håber at nogen har en løsning på det? Her er hele min kode til nyhedsbrevet:

<?php
$query = mysql_query("SELECT email FROM medlemmer WHERE nyhedsbrev='ja'");
while($result=mysql_fetch_array($query))
{
$til .= $result["email"];
$til .=",";
}
    $countmodtagere = mysql_query("select COUNT(id) from medlemmer where nyhedsbrev='ja'");
    $modtagere = mysql_result($countmodtagere,0,0);

    $countnyhedsbrev = mysql_query("select COUNT(id) from nyhedsbrev");
    $antal = mysql_result($countnyhedsbrev,0,0);
    $antal_i_alt = $antal+1;

if(isset($_POST['mail'])) {
    $emne = $_POST['emne'];
    $besk = stripslashes($_POST['besked']);
    $besk1 = nl2br($_POST['besked']);

$besked = '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
<!--
body        { font-size: 8 pt; font-family: Tahoma }
p    { font-family: Tahoma; font-size: 8 pt }
h1    { font-size: 10 pt; font-family: Tahoma }
a:active    { text-decoration: underline; color: #808080 }
a:link    { text-decoration: underline; color: #808080 }
a:visited    { text-decoration: underline; color: #808080 }
-->
</style>
</head>
<body>
'.nl2br($besk).'
</body>
</html>
';


$header = "Content-type: text/html; charset=iso-8859-1";
$header .= "\nFrom: " . "Crewet - Zapp.dk <rune@zapp.dk>";


    mail($til, $emne, $besked, $header);
    mysql_query("INSERT INTO nyhedsbrev (nr, besked) values ('$_POST[nr]', '$besk1')") or die(mysql_error());
    echo "<p align='center'><font color='#008000'>Mailen er sendt!</font></p>";
}

echo "Antal modtagere af nyhedsbrevet: $modtagere";
?>
Avatar billede ztyxx Nybegynder
16. november 2003 - 21:46 #1
brug serverens SMTP, http://www.eksperten.dk/spm/205869
Avatar billede fangel Nybegynder
16. november 2003 - 21:50 #2
Ja - Zends smtp klasse er udemærket... -  jeg har engang skrevet en klasse selv - hvis du ikke kan få Zends klasse til at virke / ikke forstå den, så skal jeg gerne snde den

Morten
Avatar billede erikjacobsen Ekspert
16. november 2003 - 21:54 #3
Med mere direkte brug af SMTP udskyder du naturligvis problemet, men at
sende mange mails fra en webside er generelt ikke en god ide. Hvad med at
lave et program (det kan sagtens være php) sende mails fra fx din egen PC,
eller fra en kommandolinie på serveren (ssh/telnet)?
Avatar billede ztyxx Nybegynder
16. november 2003 - 21:54 #4
morten> du kan jo poste den her, så kan vi se om den er nemmere at gå til, der skulle ændres lidt i den fra Zend for at den kørte
Avatar billede ztyxx Nybegynder
16. november 2003 - 21:57 #5
erik> hvorfor er det ikke en god ide at sende så mange mails fra en webside, tager det serverkraft, selvom det er over SMTP, spø´r af uvidenhed, det kunne ligne en side der er en del af et online admin-modul
Avatar billede fangel Nybegynder
16. november 2003 - 22:04 #6
nå - kunne ikke finde klassen, men her er de som funktioner...

http://mfa.ath.cx/LIB/smtpMail.phps

se ex. i bunden

Det er min workstation, så den er kun oppe når jeg er hjemme, og vågen . dvs ikke _SÅ_ meget længere i aften... gymnasie i morgen :(

Morten
Avatar billede erikjacobsen Ekspert
16. november 2003 - 22:06 #7
Det er en webserver ikke beregnet til. Du har fx en timelimit, du kan
overbelaste et webhotel, du har ikke så god styring hvis noget går galt.

Sidst jeg sendte 54 mails ud fra php skete det fra en kommandolinie ;))

Andre gange har de mails der skulle sendes til mange personer blevet
registreret i en database, og et cronjob har efterfølgende sendt dem ud
på passende vis.
Avatar billede mulles.tk Nybegynder
16. november 2003 - 22:07 #8
Æv, havde håbet på at det kunne gøres ved hjælp af mail() :(

Er laaangt fra en ørn til php, så det med serverens SMTP virker meget forvirrende for mig, så har nok brug for uddybelse!

erikjacobsen ~ Er der lavet sådan et program eller hvad?

Er der nogen der ved hvor mange mail() kan sende til? Da jeg gerne vil vide hvor stor skade jeg har gjort ;)
Avatar billede erikjacobsen Ekspert
16. november 2003 - 22:08 #9
Skade? ;)  Sikkert ikke noget - med mindre du har et meget emsigt webhotel.
Ja, der er lavet masser af spam-genererende programmer.... Men du kan fx
bare installere PHP på din pc og bruge din mail()-funktion der.
Avatar billede ztyxx Nybegynder
16. november 2003 - 22:09 #10
erik> okay, men det var derfor at jeg troede at det var smartere at bruge SMTP, da jeg har ladet mig fortælle at det ikke brugte resourcer på webserveren, du siger at du har sendt via kommandolinie, æhh er det gennem en DOS-prompt??
Avatar billede erikjacobsen Ekspert
16. november 2003 - 22:14 #11
Jah, en kommandolinie - det er når det er en sjælden foreteelse ;) Men ellers
automatiseret, blot ikke direkte fra en webserver som jeg nu synes primært
skal holde sig til at server websider (og sende en enkelt mail eller 2).
Avatar billede mulles.tk Nybegynder
16. november 2003 - 22:14 #12
Det var ikke så meget skade på webhotelet jeg tænkte på, men mere medlemmerne! For da jeg sendte nyhedsbrev ud til alle 1500, gik det jo galt, så alle medlemmernes emails blev vist i starten af mailen :/ Så jeg ville bare lige vide hvor mange den ca. var nået ud til!

Jamen det gør vel ingen forskel om jeg bruger mail()-funktion på min pc eller mit webhotel, gør det? For var problemet ikke at den funktion ikke kunne sende til så mange, ...eller var det kun hvis den lå på et webhotel :?
Avatar billede erikjacobsen Ekspert
16. november 2003 - 22:15 #13
Men jo - det er da smartere at bruge SMTP mere direkte. Nu har de fleste
webhoteller regler om at der ikke må være scripts der belaster serveren
i urimelig grad, og det løber man jo nok ind i her.
Avatar billede fangel Nybegynder
16. november 2003 - 22:16 #14
mulles -> mail() kommandoen åbner en forbindelse til mail-serveren, sender en mail, lukker forbindelse - åben igen, sender mail 2, lukker igen... OSV...

Zend's klasse åbner forbindelse, sender mail 1, sender mail 2... lukker forbindelsen

dette spare en pæn sjat regnekræft og båndbrede...

---

normalt har du en timeout på 30 sek, men tid brugt i sockets (forbindelsen til mailservern) tæller ikke med - dvs at du faktisk kan bruge lang tid på det...

men du skal bare stå og vente på at siden komemr fram... derfor er det smartere med egen computer og fx crontab der deler det ud over en times tid eller 3

Morten
Avatar billede erikjacobsen Ekspert
16. november 2003 - 22:17 #15
mulle: på webhotellet får du en timeout, det gør du ikke med et program
(fx php på en kommanolinie) på din PC. Du kan også lede efter gratis
mail-sende programmer - de skulle nok findes.

Og så er det pænt ikke at vise alle emailadresser til alle. Send een af
gangen, eller put dem ind i Bcc-feltet i din mail.
Avatar billede ztyxx Nybegynder
16. november 2003 - 22:18 #16
takker for den lille forelæsning, så blev man da lidt klogere, det sker der jo ikke noget ved, selv i en fremskreden alder ;-)
Avatar billede mulles.tk Nybegynder
16. november 2003 - 22:25 #17
Okay det vil sige at mail() godt kan sende til 1500, hvis man bare bruger funktionen på sin egen computer?

Ved godt at det ikke er pænt, og det var sandelig heller ikke med vilje! Men hele html-kodeningen blev vist i mailen sammen med de 1500 e-mails, og det må jo så have været på grund af at mail() ikke kunne klare det, eller...?
Avatar billede erikjacobsen Ekspert
16. november 2003 - 22:27 #18
Nej, det er dig der bestemmer hvad der skal stå i mailen. Det er ikke mail()'s skyld
Avatar billede mulles.tk Nybegynder
16. november 2003 - 22:32 #19
Det var altså ikke mig! Jeg testede den nemlig først til mig selv, og der virkede det perfekt, men da jeg så sendte den til de 1500 gik det galt?

Hvad med det om mail() godt kunne sende ud til 1500 hvis det var på egen computer?
Avatar billede erikjacobsen Ekspert
16. november 2003 - 22:39 #20
Ja, har du php kan du umiddelbart godt. Men det *er* din skyld hvis 1500
modtagere af en mail kan se de andres mail-adresser. Der kan du ikke
skyde skylden på mail()
Avatar billede mulles.tk Nybegynder
17. november 2003 - 20:25 #21
Et eller andet må der jo have gået galt fordi det var 1500 og ikke kun 3 som jeg havde testet systemet med :?

Og læser man dette:
http://www.eksperten.dk/spm/290402
...lyder det som om at der er en grænse på hvor mange man kan sende til?

I den mail jeg sendte ud til de 1500 og som gik galt, var der ! (udråbstegn) placeret midt i nogle af adresserne, som ikke er der når man kigger i databasen?
Avatar billede erikjacobsen Ekspert
17. november 2003 - 20:29 #22
En exchangeserver eller også er det outlook, eller webdelen af den, der
er kendt for at sætte umotiverede !-ere ind i mails der bliver modtaget.
Jeg har selv bøvlet med det. PHPs mail() gør det ikke.

En while-løkke, der ikke stopper kan sagtens lave mange mails - vi kan
selvfølgelig ikke sige hvad der går galt.
Avatar billede mulles.tk Nybegynder
17. november 2003 - 22:41 #23
okay... Men nu hvor jeg har ændret koden sådan at mail adresserne kommer ind i bcc, så burde de vel ikke blive vist, hvis nu at det skulle gå galt igen, vel? Og jeg mener ikke bare vist i til-feltet, for det ved jeg godt at de ikke gør, men altså i selve mailen sammen med den anden tekst!

Hvad kan så være skylden til at hele min html-opsætning blev ødelagt, det samme som gjorde !-ene eller hvad?
Avatar billede erikjacobsen Ekspert
17. november 2003 - 22:43 #24
Det kan jeg ikke sige noget om på det foreliggende grundlag.
Avatar billede mulles.tk Nybegynder
18. november 2003 - 21:29 #25
Jeg har studeret den mail der gik galt nærmere, og den er sendt til 100, og de resterende mails er så blevet skrevet i selve mailen, så det må være fordi at der er et limit på 100. Men hvordan laver man så sådan en while-løkke, giver 100 point for det.

Til nogen af de 100 mails den er sendt til har den tilføjet '.talkactive.net' bag nogen af adresserne? Hvorfor nu det?

Her er den kode jeg bruger nu:
<?php
$query = mysql_query("SELECT email FROM medlemmer WHERE nyhedsbrev='ja' AND status=''");
while($result=mysql_fetch_array($query))
{
$til .= $result["email"];
$til .=",";
}
    $countmodtagere = mysql_query("select COUNT(id) from medlemmer where nyhedsbrev='ja' and status=''");
    $modtagere = mysql_result($countmodtagere,0,0);

    $countnyhedsbrev = mysql_query("select COUNT(id) from nyhedsbrev");
    $antal = mysql_result($countnyhedsbrev,0,0);
    $antal_i_alt = $antal+1;

if(isset($_POST['mail'])) {
    $emne = $_POST['emne'];
    $besk = stripslashes($_POST['besked']);
    $besk1 = nl2br($_POST['besked']);
##### OPRETTER MAILEN #####

$besked = '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
<!--
body        { font-size: 8 pt; font-family: Tahoma }
p    { font-family: Tahoma; font-size: 8 pt }
h1    { font-size: 10 pt; font-family: Tahoma }
a:active    { text-decoration: underline; color: #808080 }
a:link    { text-decoration: underline; color: #808080 }
a:visited    { text-decoration: underline; color: #808080 }
-->
</style>
</head>
<body>
'.nl2br($besk).'
</body>
</html>
';
############################

$header = "Content-type: text/html; charset=iso-8859-1";
$header .= "\nFrom: " . "Crewet - Zapp.dk <rune@zapp.dk>\r\n";
$header .= "Bcc: $til\r\n";


    mail('', $emne, $besked, $header);
    mysql_query("INSERT INTO nyhedsbrev (nr, besked) values ('$_POST[nr]', '$besk1')") or die(mysql_error());
    echo "<p align='center'><font color='#008000'>Mailen er sendt!</font></p>";
}

echo "Antal modtagere af nyhedsbrevet: $modtagere";
?>
Avatar billede erikjacobsen Ekspert
19. november 2003 - 06:09 #26
Jeg har ikke tid til at give dig hele svaret nu, men
1) Hvis en email hedder fx peter@domæne vil der sikkert blive sat fx talkactive.net bagefter
2) Hvis en adresse i $til indeholder linieskift på en eller anden måde,
kan det vel tænkes at resten af adresserne bliver en del af selve beskeden
3) Der skal ikke \n foran From

Prøv at kigge tabellen igennem for 1) og 2), og hvis det er derfor så
sørg for bedre validering inden du putter noget i tabellen.
Avatar billede mulles.tk Nybegynder
19. november 2003 - 14:36 #27
Adresserne skulle gerne være valideret ordentligt, da personen der tilmelder sig modtager en mail, hvor han/hun skal bekræfte tilmeldelsen.

1) Der er kun 2 af de 100, hvor der er blevet sat talkactive.net bagefter, og det er helt alm. emails, navn@domæne.dk ? Fx. bruger jeg selv mailen zapp@wildness.dk og der er ikke tilføjet noget efter!

2) Der skulle som sagt ikke være nogen med linieskift! Det er bare mærkeligt at det de mails præcis efter de 100, der bliver skrevet i selve beskeden :?

3) Tror det var her på exp jeg fandt dette:
$header .= "\nFrom: " . "Crewet - Zapp.dk <rune@zapp.dk>\r\n";
...men skal nok lige rette det!

Hvad betyder \r egentlig?
Avatar billede mulles.tk Nybegynder
21. november 2003 - 21:33 #28
Nogen der kan hjælpe?

Ellers må jeg jo bare bruge det med: serverens SMTP, men så skal der altså være nogen som er klar til at guide mig igennem?
Avatar billede mulles.tk Nybegynder
24. november 2003 - 14:17 #29
erikjakobsen ~ læg lige et svar så du kan få nogen point! Lukker spørgsmålet nu, så må jeg lige finde ud af hvad jeg vil gøre!
Avatar billede erikjacobsen Ekspert
24. november 2003 - 14:20 #30
Nej tak, ingen point for ingen løsning.

Men vi kan da godt fortsætte hvis du giver mere konkrete oplysninger.
Avatar billede mulles.tk Nybegynder
24. november 2003 - 14:35 #31
Okay så fortsætter vi :D

Nu vil jeg bare gerne have det til at virke. Ved bare ikke hvad jeg skal bruge, for dea_pg skrev at SMTP mail-funktionen kun kan sende ren tekst, og min skal helst være HTML!

Jeg har droppet at installere php, da det var for forvirrende :? Man skal have apache installeret også, ik'? Eller kan det være installeret på forhånd?

Har du nogen forslag til nogle funktioner jeg kan bruge?
Avatar billede ztyxx Nybegynder
24. november 2003 - 14:37 #32
med kun Apache installeret kan du ikke sende mails, da det skal køres af en eller anden form for serverside sprog, som f.eks. asp eller php
Avatar billede mulles.tk Nybegynder
24. november 2003 - 14:38 #33
det ved jeg... Men da jeg var i gang med at installere php, kom jeg til at tænke på, at så skulle jeg også installere apache, skal man ikke det?
Avatar billede erikjacobsen Ekspert
24. november 2003 - 14:44 #34
PHP kan du installere til Apache eller Personal Webserver eller IIS.
Har du ingen af delene kørende selv kan anbefales en samlet løsning med apache+php+mysql

SMTP kan også sende HTML mails - der er ingen forskel der.

Vil du køre PHP mod SMTP så brug en klasse, der gør det hårde arbejde for
dig, fx: http://sourceforge.net/projects/phpmailer/

Og ellers, hvis du vil mail fra din PC, og ikke fra din hjemmeside, kan
du sikkert finde et færdigt program, der kan gøre det (ku' nu ik' li' finde
et her og nu...)
Avatar billede erikjacobsen Ekspert
24. november 2003 - 14:44 #35
Du kan afvikle PHP fra kommandolinien uden Apache
Avatar billede mulles.tk Nybegynder
24. november 2003 - 14:59 #36
Der skal ikke meget til at forvirre mig med det her :P

Men tror i hvert fald at jeg holder mig fra:
http://sourceforge.net/projects/phpmailer/
Har lige prøvet at downlaode det, og det var vist lige mere end jeg kunne klare!

Hvis ud ikke kan finde nogen programmer, så kan jeg nok heller ikke, da jeg ingen gang ved hvad jeg skal søge efter :D

Men kan du så hjælpe mig med SMTP, for så tror jeg at jeg vil bruge det!
Avatar billede erikjacobsen Ekspert
24. november 2003 - 15:03 #37
Jeg vil altså kun bruge SMTP gennem en pakke, som den i linket ;)
Prøv www.download.com - det har jeg ikke gjort.
Avatar billede mulles.tk Nybegynder
24. november 2003 - 15:13 #38
heh he... oki! Synes bare lige at den virkede skræmmende, men vil da gerne give det et forsøg!
Avatar billede mulles.tk Nybegynder
24. november 2003 - 15:22 #39
Lyder dette program ikke meget godt:
AY Mail is designed to send professional looking email messages to all your contacts, monitor results and build relationships. You can import recipients from many sources. You can verify addresses and send highly personalized plain text or HTML messages using SMTP server or direct connection. You can grow your mailing list with automatic generation and processing of subscription forms and validate legitimacy of your subscribers with automatic letters. You can set up AY Mail to process bounces automatically, and it will mark all the failed addresses in your list. You can detect message openings and clicks through the links in your messages with a special HTML code, and you can use this information to send precisely targeted follow-up messages.
New in version 2.2: automatic address confirmation and welcome letters to subscribers, automatic generation of subscription processing scripts (Perl, ASP or PHP).
Avatar billede mulles.tk Nybegynder
24. november 2003 - 16:40 #40
Glem lige det program! Der er et limit på 15, da det kun er en trial, og det rigtige koster 60$ :? -men det virkede helt fint!

Nå men så må jeg gå i krig med SMTP!
Avatar billede tipsen Nybegynder
24. november 2003 - 18:00 #41
HTML-kode var da "ren tekst" sidst jeg checkede... - ikke noget binært skidt dér ;-)
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