Avatar billede greasy Nybegynder
06. maj 2002 - 12:53 Der 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">

<html>
<head>
    <title>mail resumé</title>
</head>
<body>
<?php
$mit_array = array(
                1 => "Frankrig",
        2 => "Senegal",
        3 => "Uruguay",
        4 => "Danmark",
        5 => "Spanien",
        6 => "Slovenien",
        7 => "Paraguay",
        8 => "Sydafrika",
        9 => "Brasilien",
        10 => "Tyrkiet",
        11 => "Kina",
        12 => "Costa Rica",
                13 => "Korea",
        14 => "Polen",
        15 => "USA",
        16 => "Portugal",
        17 => "Tyskland",
        18 => "Saudi Arabien",
        19 => "Irland",
        20 => "Cameroun",
        21 => "Argentina",
        22 => "Nigeria",
        23 => "England",
        24 => "Sverige",
        25 => "Italien",
        26 => "Equador",
        27 => "Kroatien",
        28 => "Mexico",
        29 => "Japan",
        30 => "Belgien",
        31 => "Rusland",
        32 => "Tunesien"
);


connect();

$result = mysql_query("SELECT hold1, hold2, maal1, maal2 from kampe where kamp_id = '$kamp_id'");

while ($myrow = mysql_fetch_array($result)) {



$a = $myrow[hold1];
$b = $myrow[hold2];
?>
<form method="post" name="opret_kamp"  action="<?php echo $PHP_SELF?>">
<table border='1' width='350'>
<tr>
<td>emne: <input type='text' size='57' name='emne' value='kampresumé for kampen mellem <?php echo $mit_array[$a]?> - <?php echo $mit_array[$b]?>'></td>
</tr>

<tr>
<td>besked:</td>
</tr>
<tr>
    <td>
<textarea cols='50' rows='20' name='tekst'>
<?php echo"kampresumé for kampen mellem\n\n$mit_array[$a] ($myrow[maal1]) - ($myrow[maal2]) $mit_array[$b]\n\n";
        }

$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)) {

mail("greasy@mail1.stofanet.dk", "$emne", "$tekst", "From: info@koreajapan2002.dk");
    //}
}
?>
</body>
</html>
Avatar billede htx98i17 Professor
06. maj 2002 - 12:59 #1
Kommer der nogen fejl? eller hvordan kan du se at det ikke fungere?
Avatar billede jakoba Nybegynder
06. maj 2002 - 13:00 #2
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",
...

mvh JakobA
Avatar billede greasy Nybegynder
06. maj 2002 - 13:01 #3
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.
Avatar billede tipsen Nybegynder
06. maj 2002 - 13:32 #4
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:

mail("greasy@mail1.stofanet.dk", $emne, $tekst, "From: info@koreajapan2002.dk");

eller:

while (list($email) = mysql_fetch_row($result)) {
  mail($email, $emne, $tekst, "From: info@koreajapan2002.dk");
}

Bemærk, at " også er fjernet de unødvendinge steder - de kan godt give lidt problemer med arrays som blev brugt før.
Avatar billede tipsen Nybegynder
06. maj 2002 - 13:36 #5
jakoba: Hvad er problemet med at skrive:

