Rundmal über PHP mit Adressen aus MySQL

Moin,

ich habe Mitglieder mit eMail-Adresse auf ner MySql-DB.
Nun versuche ich aus n Mail-Form an alle ne Mail zu schicken.
Dazu habe ich die Abfrage -->

PHP:
				<?php
				
error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors','On');

$host = "localhost";
$user = "user";
$password = "password";
$dbname = "dbname";
$tabelle ="tabelle";

$dbverbindung = mysql_connect ($host, $user, $password);

$dbanfrage = "SELECT 'Email' from $tabelle";
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);

mysql_close ($dbverbindung)

Im Mail-Form will ich $result als mailto: ausgeben zu lassen, bzw eben als Adressen halt......

Code:
<form name="rundmail" action="mailto:<?php $result?>?subject=<?php $Array['Betreff']?>" enctype="text/plain" method="post">

Lieder tut sich garnuescht. Noch nicht mal ne Fehlermeldung.

Zwei Fragen - ist dies überhaupt so möglich und wie replace ich die Daten wenn keine eMail-Adresse bei dem Mitglied hinterlegt ist?

Ich brauche ja Semikolon als Adressen-Trenner, wenn aber zwischendurch einer keine hat, würde es ja so aussehen (bildlich! ;-) ) mail@mal.de;;mail2@mal2.de etc...

Hat hier jemand ne Idee?

Gruß Manuel
 
Ich habe das mal mit einer PHP-Funktion gelöst:
$mail_subject = 'Dein Subject;
$mail_message = 'Irgendein Text';
$mail_header = 'Deine Mailadresse';
for (hier alle Mitglieder) {
$mail_to = $mailadresse[deine Mitglieder]
mail($mail_to,$mail_subject,$mail_message,$mail_header);
}

Achtung: die Funktion sendet in dieser Form jedesmal eine neue Mail -> das braucht Scriptzeit. Wenn man die Mail an sehr viele Leute schicken will, muss man mit bcc arbeiten, also in einer Mail alle Mitglieder nennen.

Details findest Du in der PHP-Dokumentation.
 
Guten Morgen erstmal!

So wie du das probierst, kann das meiner Meinung nach gar nicht funktionieren.
Du versucht eine MySQL-Ressource direkt auszugeben.
Mein Tipp wäre folgendes:

PHP:
(...)
$dbanfrage = "SELECT 'Email' from $tabelle"; 
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);
$mailTo = "";  // Addressaten initialisieren
while ($data = mysql_fetch_assoc($result)) {  // jede Zeile einzeln auswählen
    $mailTo = $mailTo.$data[Email].",";   //jede Email einzeln an Adressaten anfügen
}

echo "<form (...) action=\"mailto:$mailTo\" (...) > (...) </form>";  //Ausgabe des Formulars

Übrigens edler wäre es natürlich, wenn du die Leute erst schreiben lässte und dann, die daten per $_POST[] ausliest, und die E-mail direkt per php verschickst:

Bau einfach ein Formular und ersetzt das echo(...) im oben genannten Quelltext durch:
PHP:
mail( $mailTo, $_POST[subject], $_POST[message], "FROM:$_POST[sender]");

Die Daten müssen dann natürlich per method="post" versendet werden!

Ich hoffe geholfen zu haben.
 
Hi,

Übrigens edler wäre es natürlich, wenn du die Leute erst schreiben lässte und dann, die daten per $_POST[] ausliest, und die E-mail direkt per php verschickst:

Bau einfach ein Formular und ersetzt das echo(...) im oben genannten Quelltext durch:
PHP:
mail( $mailTo, $_POST[subject], $_POST[message], "FROM:$_POST[sender]");

Er möchte ja eine Rundmail an alle Empfänger in seiner Datenbank schicken. Wie z.B. einen Newsletter. ;)

Und niemals $_POST-Daten ungeprüft an die mail-Funktion übergeben! So, wie's da steht, kann das als Spamschleuder missbraucht werden.

@Manuel: Nicht angegebene Email-Adressen könntest Du schon von der Datenbank rausfiltern lassen, indem Du die Abfrage auf nichtleere Email einschränkst. Du hast auch noch einen Fehler in der Abfrage. Spaltennamen setzt man nicht in Hochkommata, sondern, wenn nötig, in Backticks.

LG
 
