mail() mit mehreren Empfängern.

uwee

Erfahrenes Mitglied
Hallo an alle!

Ich habe ein kleines Problem mit der mail()-Funktion.

Ich möchte einen Newsletter schicken (über ein Formular) und für diesen Newsletter möchte ich gerne die Empängeradressen aus meiner Datenbank holen.
Die Mail soll jetzt an ALLE Empfänger meiner Db geschickt werden.
Dafür muss ich alle empfänger doch erstmal in eine variable schreiben oder? Da fängts schon an zu hapern...
hier einmal die Codeschnipsel:

Damit hole ich mir die Adressen aus der Db
PHP:
$sql="SELECT id ,email FROM newsletter ".
 "WHERE id LIKE '%'".
"ORDER BY id";

Hiermit schicke ich die Mail weg:
PHP:
mail($empfaenger,"NEWSLETTER",$msg);

So, in Msg wird dann die neue Nachricht stehen.

Bleibt mein Problem: wie bkeomme ich die Emfänger in die Variable und kann ich die mail überhaupt an mehrere schicken?

Danke

UweE
 
Hi,
bin mir nicht ganz sicher, aber müsste es nicht so gehen?
PHP:
foreach($empfaenger as $key => $value)
{
mail($value,"NEWSLETTER",$msg);
}
Geht dann natürlich nur, wenn $empfaenger als array() gespeichert ist, also z.B. mit mysql_fetch_array...
Bitte korigiert mich, falls es falsch sein sollte!
Gruß,
Snowowl
 
So hab ich das jetzt, dummerweise gibt er mir in der Zeile, in der die mail-Funktion steht einen Fehler aus:

Warning: mail() expects parameter 1 to be string, array given in bla\news_ok.php on line 53

PHP:
$b="1";
$name=$_POST['name'];
$nachricht=$_POST['nachricht'];
$empfaenger="";
$msg="";

$sql="";
$result="";

if ($b!=""){
$sql="SELECT id ,email FROM newsletter ".
 "WHERE id LIKE '%'".
"ORDER BY id";
}

$result=mysql_query($sql) or die(mysql_error());

?>
<html><body><title>
<?php
if(!$result or !mysql_num_rows($result))
echo "Keine Eingaben</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC><p>Keine Eingaben vorhanden</p>";
else {
echo "test</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC>";
while ($row=mysql_fetch_object($result)){
$empfaenger=array(",$row->email,");
}
}
$msg=$nachricht;

foreach($empfaenger as $key => $value){
mail($empfaenger,"ANFRAGE AUS DEM ONLINESHOP",$msg);}
 
2 Varianten die auf einen SQL Befehl folgen können:

Variante 1:

PHP:
while ($row = mysql_fetch_row($sql)) mail($row[1],"NEWSLETTER",$msg);

Was nach meiner Meinung ein bischen viel für den Server ist.

Variante 2:

PHP:
$row = mysql_fetch_row($sql)
$to = $row[1];

while ($row = mysql_fetch_row($sql)) $to .= ", ".$row[1];

mail($to,"NEWSLETTER",$msg);

Die ich wahrscheinlich bevorzugen würde solange mir keiner sacht das Variante 1 nicht mehr Serverlast ist wie Variante 2.

Du kanns als Empfänger also mehrere Emails eintragen. Diese müssen nur durch ein Komma (,) getrennt werden.
 
@ZodiacXP

Es scheint soweit zu funktionieren, jedoch bekomm ich folgende Meldung:

mysql_fetch_row(): supplied argument is not a valid MySQL result resource

und zwar in beiden zeilen, wo das verwendet wird.
 
Na gut, hier dein optimierter Code:

PHP:
<html><body><title>

<?PHP

$b=1;
$name=$_POST['name'];
$msg=$_POST['nachricht'];

if (!empty($b)) $result = mysql_query("SELECT `email` FROM `newsletter` WHERE 1") or die(mysql_error());

if (!$result || mysql_num_rows($result) == 0) echo "Keine Eingaben</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC><p>Keine Eingaben vorhanden</p>";
else {
  echo "test</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC>";

  // Mailliste erstellen
  $row = mysql_fetch_row($sql);
  $to = $row[1];
  while ($row = mysql_fetch_row($sql)) $to .= ", ".$row[1];

  // Mail senden
  mail($to,"ANFRAGE AUS DEM ONLINESHOP",$msg);
}
?>

Solltest du immernoch "supplied argument is not a valid MySQL result resource" angezeigt bekommen sag einfach bescheid ;)
Andere Frage: Was macht das $b da?

PS an ALLE anderen: Kennt jemand das Gegenteil von explode() oder split() Gibs das?
EDIT: Ok. Ich depp. Es ist implode() :suspekt:
 
Zuletzt bearbeitet:
DANKE
auch ohne den optimierten Code hat es funktioniert, ich musste nur das $sql in der Anweisung durch $result eintauschen und es geht.

das $b muss ich noch löschen ;) war als Abbruchkriterium da, falls nichts drinsteht, sollte abgebrochen werden, wird mit übertragen.

DANKE
 
uuuups... Hab da noch ne kleine Frage:
Immer, wenn ich so eine Mail wegschicke und meine Mails abrufe (geht momentan ja nur auf mich zu Testzwecken), Erscheint als Absender CGI-Mailer...
kann man statt CGI-Mailer nicht auch irgendwie was anderes reinnehmen... der Namen ist die Mail adresse cgi-mailer@kundenserver.de zugewiesen.
 
Zurück