$mit_array = array(
        1 => "Frankrig",
        2 => "Senegal",
        3 => "Uruguay",
        4 => "Danmark",
        5 => "Spanien",
        6 => "Slovenien",
        7 => "Paraguay",
        8 => "Sydafrika",
        9 => "Brasilien",
        10 => "Tyrkiet",
        11 => "Kina",
        12 => "Costa Rica",
        13 => "Korea",
        14 => "Polen",
        15 => "USA",
        16 => "Portugal",
        17 => "Tyskland",

Bortset fra, at det er hurtigere at skrive:

$mit_array = array(1 => "Frankrig", "Senegal", "Uruguay", "Danmark", "Spanien", "Slovenien", "Paraguay",  "Sydafrika", "Brasilien", "Tyrkiet", "Kina", "Costa Rica", "Korea", "Polen", "USA", "Portugal", "Tyskland",
Avatar billede greasy Nybegynder
06. maj 2002 - 13:39 #6
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?
Avatar billede tipsen Nybegynder
06. maj 2002 - 15:16 #7
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.
Avatar billede greasy Nybegynder
06. maj 2002 - 15:25 #8
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??

//greasy
Avatar billede tipsen Nybegynder
06. maj 2002 - 15:41 #9
Det er faktisk meget nemt!

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!
Avatar billede greasy Nybegynder
06. maj 2002 - 16:04 #10
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");
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:08 #11
Hvad betyder: "<%" ?
Avatar billede greasy Nybegynder
06. maj 2002 - 16:10 #12
det gad jeg også godt vide.... det er start tag'et i koden fra zend

<?php
<% <-- DEN HER
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:14 #13
ahh - slog det lige op i manualos - det er start-slut tags i asp-stil - du fjerner både <% i starten og det tilhørende %> i slutningen!
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:17 #14
Bemærk at du får en log-fil så du kan se, hvordan det er gået med mails'ene!
Avatar billede greasy Nybegynder
06. maj 2002 - 16:17 #15
nå det var asp.... hehe men nu er den ok, men når jeg vil sende min mail får jeg følgende:

Warning: fopen("./smtp_client.log", "a") - Permission denied in /home/koreajapan2002dk/passwd/admin/functions.inc.php on line 102
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:20 #16
Det må du kunne fikse ved at ændre rettigheder til mappen eller måske oprette en tom fil med det navn - det er log-filen jeg nævnte ovenfor!
Avatar billede greasy Nybegynder
06. maj 2002 - 16:21 #17
er det chmod??
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:24 #18
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.
Avatar billede greasy Nybegynder
06. maj 2002 - 16:26 #19
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

HELO xyz

    250 mail1.stofanet.dk
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:27 #20
Prøv at lave en echo inde i while-løkken - for at se om de variable du bruger indeholder det du forventer!
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:30 #21
250 er hvertfald kode for "OK" - så forbindelsen til smtp-serveren er fin!
Avatar billede greasy Nybegynder
06. maj 2002 - 16:31 #22
meget mærkeligt.... prøvede at echo følgende:

<?php
connect();
$result = mysql_query("SELECT bruger.bruger_id, bruger.email FROM bruger LEFT JOIN resultater On bruger.bruger_id=resultater.bruger_id WHERE resultater.kamp_id = '$kamp_id'");
if($send){
$smtp = new smtp_client("mail1.stofanet.dk");
while (list($email) = mysql_fetch_row($result)) {
echo"hej hej $email";
  $smtp->email("info@koreajapan2002.dk", $email, "", "Content-Type: text/plain; charset=iso-8859-1\r\n", $emne, $tekst);
}
$smtp->send();
}
?>


Men der kom hverken noget $email eller hej hej.....
Avatar billede tipsen Nybegynder
06. maj 2002 - 16:41 #23
Du har ændret sql-udtrækket og udtrækker nu 2 felter i stedet for 1 - derfor skal du også ændre:

while (list($email) = mysql_fetch_row($result)) {

til

while (list($brugerid, $email) = mysql_fetch_row($result)) {

og så sæt en "or die(mysql_error()); på efter mysql_query - så får du en fejl, hvis udtrækket kikser!
Avatar billede greasy Nybegynder
06. maj 2002 - 16:57 #24
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..??
Avatar billede greasy Nybegynder
06. maj 2002 - 18:03 #25
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)

mvh greasy
Avatar billede tipsen Nybegynder
06. maj 2002 - 19:48 #26
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!
Avatar billede greasy Nybegynder
07. maj 2002 - 11:25 #27
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??

mvh Greasy
Avatar billede greasy Nybegynder
07. maj 2002 - 11:30 #28
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???
Avatar billede tipsen Nybegynder
08. maj 2002 - 00:39 #29
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?
Avatar billede greasy Nybegynder
08. maj 2002 - 16:58 #30
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
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