06. maj 2002 - 12:53Der er
29 kommentarer og 1 løsning
problem med mail() når der bruges while løkke
hej
jeg sidder her og har lavet et mailsystem. det fungerer fint nok, men bare ikke når jeg sætter modtagerne ind med en while løkke... er der nogen der kan hjælpe??
//Greasy
her får I lige hele koden:
<?php include('functions.inc.php');?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
$type = array( m => "(mål)", r => "(Rødt kort)", g => "(Gult kort)"
);
$result = mysql_query("select live.type, live.kamp_id, live.minut, spillere.navn from live, spillere where live.kamp_id = '$kamp_id' and live.spiller_id = spillere.spiller_id order by minut asc"); while ($minraekke = mysql_fetch_array($result)) { $c = $minraekke[type]; echo"$minraekke[minut]. Minut $minraekke[navn] $type[$c]\n"; }
echo"\n Husk at du kan følge alle kampene under VM direkte på vores liveside!!\n\nhttp://www.koreajapan2002.dk/live.php\n\n Godt VM :D - koreajapan2002.dk - teamet."; ?> </textarea> </td> </tr> <tr> <td><input type='submit' name='send' value='send'</td> </tr> </table> </form>
<?php if($send){ //connect(); //$result = mysql_query("SELECT bruger.email FROM bruger LEFT JOIN resultater On bruger.bruger_id=resultater.bruger_id WHERE resultater.kamp_id = '$kamp_id'"); //while ($myrow = mysql_fetch_array($result)) {
det array du laver $mit_array er noget snavs da du sammenblander numerisk indexerede arrays med associative arrays.
Hvis du ønsker at gøre det som associativt array skal du sørge for at indexværdierne er strenge. dvs: "1" => "Frankrig", og være meget omhyggelig med også at benytte strenge når du senere slår op i arrayet.
Hvis du ønsker et numerisk indexeret array kunne du evt indsætte et dummyelement forrest for at få fyldt noget i $mit_array[0]: $mit_array = array( "dummy", "Frankrig", // $mit_array[1] "Senegal", "Uruguay", ...
sorry, kunne godt have uddybet det lidt mere... som filen er nu sender den kun til min egen email, og det fungerer fint.. Men som du kan se i min if($send) vil jeg gerne hente de emailadresser der skla have en mail, men når jeg skifter min email adresse ud med '$myrow[email]' sendes der ikke nogen mails.. men der kommer heller ikke nogen fejl.
For det første er løsningen dårlig, hvis du skal sende mange mails på den måde! - Kig evt. nærmere på http://zend.com/codex.php?id=347&single=1 for en hurtigere og mere effektiv løsning.
Derudover vil det nok kunne betale sig, at skrive:
havde selv fundet fejlen. jeg havde ikke fået mine maildaresser med i min form. Men hvad er problemet hvis man skal sende mange mails?? og hvor mange er mange mails?
Ulempen er at mail() gør følgende (for hver eneste mail!):
1. åbner forbindelse til smtp-server 2. sender mail 3. lukker forbindelse til smtp-server
De tidskrævende operationer her er styring af forbindelsen til smtp-serveren - det alternativ jeg har givet et link til gør følgende:
1. åbner forbindelse til smtp-server 2. sender (alle) mails 3. lukker forbindelse til smtp-server
Hvis du sender eks. 50 mails slipper du for 49 åbninger/lukning af forbindelsen til smtp-serveren - det er væsentligt hurtigere og ikke så hårdt for serveren.
ok, det lyder jo meget smartere, men jeg har siddet og kigget på koden fra zend.... og der må jeg så lige melde pas!! det er lige langhåret nok. hvis jeg lokker med lidt flere point er det så noget du gider guide mig igennem??
1. Kopier koden fra zend over i dit script eller kopier det over i en seperat fil, som du inkluderer i dit script.
2. Skriv følgende i dit script i stedet for mail(...):
$smtp = new smtp_client("navn-på-smtp-server"); while (list($email) = mysql_fetch_row($result)) { $smtp->email("info@koreajapan2002.dk", $email, "", "Content-Type: text/plain; charset=iso-8859-1\r\n", $emne, $tekst); } $smtp->send();
Kommentarer til ovenstående: Du skal finde ud af navnet på smtp-serveren og det skal skrives i anførselstegn i den første linie. De tomme anførselstegn i email-metoden er beregnet til navn på modtager, hvilket jeg ikke ved om du har? Teksten med "...charset=iso-88-59-1..." er en ekstra header, som fortæller modtagerens postprogram, at mailen skal behandles som ren tekst og tegnsættet er vest-europæisk.
Så når du kigger på den egentlige kode, er der egentlig ikke de store ændringer - men prøv at tage tid på eks. 50 mails til dig selv og se om der ikke er forskel!
nu har jeg lagt zend koden i min inc fil... men allerede der får jeg en fejl... i linje 19 som er : <% desuden får jeg en fatal error hvis jeg trykker send: Fatal error: Cannot instantiate non-existent class: smtp_client in /home/koreajapan2002dk/passwd/admin/mail.php on line 112
linje 112: $smtp = new smtp_client("mail1.stofanet.dk");
Det er chmod du bruger til at ændre rettigheder, men jeg kan se, at du bruger noget passwordbeskyttelse via .htaccess - det er det som giver problemet og det ved jeg faktisk ikke hvordan du tackler... - jeg har ikke selv "leget" med den form for passwordbeskyttelse af biblioteker og filer.
selvom du lige skrev at det ville give problemer så har jeg ændret chmod, og nu får jeg ikke nogen fejl.... men desværre heller ingen mails.... i min logfil står der bare:
------------------------------------------- Sent 2002-05-06 16:31:08 ------------------------------------------- 220 mail1.stofanet.dk ESMTP
dumme robert....!! :) ved ikke hvorfor jeg ikke havde fået den slettet, jeg skal slet ikke bruge den til noget.... Men nu kan jeg se at jeg har modtaget en mail, men den skulle have sendt til to adresser og i min log står der følgende:
220 mail1.stofanet.dk ESMTP
HELO xyz
250 mail1.stofanet.dk
MAIL FROM:info@koreajapan2002.dk 250 ok
RCPT TO:pysaarhus@hotmail.com 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
DATA 503 RCPT first (#5.5.1)
Subject: kampresumé for kampen mellem Frankrig - Danmark To: Content-Type: text/plain; charset=iso-8859-1
desuden står der ikke noget i fra-feltet på den mail jeg modtog..??
tipsen jeg vil gerne give dig point, men det ville være pisse fedt hvis du lige kunne hjælpe mig med de sidste par småting... som sagt så står der ikke hverken afsender eller modtager i de mails jeg får sendt. Og hvis du ved hvorfor den i log'en skriver:
RCPT TO:pysaarhus@hotmail.com 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
Jeg vil gætte på, at du skal angive en email-adresse som hører til koreajapan2002.dk - dvs. en som serveren vil genkende - ellers kunne serveren jo bruges til spam - det er så også årsagen til, at den bagefter giver en 503, da den jo ikke har accepteret rcpt-adressen!
hej igen tipsen, har lige set dit svar... nu har jeg ændret emailen til anders@koreajapan2002.dk som er en gyldig mailadresse som jeg har oprettet, og kan modtage mails på... men jeg får stadig ikke sendt mine mails, kun til min egen stofanet adresse, hvilket jeg gætter på er fordi stofa's mailserver tillader alle mails med det domæne... skal du se noget kode for at kunne hjælpe mig?? eller skal jeg prøve med en anden mailserver??
faktisk har jeg lige prøvet at sende en mail til pysaarhus@hotmail.com fra mit outlook og min greasy@mail1.stofanet konto.... og den giver den samme fejl som i log'en: med at recipient er ikke i min liste over tilladte domæner... kan det lede dig på sporet af noget???
Det kan tyde på at problemet skal findes i opsætningen af smtp-serveren hos stofanet - så jeg vil foreslå at du ringer/skriver og spørger dem, hvad årsagen skyldes - hvorfor de kun tillader interne mails?
ok, takker for din hjælp ;D prøver at lave et nyt spørgsmål og høre om der er nogen der har kendskab til det.. stofa ved ikke en skid!! hehe
Synes godt om
Ny brugerNybegynder
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.