viele mail über mysql
TH
- php
0 Hans Peter0 Mario Sch.0 TH0 Vinzenz Mai0 dedlfix
0 dedlfix0 dedlfix
0 Vinzenz Mai0 TH
hi,
kann mir irgend jemand helfen.
ich habe für den kunden eine newsletter gebaut.
wie kriege ich das hin, wenn die datenbank für 30 oder 300 empfänger hat und über mysql gesteuert wird.
Danke!
Hallo
wie kriege ich das hin, wenn die datenbank für 30 oder 300 empfänger hat und über mysql gesteuert wird.
Was meinst du damit genau?
Hi,
Was meinst du damit genau?
Hi,
Ich denke er möchte wissen, wie er eMails an Empfänger verschicken kann, derwen Adressen in einer Datenbank stehen..
Kann natürlich auch was anderes gemeint sein bei so einer Fragestellung ;)
Grüße
ich weiß nicht, wie ich die email an die empfänger senden kann.
quelltext:
(aber es kommt nur eine an !!!)
$Header = "MIME-Version: 1.0\n";
$Header .= "Content-type: text/html; charset=iso-8859-1\n";
$Header .= "From: ".$email_ver."\n";
$sqlN = "select * from new_email where new_ein = 2";
$resultn = mysql_query($sqlN);
if($resultn) {
$rows = mysql_num_rows($resultn);
$n = 0;
while ($n < $rows) {
$rsn = mysql_fetch_array($resultn);
$sql = "select * from newsletter where idseq =".$idseq;
$resultS = mysql_query($sql);
if($resultS){
$rows = mysql_num_rows($resultS);
$s = 0;
while ($s < $rows) {
$rsS = mysql_fetch_array($resultS);
$Betreff = $rsS[news_betr]; $Nachricht = "
<html>
<head> ... und so weiter
Hallo,
ich vermute, dass Du hier
$sqlN = "select * from new_email where new_ein = 2";
die E-Mail-Adressen auslesen willst.
while ($n < $rows) {
warum Du aber für jede E-Mail-Adresse, den Content erneut ausliest, das
entzieht sich meinem Vorstellungsvermögen.
Content auslesen
$sql = "select * from newsletter where idseq =".$idseq;
dazu hast Du den relevanten Teil, das Versenden der Mail weggekürzt.
Du solltest dringend an den Einsatz von Funktionen denken oder gleich den
objektorientierten Ansatz wählen. Weiterhin leidet Dein Skript an akutem Mangel
an Fehlerbehandlung.
Freundliche Grüße
Vinzenz
echo $begrüßung;
Weiterhin leidet Dein Skript an akutem Mangel an Fehlerbehandlung.
Es ist ja nur ein Ausschnitt, bei dem der Rest der Schleifen und enthaltenen if-Konstrukte fehlt. Das was er gepostet hat, erkennt schon mal wenn mysql_query() einen Fehler zurückliefert und läuft dann nicht blind in die Abfrageschleife rein, so wie das viele Anfänger gern machen.
echo "$verabschiedung $name";
echo $begrüßung;
ich weiß nicht, wie ich die email an die empfänger senden kann.
Mit mail(), aber das, nehme ich an, wird nicht dein Problem sein.
(aber es kommt nur eine an !!!)
Ursache wird die Mehrfachverwendung einer Variablen sein. Du füllst sie für die eine Schleife, überschreibst sie aber in der zweiten. Eine Kontrollausgabe der Variableninhalte hilft, solche Fehler zu finden, wenn du sie nicht anhand deines Codes entdeckst.
$resultn = mysql_query($sqlN);
if($resultn) {
$rows = mysql_num_rows($resultn);
$n = 0;
while ($n < $rows) {
$rsn = mysql_fetch_array($resultn);
Die Verwendung von Einrückungen machte den Code lesbarer ...
Obiges Codefragment schreibt mal im Allgemeinen so:
if ($resultn = mysql_query($sqlN)) {
while ($rsn = mysql_fetch_array($resultn)) {
Normalerweise kann man das Ergebnis erst zählen, wenn man es vollständig gefetcht hat. Doch PHP macht das bereits im Hintergrund, weswegen mysql_num_rows auch dann geht, wenn du noch nicht alle Datensätze geholt hast. Da du aber sowieso alle Datensätze haben willst, kannst du sie auch einzeln holen, bis keiner mehr da ist, ohne ihre Anzahl zu kennen.
Du liest weiterhin den Content innerhalb der Empfänger-Schleife jedes Mal neu aus der DB aus. Bekommt jeder Empfänger einen unterschiedlichen Newsletter oder bekommen sie alle den gleichen? Mir scheint, letzteres der Fall. Hol den Newsletter zuerst und nur eimal ab. Datenbankabfragen sind vergleichsweise "teuer". Reduziere sie und die dabei abzufragende Datenmenge stets auf ein Minimum.
echo "$verabschiedung $name";
echo $begrüßung;
Nachtrag:
$rsn = mysql_fetch_array($resultn);
mysql_fetch_array() ohne den zweiten Parameter result_type ist im Allgemeinen auch nicht die Funktion, die man haben möchte, sondern eine ihrer spezialisierteren Geschwister: mysql_fetch_row() oder mysql_fetch_assoc().
echo "$verabschiedung $name";
Hallo
ich habe für den kunden eine newsletter gebaut.
wie kriege ich das hin, wenn die datenbank für 30 oder 300 empfänger hat und über mysql gesteuert wird.
Da gibt es sehr viele unterschiedliche Möglichkeiten.
Du könntest z.B. auf dem Mailserver des Kunden Mailinglisten verwenden,
Du könntest mit der Dir zur Verfügung stehenden Programmiersprache (wohl PHP)
auch selbst die Empfänger aus der DB auslesen und die Mails in Serie versenden.
Dabei solltest Du auf die Laufzeitbeschränkung Deines Skriptes achten - und die
Mails entweder in hübschen kleinen Paketen versenden (dabei nicht vergessen,
darauf zu achten, welche schon versandt wurden) oder die Aufgabe einem Prozess
im Hintergrund zu übergeben.
Es hängt halt vieles davon ab, wie Du das realisiert hast, realisieren willst,
realisieren kannst und natürlich der Konfiguration der Server, die bei diesem
Newsletter verwendet werden.
kann mir irgend jemand helfen.
Konkreter kann man Dir nur helfen, wenn Du Dein Problem genauer beschreibst.
Freundliche Grüße
Vinzenz
hi, das ist der quelltext:
$Header = "MIME-Version: 1.0\n";
$Header .= "Content-type: text/html; charset=iso-8859-1\n";
$Header .= "From: ".$email_ver."\n";
# E-Mail auslesen
$sqlN = "select * from new_email where new_ein = 2";
$resultn = mysql_query($sqlN);
if($resultn)
{
$rows = mysql_num_rows($resultn);
$n = 0;
while ($n < $rows)
{
$rsn = mysql_fetch_array($resultn);
# Content auslesen
$sql = "select * from newsletter where idseq =".$idseq;
$resultS = mysql_query($sql);
if($resultS)
{
$rows = mysql_num_rows($resultS);
$s = 0;
while ($s < $rows)
{
$rsS = mysql_fetch_array($resultS);
$Betreff = $rsS[news_betr];
$Nachricht = "
<html>
<head>
<style type="text/css"> body { background-color:#E0E0E0;} p { font: normal 11px Tahoma,sans-serif;}</style>
</head>
<body>
<table width="700" border="0" align="center" style="border: 1px solid #777; background: #fff; padding: 2px;">
<tr>
<td><p><b>Sehr geehrte Abonnentin, sehr geehrter Abonnent,</b><br>anbei finden Sie den aktuellen Newsletter.</p></td>
</tr>
<tr>
<td><hr align="left" width="100%" size="1" noshade></td>
</tr>
<tr>
<td><p>$rsS[news_text]</p></td>
</tr>
<tr>
<td><hr align="left" width="100%" size="1" noshade></td>
</tr>
<tr>
<td><p>Sie sind mit folgender eMail-Adresse zum Newsletter-Service eingetragen: $rsn[new_adresse]<br>
Wenn Sie den Newsletter abmelden, Ihre eMail-Adresse oder das Newsletter-Format ändern möchten, klicken Sie <a href="http://www.idis-web.de/abmelden.php?idseq=$rsn[idseq]">hier.</a></p></td>
</tr>
</table>
</body>
</html>
";
$s++;
}
}
$n++;
$Empfaenger = $rsn[new_adresse];
}
}
mail($Empfaenger, $Betreff, $Nachricht, $Header);
echo $begrüßung;
hi, das ist der quelltext:
Wenn du für jedem Empfänger eine Mail versenden möchtest, dann darf der Aufruf der mail()-Funktion nicht außerhalb der Schleife platziert werden.
echo "$verabschiedung $name";
echo $begrüßung;
hi, das ist der quelltext:
Wenn du für jedem Empfänger eine Mail versenden möchtest, dann darf der Aufruf der mail()-Funktion nicht außerhalb der Schleife platziert werden.
echo "$verabschiedung $name";
qellcode:
-> Es passiert immer das gleiche, wenn zb 2 adresse eingeben und verschicke dann kommt nur eine an!!
$sqlN = "select * from new_email where new_ein = 2";
$resultn = mysql_query($sqlN);
if($resultn)
{
$rows = mysql_num_rows($resultn);
$n = 0;
while ($n < $rows)
{
$rsn = mysql_fetch_array($resultn);
# Content auslesen
$sql = "select * from newsletter where idseq =".$idseq;
$resultS = mysql_query($sql);
if($resultS)
{
$rows = mysql_num_rows($resultS);
$s = 0;
while ($s < $rows)
{
$rsS = mysql_fetch_array($resultS);
$Betreff = $rsS[news_betr];
$Nachricht = "
<html>
<head>
<style type="text/css"> body { background-color:#E0E0E0;} p { font: normal 11px Tahoma,sans-serif;}</style>
</head>
<body>
<table width="700" border="0" align="center" style="border: 1px solid #777; background: #fff; padding: 2px;">
<tr>
<td><p><b>Sehr geehrte Abonnentin, sehr geehrter Abonnent,</b><br>anbei finden Sie den aktuellen Newsletter.</p></td>
</tr>
<tr>
<td><hr align="left" width="100%" size="1" noshade></td>
</tr>
<tr>
<td><p>$rsS[news_text]</p></td>
</tr>
<tr>
<td><hr align="left" width="100%" size="1" noshade></td>
</tr>
<tr>
<td><p>Sie sind mit folgender eMail-Adresse zum Newsletter-Service eingetragen: $rsn[new_adresse]<br>
Wenn Sie den Newsletter abmelden, Ihre eMail-Adresse oder das Newsletter-Format ändern möchten, klicken Sie <a href="http://www.idis-web.de/abmelden.php?idseq=$rsn[idseq]">hier.</a></p></td>
</tr>
</table>
</body>
</html>
";
$s++;
}
}
$Empfaenger = $rsn[new_adresse];
mail($Empfaenger, $Betreff, $Nachricht, $Header);
?><p>Sie haben eine E-Mail Adresse an <?= $rsn[new_adresse] ?> geschickt!</p><?
$n++;
}
}
echo $begrüßung;
Wenn du für jedem Empfänger eine Mail versenden möchtest, dann darf der Aufruf der mail()-Funktion nicht außerhalb der Schleife platziert werden.
-> Es passiert immer das gleiche, wenn zb 2 adresse eingeben und verschicke dann kommt nur eine an!!
Gut, einen Hinweis hast du nun beachtet. Wie sieht es mit den anderen Hinweisen aus? Woran scheitert die Umsetzung? Wenn du deinen Code wie vorgeschlagen entschlackst verschwindet auch dein Problem, weil es dann nicht mehr vorhanden ist.
echo "$verabschiedung $name";
es hat geklappt!
Vielen Dank!!!!
mfg
thomas