Avatar billede hakio Novice
22. oktober 2005 - 12:20 Der er 11 kommentarer og
1 løsning

PHP mail function i loop - kun første post får mailen

Jeg har følgende kode:

if ($_POST)
        {
            // Construct email body as a seperate variable, just so that its easier to read
            $subject = "Nyhedsbrev fra XXX";
            $fromEmail = $_POST['fromEmail'];   
            echo "From email: $fromEmail<BR>";       
            $message = $_POST['message'];
            //$headers = 'From: Testing <$fromEmail>' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
            $headers = "From: Butik-Kiweb Nyhedsbrev <" . $fromEmail . ">";
            echo "headers: $headers<BR>";       
                       
                        //setup db connection
            $link = mysql_connect("localhost", "xxx", "xxx")
            or die("Could not connect : " . mysql_error());
                        mysql_select_db('xxx') or die('Could not select database');
                       
                        $query = "SELECT email FROM users WHERE isActive = '1'";
                      $result = mysql_query($query) or die("Query failed");
                       
                        $num=mysql_numrows($result);
                        mysql_close(link);
                       
                        echo "<b><center>Database Output</center></b><br><br>";
                       
                        $i=0;
                        while ($i < $num) {                       
                            $toEmail = mysql_result($result,$i,"email");
                            echo "$toEmail <br>";
                            mail($toEmail, $subject, $message, $headers );
                            echo "Email now sent to: $toEmail <br>";
                            $i++;
                        }                                           
                                               
            // Thank the generous user
            echo "<h4>Nyhedsbrevet er udsendt til $num persone(r).</h4>\n";
        }
        else
        {
        ?>

        <h3>Udsend nyhedsbrev</h3>

        <form action="<?= $PHP_SELF ?>" method="post">
            <p>Fra email adressen: <input type="text" name="fromEmail" /></p>
            <p>Besked:</p>
            <p><textarea name="message" rows="20" cols="60"></textarea></p>
            <p><input type="submit" value="Send!" /></p>
        </form>

        <?php
        }

        ?>

Når jeg submitter formen printes samtlige email adresser på skærmen, men kun den første person får emailen. Jeg hoster hos b-one.net. Hvis jeg jeg hardcoded en email adresse i mail-funktionen og submitter formen x antal gange er det måske kun 1-2 af gangene jeg faktisk får emailen. Dvs. der er faktisk to issues her. Sidst nævnte mistænker jeg måske b-one for at stå for på en eller anden måde (måske de har policies for afsending af email fra deres servere jeg ikke kender til). Hvis de har kan det jo også skyldes at jeg netop kun kan sende til den første person og ikke alle i min db/array
Avatar billede Slettet bruger
22. oktober 2005 - 12:21 #1
$num=mysql_numrows($result); skal være

$num=mysql_num_rows($result);
Avatar billede hakio Novice
22. oktober 2005 - 12:25 #2
det er stadigvæk kun første person som får mailen...
Avatar billede hakio Novice
22. oktober 2005 - 12:28 #3
og num_rows giver pt. 4 som er antallet i min db. Og 4 forskellige email adresser udskrives på siden også. Dvs den løber mit resultset igennem fint nok, men kun første person får emailen.
Avatar billede plx Nybegynder
22. oktober 2005 - 12:30 #4
Flyt lukningen af databasen ned efter din while løkke
Avatar billede Slettet bruger
22. oktober 2005 - 12:32 #5
Drop i det hele taget din lukning af databasen.. Din databaseforbindelse bliver alligevel lukket igen når siden er loadet færdigt.
Avatar billede hakio Novice
22. oktober 2005 - 12:34 #6
hmm.. heller ik løsningen :(
men jeg kan måske godt se din tanke i at flytte den til jeg er helt færdig :) selvom resultset'et vel ikke ændres når db-forbindelsen lukkes.
Avatar billede hakio Novice
22. oktober 2005 - 12:38 #7
ok - droppet :)
og stadig samme problem...
Avatar billede krydset Nybegynder
22. oktober 2005 - 12:43 #8
if ($_POST)
        {
            // Construct email body as a seperate variable, just so that its easier to read
            $subject = "Nyhedsbrev fra XXX";
            $fromEmail = $_POST['fromEmail'];   
            echo "From email: $fromEmail<BR>";       
            $message = $_POST['message'];
            //$headers = 'From: Testing <$fromEmail>' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
            $headers = "From: Butik-Kiweb Nyhedsbrev <" . $fromEmail . ">";
            echo "headers: $headers<BR>";       
                       
                        //setup db connection
            $link = mysql_connect("localhost", "xxx", "xxx")
            or die("Could not connect : " . mysql_error());
                        mysql_select_db('xxx') or die('Could not select database');
                       
                        $query = "SELECT email FROM users WHERE isActive = '1'";
                      $result = mysql_query($query) or die("Query failed");
                       
                        $num=mysql_numrows($result);
                        mysql_close(link);
                       
                        echo "<b><center>Database Output</center></b><br><br>";
                       
                        while ($row = mysql_fetch_array($result)){                       
                            $toEmail = $row['email'];
                            echo "$toEmail <br>";
                            mail($toEmail, $subject, $message, $headers );
                            echo "Email now sent to: $toEmail <br>";
                        }                                         
                                               
            // Thank the generous user
            echo "<h4>Nyhedsbrevet er udsendt til $num persone(r).</h4>\n";
        }
        else
        {
        ?>

        <h3>Udsend nyhedsbrev</h3>

        <form action="<?= $PHP_SELF ?>" method="post">
            <p>Fra email adressen: <input type="text" name="fromEmail" /></p>
            <p>Besked:</p>
            <p><textarea name="message" rows="20" cols="60"></textarea></p>
            <p><input type="submit" value="Send!" /></p>
        </form>

        <?php
        }

        ?>
Avatar billede hakio Novice
22. oktober 2005 - 12:54 #9
krydset -> hvad har du ændret?
og det virker stadigvæk ikke :(
Avatar billede plx Nybegynder
22. oktober 2005 - 13:18 #10
Prøv at sætte en sleep(1) ind efter afsending

Mht at lukke databasen før endt brug, så må logikken være, at ikke hele indholdet bliver trukket ud på een gang. Så er det et stort udtræk, vil der løbende hentet data ind
Avatar billede hakio Novice
22. oktober 2005 - 16:18 #11
ok - har nu:
while ($row = mysql_fetch_array($result)){                       
                            $toEmail = $row['email'];
                            mail($toEmail, $subject, $message, $headers );
                            sleep(1);
                            echo "Email now sent to: $toEmail <br>";
                        }

uden det hjælper.
Prøvede for frustrationen og 'sjovs' skyld dette her:

while ($row = mysql_fetch_array($result)){                       
                            $toEmail = $row['email'];
                            if ($toEmail == "myemail")
                            {
                                mail($toEmail, $subject, $message, $headers );                           
                                sleep(1);                         
                              echo "Email now sent to: $toEmail <br>";
                              }
                              else{
                                  echo "Email not sent to : $toEmail <br>";
                              }

myemail findes i db'en - ifølge log outputtet er det den eneste der sendes til og det er også den eneste person som modtager emailen...

Arrayet løbes stensikkert fint igennem, dvs. det må være enten (1) i mail funktionen eller (2) hos b-one.net at problemet ligger vil jeg mene.
Avatar billede hakio Novice
22. oktober 2005 - 16:32 #12
Ok - der fik jeg vist løst problemet selv...
den from email der angives i @headers SKAL være oprettet på min b-one konto under mail settings...
tak for Jeres input
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