Avatar billede snigeren Nybegynder
08. april 2006 - 16:43 Der er 21 kommentarer og
1 løsning

Sende en mail til alle emails i en database

Hvordan sender man bedst en email til alle mail adresser med et bestemt id i en database?

Jeg kunne forestille mig at man kunne bruge php til det og så have en side hvorfra man kunne skrive en besked i en tekstboks som så bliver sendt til alle i en bestemt gruppe af personer.

Nogle foreslag?

/Snig
Avatar billede jakobdo Ekspert
08. april 2006 - 16:51 #1
Du har jo faktisk fat i det hele selv, hvad skal vi hjælpe dig med? :o)
Du man bruge php funktion mail() til at sende emailen med.
Avatar billede snigeren Nybegynder
08. april 2006 - 17:13 #2
uhm ok =)

øhm, den sidste mail() ting jeg lavede henter den kun én mail fra en form på forrige side:

$to = $_REQUEST["email"];

Der er en kategori der hedder "hold" en person kan f.eks. være på "hold7", kan du hjælpe mig med en kode der henter alle emails hvor "hold" == hold7  og hvordan kommer selve $to = .... til at se ud?
Avatar billede jakobdo Ekspert
08. april 2006 - 17:18 #3
Selve din sql skal vel være noget i stil med:
$query = mysql_query("SELECT email FROM table WHERE hold = 'hold7'");
while($row = mysql_fetch_assoc($query))
{
$to = $row['email'];
$subject = "Test";
$message = "Hej, dette er en test fra mig til dig";
mail($to,$subject,$message);
}
Avatar billede snigeren Nybegynder
08. april 2006 - 17:24 #4
ahh ok,.. ja det må jo kunne gøres sådanne... dvs. jeg laver en side hvor man kan vælge hvilket hold man vil skrive til, skrive en overskrift og selve beskeden når man så trykker send hopper den hen til en anden side der sender selve mailen... ja det må være løsningen =)
Avatar billede snigeren Nybegynder
08. april 2006 - 17:26 #5
man kan vel egentlig undvære alt hvad der hedder <head></head><body></body> og den slags og så bare kun have selve php mail koden i .php filen der sender mailen ikke?
Avatar billede jakobdo Ekspert
08. april 2006 - 17:32 #6
Jo, det er ikke nødvendigt med et output på den side.
Så du kan evt efter afsendelse lave: header() og smide bruger tilbage til forsiden eller lign.
Dog kna output på siden bruges til fejl eller info om det var ok.
Avatar billede snigeren Nybegynder
29. april 2006 - 21:03 #7
Uhm jeg har nu prøvet at lave to filer sendmail.php hvor brugeren kan skrive sin besked og vælge hvilken gruppe den skal sendes til og afsendmail.php der sender selve mailen...

Det virker bare ikke endnu, ved ikke lige hvad der er galt og om jeg mangler noget. Jeg prøver lige at smide koden til de to filer her, håber ikke det er for vildt meget kode:

fil 1 - sendmail.php:

<?php

    // This page will list all of the items

    // from the items table. Each item will have

    // a link to add it to the cart

    include("../db.php");

    // Get a connection to the database

    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

?>

<html>
<head>
<title>Salsa Akademiet</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../css/salsa.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.style1 {
    font-size: 13px;
    font-weight: bold;
}
-->
</style>
</head>

<body>