Ja und, was is daran falsch?
Ich gehe mal stark davon aus, dass er diese Funktion nicht so ins Internet stellt, dass jeder beliebiege diese Seite benutzen kann, oder?
Und wenn ich das mal weiterspinne, dann müsste ich ihm jetzt einen Badwords-Filter oder Captchas o.ä. basteln, er wollte aber nur wissen, wie er ne Email an alle Personen einer Datenbank senden kann. Dies ist denke ich mit meinem Code möglich. Das ich geschrieben habe
Übrigens edler wäre es natürlich, wenn du die Leute erst schreiben lässte und dann, die daten per $_POST[] ausliest, und die E-mail direkt per php verschickst:
lässt auf anderes schließen, aber ich hatte eher ein System im Kopf in dem mehrere Leute (z.B. alle Mitglieder) Rundmails an alle versenden können!

Aber um der Vollständigkeit gerecht zu werden hier ein nützlicher Beitrag:
http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html

Sowas is immer nützlich! So ich hoffe damit auch knuddeldaddeldu zufriede gestellt zu haben :-)
 
Hi,

das war als Hinweis gedacht. Hier sind viele unbedarfte User unterwegs, die nach solchen Sachen suchen. Und wenn das schön einfach aussieht, wird das kopiert -> ausprobiert -> funktioniert -> online. Deshalb lass ich so was nicht gerne unkommentiert so stehen. Ich habe nicht bezweifelt, dass Du es besser kannst. ;)

Ich würde das Versenden der Rundmail an seiner Stelle per PHP machen. Dann braucht er nur das Textfeld, die Empfängeradressen kommen ja eh aus der DB (und sind hoffentlich geprüft...).

LG
 
Moin,


ja ne, is schon so. Nur zwei - drei Leute können hier drauf über ne Login-Seite.

Wäre ja ansonsten doof :-))

Ich bastle morgen das mal so zusammen, schau ma mal :-)

Das mit den Hochkommatas weiss ich, sorry. Hab da nur was versucht......und vergessen die wieder rauszumachen.

Die nichtbestehenden Mail-Adressen rausfiltern meinste mit "WHERE Emai >0 "? Also auf die Weise oder? Oder besser Größer als "Leer'".

Also, ich meld mich dann morgen.....


Gruß Manuel
 
Moin Moin,

also folgendes hab ich bisher -->

PHP:
<?php
				
error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors','On');

$host = "localhost";
$user = "user";
$password = "password";
$dbname = "dbname";
$tabelle ="tabelle";

$dbverbindung = mysql_connect ($host, $user, $password);

$dbanfrage = "SELECT Email from $tabelle";  
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung)or die( mysql_error() ); 
$mailTo = "";  // Addressaten initialisieren 
while ($data = mysql_fetch_assoc($result)) {  // jede Zeile einzeln auswählen 
    $mailTo = $mailTo.$data['Email'].",";   //jede Email einzeln an Adressaten anfügen 
}
  echo "<form name='rundmail' action='mailto:\$mailto\'?subject='\$_POST[Betreff]\' enctype='text/plain' method='post' >";
   
?></b></font></td></tr> <tr> <td width="15">&nbsp;</td><td valign="top" colspan="2"> 
<div align="left"> <table width="60%" border="0" cellspacing="0" cellpadding="0"> 
<tr> <td width="83">&nbsp;</td><td colspan="2">&nbsp;</td></tr> <tr> <td width="83"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Betreff:</font></b></td><td colspan="2"> 
<input type="text" name="Array[Betreff]" size=60> </td></tr> <tr> <td width="83">&nbsp;</td><td colspan="2">&nbsp;</td></tr> 
<tr> <td width="83" valign="top"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nachricht:</font></b></td><td colspan="2"> 
<textarea name="Anfrage" rows="5" cols="75"></textarea> </td></tr> <tr> <td width="83">&nbsp;</td><td colspan="2">&nbsp;</td></tr> 
<tr> <td width="83">&nbsp;</td><td colspan="2">&nbsp;</td></tr> <tr> <td width="83">&nbsp; </td><td width="153"> 
<div align="left"> <input type="submit" value="Abschicken" name="submit"> </div></td><td width="152"> 
<input type="reset" name="Zur&uuml;cksetzen" value="Zur&uuml;cksetzen"> <div align="right"> 
</div></td></tr> </table></div><table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> <td COLSPAN="2">&nbsp;<?php "</form>"?>

Ich geh mal davon aus dass der abschliessende Form-Tag nach den Eingabe-Feldern sein muss!? --> ?

Das mit der Abfrage werd ich sicherlich noch verfeinern... erst soll überhaupt mal die *!**!*!Mail verschickt werden....
Aber leider klappt es nicht wirklich....

Noch jemand ne Idee?

Gruß Manuel
 
Zurück