<table width="500" border="1" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td height="288" align="center" valign="top" bordercolor="#333333" bgcolor="#FFFAE4"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100%" class="tekst"><img src="../gfx/topgrafikpopup.jpg" width="500" height="84"></td>
      </tr>
      <tr>
        <td class="emptyspace"><br>
          <span class="tekst style1">Email siden</span><br> </td>
      </tr>
      <tr>
        <td height="105" align="center" valign="top" class="emptyspace"><form action="afsendmail.php" method="post" name="sendmail" id="sendmail">
          <table width="94%"  border="0" cellspacing="0" cellpadding="0">
            <tr class="tekst">
              <td width="26%" align="left" valign="top">Send mail til hold: </td>
              <td width="74%"><select name="valgmenu" id="valgmenu">
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold1'">Hold 1</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold2'">Hold 2</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold3'">Hold 3</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold4'">Hold 4</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold5'">Hold 5</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold6'">Hold 6</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold7'">Hold 7</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'hold8'">Hold 8</option>
                <option value="SELECT email FROM tester">Mailing liste</option>
                <option value="SELECT email FROM medlemmer WHERE hold = 'test'">Test</option>
                            </select></td>
            </tr>
            <tr class="tekst">
              <td align="left" valign="top">Overskrift</td>
              <td><input name="headline" type="text" id="headline" size="59"></td>
            </tr>
            <tr class="tekst">
              <td align="left" valign="top">Br&oslash;dtekst</td>
              <td><textarea name="message" cols="44" rows="10" id="message"></textarea></td>
            </tr>
            <tr class="tekst">
              <td>&nbsp;</td>
              <td>&nbsp;</td>
            </tr>
            <tr class="tekst">
              <td>&nbsp;</td>
              <td><input type="submit" name="Submit" value="Afsend"></td>
            </tr>
          </table>
        </form></td>
      </tr>
    <tr>
        <td height="50" colspan="6">&nbsp;</td>
      </tr>
      <tr align="center">
        <td colspan="6"><img src="../gfx/prik.jpg" width="100%" height="2"></td>
      </tr>
      <tr align="center">
        <td height="25"><span class="tekst">
          <?php include("../bundinfo.php"); ?></span></td>
      </tr>
    </table>    </td>
  </tr>
</table>
</body>
</html>


fil 2 - afsendmail.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php

    // This page will list all of the items

    // from the items table. Each item will have

    // a link to add it to the cart

    include("db.php");

    // Get a connection to the database

    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

?>



<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
$valg = $HTTP_POST_VARS['valgmenu'];
$headline = $HTTP_POST_VARS['headline'];
$besked = $HTTP_POST_VARS['message'];
$query = mysql_query("$valg");
while($row = mysql_fetch_assoc($query))
{
$to = $row['email'];
$subject = "$headline";
$message = "$besked";
mail($to,$subject,$message);
}
?>
</body>
</html>


Kan du fortælle mig hvad jeg gør forkert?
Avatar billede jakobdo Ekspert
30. april 2006 - 16:18 #8
Prøv i din afsendmail.php fil at lav dette i toppen:

echo '<pre>';
print_r($_POST);
echo '</pre>';

Og en helt anden ting, du bør beskytte filen mod sql-injections.
Du må ikke bruge en $_POST['valg'] direkte i mysql_query()
Det gør du her:

$valg = $HTTP_POST_VARS['valgmenu'];
$query = mysql_query("$valg");
Avatar billede snigeren Nybegynder
30. april 2006 - 17:15 #9
uhm når jeg smider de tre linier ind lige før    include("db.php");
skriver den følgende i browseren:
Array
(
    [valgmenu] => SELECT email FROM tester
    [headline] => tester2
    [message] => tester tekst2
    [Submit] => Afsend
)

Hvis jeg skriver det lige før $valg = $HTTP_POST_VARS['valgmenu'];
sker der ingenting.

Uhm jeg er ikke lige sikker på hvad jeg skal gøre =|  hvad er sql-injections egentlig?
Avatar billede jakobdo Ekspert
30. april 2006 - 17:17 #10
Prøv at ret:
$valg = $HTTP_POST_VARS['valgmenu'];
$headline = $HTTP_POST_VARS['headline'];
$besked = $HTTP_POST_VARS['message'];
til:
$valg = $_POST['valgmenu'];
$headline = $_POST['headline'];
$besked = $_POST['message'];
Avatar billede snigeren Nybegynder
30. april 2006 - 17:43 #11
uhm,.. det hjalp ikke meget. Er disse sætninger rigtige?

while($row = mysql_fetch_assoc($query))
{
$to = $row['email'];
$subject = "$headline";
$message = "$besked";
mail($to,$subject,$message);
}
Avatar billede jakobdo Ekspert
30. april 2006 - 17:53 #12
Det ser rigtigt ud ja!
Avatar billede snigeren Nybegynder
30. april 2006 - 17:55 #13
har du et bud på hvorfor jeg ikke får de samme data frem når jeg skriver

echo '<pre>';
print_r($_POST);
echo '</pre>';

lige før $valg = $_POST['valgmenu']; ?

Jeg kan ikke rigtig forstå hvorfor den ikke skriver
Array
(
    [valgmenu] => SELECT email FROM tester
    [headline] => tester2
    [message] => tester tekst2
    [Submit] => Afsend
)
der også
Avatar billede jakobdo Ekspert
30. april 2006 - 18:03 #14
prøv at test denne kode som afsendemail.php

<?php
    include("db.php");
    // Get a connection to the database
    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

    $valg = mysql_real_escape_string($_POST['valgmenu']);
    $subject = $_POST['headline'];
    $message = $_POST['message'];
    $query = mysql_query($valg);
    while($row = mysql_fetch_assoc($query))
    {
        mail($row['email'],$subject,$message);
    }
?>
Avatar billede snigeren Nybegynder
30. april 2006 - 18:17 #15
bare den alene? uden alle de normale tags osv.? det har jeg prøvet og det virker ikke. Heller ikke hvis jeg bare sætter følgende ind i den nederste php tag:

    $valg = mysql_real_escape_string($_POST['valgmenu']);
    $subject = $_POST['headline'];
    $message = $_POST['message'];
    $query = mysql_query($valg);
    while($row = mysql_fetch_assoc($query))
    {
        mail($row['email'],$subject,$message);
    }


Men hvordan med $query = mysql_query($valg);
skal der ikke være "" i parantesen efter mysql_query? således mysql_query("blabla");
Avatar billede jakobdo Ekspert
30. april 2006 - 18:21 #16
Fang mig lige på msn: jakobdo {at} hotmail [dot] com
Avatar billede snigeren Nybegynder
30. april 2006 - 18:24 #17
hvis jeg nu lige skal teste indholdet i DB´en hvordan gør jeg så bedst det?

    include("db.php");

    // Get a connection to the database

    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

hvad skal jeg så gøre for at skrive alle emails ud med echo så det bare kan ses i browseren? =)
Avatar billede snigeren Nybegynder
30. april 2006 - 19:09 #18
ahhh jakobdo er for sej! =)

her er slut scriptet:


<?php
    require("./../db.php");
    // Get a connection to the database
    if(!ConnectToDb($dbServer, $dbUser, $dbPass, $dbName))
    {
        echo "ConnectToDb failed<br />";
    }

    $valg         = $_POST['valgmenu'];
    $subject     = $_POST['headline'];
    $message     = $_POST['message'];
    $query        = mysql_query($valg) or die(mysql_error());
    if(mysql_num_rows($query)>0)
    {
        while($row = mysql_fetch_assoc($query))
        {
            if(!empty($row['email']))
            {
                mail($row['email'],$subject,$message);
            }
        }
    }
    else
    {
        echo "Ingen modtagere fundet!<br />";
    }
?>
Avatar billede snigeren Nybegynder
30. april 2006 - 19:09 #19
smid lige et svar forresten =)
Avatar billede jakobdo Ekspert
30. april 2006 - 19:41 #20
Svar!
Avatar billede snigeren Nybegynder
30. april 2006 - 22:33 #21
og en officiel tak =)
Avatar billede jakobdo Ekspert
01. maj 2006 - 07:47 #22
Takker for point.
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