Newsletter-Script
Andreas
- php
Hallo,
mal eine grundsätliche Frage:
Um z.B. an 100 Personen die gleiche Email zu schicken, mache ich das in einer For-Schleife über 100 Durchgänge?
Ich sende die Mail mit der Anweisung: mail("$ziel", "$betreff", "$body");
Ist da so OK? Gibts da keine Performance-Probleme?
Gruß Andreas
Hallo,
normalerweise sollte das die Aufgabe des Mailservers (SMTP) sein, die Mailheader zu analysieren und dann mehrfach zu versenden. Es stenen dafür die Parameter cc: und bcc: zur Verfügung.
Wie man die Standard-Mail-Funktion von PHP aufbohrt und etwas intelligenter macht, das kannst Du hier im Forum unter dem Stichwort Mime-Mail finden. Ist dann zwar etwas mehr, als Du willst, aber dort wird mehrfach beschrieben, wie es gemacht wird.
Es gibt andererseits auch genug Gründe, die eMails einzeln auszulösen. Z.B. kommen ja immer Mailrückläufer. Diese dann der fehlerhaften eMail-Adresse zuzuordnen ist einfacher, wenn man jeder Mail eine eigene eineindeutige ID gibt, die mit der auslösenden Datenbank verknüpft ist.
Grüße
Tom
Hallo,
siehe ein Thread weiter unten.
Sorry, Andreas
Moin!
Hallo,
siehe ein Thread weiter unten.
Diese Aussage hilft den Fragenden nicht viel, denn "ein Thread weiter unten" verschwindet vielleicht zuerst im Archiv - dann ist ein ganz anderer Thread "einen weiter unten". Und im Archiv darf man dann raten, was für ein Thread gemeint war.
Ich habe dein falsches Posting Copy&Paste in eine Antwort an Tom reingesetzt - eine Arbeit, die du eigentlich hättest tun sollen. Denn es wird in diesem Forum durchaus aufgeräumt. Nur kannst du bei erkanntem Fehlposting uns aufräumenden Betreuern das Leben leichter machen, wenn wir einfach nur noch auf "löschen" klicken müssen, und nicht noch komplette Diskussionsbäume umhängen. Das geht derzeit nämlich nur manuell.
Danke für deine Mitarbeit nächstens.
- Sven Rautenberg
Hallo,
ich wollte einfach vermeiden, dass unnötiger Speicherplatz belegt wird. Bin eigentlich nicht so oft hier im Forum, wusste nicht wie ich sonst auf den Beitrag im falschen Thread verweisen konnte.
Also Danke für deine Mühe.
Gruß Andreas
Moin!
Hallo,
ich wollte einfach vermeiden, dass unnötiger Speicherplatz belegt wird. Bin eigentlich nicht so oft hier im Forum, wusste nicht wie ich sonst auf den Beitrag im falschen Thread verweisen konnte.
Ähm, mach dir um den Speicherplatz keine Sorgen. Das machen alle anderen sich nämlich auch nicht. Du hast maximal 10 Kilobyte Text getippt. Der Suchindex für das Jahr 2003 alleine ist aber schon über 100 Megabyte groß. Nur um mal die Relationen zu zeigen. Und die Festplatten des Servers haben noch einige Gigabyte Platz frei.
Wichtiger ist wirklich, dass Antworten da auftauchen, wo sie hingehören, damit man sich zurechtfindet.
Und Verweise sind in der </faq/> erklärt: < URL >
Bei Links zu anderen Threads im Forum gerne auch die komplette URL nehmen, das Forum kürzt entsprechend.
Nur wäre ein Verweis in den falschen Thread hier eben nicht zielführend. Wo hätten Rückfragen diskutiert werden sollen? Hier? Dort? In beiden Threads?
- Sven Rautenberg
Hallo,
danke für die Antworten.
Ich werde die Mails einzeln verschicken, da ich jeden Empfänger einzeln ansprechen möchte.
Anbei mein bisheriges Script.
Gruß Andreas
<?php
require("tb-config.php");
require("header.inc.php");
if ( !isset($action) || $HTTP_POST_VARS['action'] == "Vorschau" ){
buildhead("Newsletter");
getnavbar();
print "<B>Newsletter verfassen</B><P>\n";
print "<SCRIPT LANGUAGE="JavaScript" SRC="tbcode.js"></SCRIPT>\n";
// Benutzerlevel des jetzigen Benutzers, der den Newsletter schreibt, abfragen.
if ( isset($HTTP_COOKIE_VARS[$COOKIEuser]) && isset($HTTP_COOKIE_VARS[$COOKIEpass]) ){
$sql_mod = $SQL->putquery("SELECT status FROM $TBLuser WHERE name = '$HTTP_COOKIE_VARS[$COOKIEuser]'");
$mod_stat = @mysql_result($sql_mod,0,"status");
@mysql_free_result($sql_mod);
}
else
$mod_stat = $BLOCKLEVEL;
if ( $mod_stat < 2 ){
print "<br><br><br><br>Es ist Ihnen nicht erlaubt ein Newsletter zu schreiben";
}
print "<FORM ACTION="newsletter.php?mod_stat=$mod_stat" METHOD="POST" NAME="write">\n";
print "<TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="1" BORDER="0">\n";
print "<TR><TD CLASS="norm" BGCOLOR="$ENVtblhead">Betreff:</TD>\n";
print "<TD width="50%" CLASS="norm" BGCOLOR="$ENVtblbody">";
print "<INPUT TYPE="TEXT" NAME="form_subject" CLASS="ifld" SIZE="80" MAXLENGTH="128" VALUE="".stripslashes($form_subject).""></TD>";
print "<td width="30%" BGCOLOR="$ENVtblbody"> </td></TR>\n";
print "<TR><TD CLASS="norm" BGCOLOR="$ENVtblhead" valign="top">Inhalt:<br><font size="1">(Anrede wird hinzugefügt)</font></TD>\n";
print "<TD width="50%" CLASS="norm" BGCOLOR="$ENVtblbody">";
print "<TEXTAREA NAME="form_message" COLS="60" ROWS="15" WRAP="SOFT" CLASS="ifld" OnSelect="storeCaret(this);" OnClick="storeCaret(this);" OnKeyup="storeCaret(this);">".stripslashes($form_message)."</TEXTAREA><BR>\n";
print "</TD><td width="30%" BGCOLOR="$ENVtblbody"> </td></TR>\n";
print "<TR><td> </td><TD width="50%" CLASS="norm">\n";
print "<INPUT TYPE="SUBMIT" CLASS="ibut" name="action" VALUE="Absenden">\n";
print "<INPUT TYPE="RESET" CLASS="ibut" name="action" VALUE="Korrektur">\n";
print "</TD><td width="30%"> </td></TR>\n</TABLE>\n";
print "</FORM>\n";
}
if ( $HTTP_POST_VARS['action'] == "Absenden" And $mod_stat > 1 ){
$sql_user = $SQL->putquery("SELECT id,name,email FROM $TBLuser ORDER BY name");
$total_user = mysql_numrows($sql_user);
$betreff = $form_subject;
for ( $i = 0 ; $i < $total_user ; $i++ ){
$nl_name = mysql_result($sql_user,$i,"name");
$ziel = mysql_result($sql_user,$i,"email");
$body = "Hallo $nl_name,\n\n";
$body .= $form_message;
$Fehler = mail("$ziel", "$betreff", "$body");
if ( $Fehler == false ){
$StoreErr = false;
$ErrCount .= 1;
$Namelist .= "$nl_name | $ziel\n";
}
}
print "<br>";
if ($StoreErr == false){
buildhead("Es sind Fehler aufgetreten");
getnavbar();
print "es sind $ErrCount Fehler während der Übermittlung eingetreten.\n";
print "folgende Empfänger haben den Newsletter nicht erhalten:";
print "<div align="center">$Namelist</div>";
print "» <A HREF="$FILEindex">Zur Übersicht</A>\n";
require("footer.inc.php");
die();
}
else {
buildhead("Newsletter erfolgreich");
getnavbar();
print "<B>Newsletter erfolgreich ohne Fehler Abgeschickt</B><P>\n";
print "» <A HREF="$FILEindex">Zur Übersicht</A>\n";
require("footer.inc.php");
die();
}
}
?>
Hallo,
Hallo auch
mal eine grundsätliche Frage:
Um z.B. an 100 Personen die gleiche Email zu schicken, mache ich das in einer For-Schleife über 100 Durchgänge?
Ich sende die Mail mit der Anweisung: mail("$ziel", "$betreff", "$body");
Ist da so OK? Gibts da keine Performance-Probleme?
Ich würde einmal alle Emailadressen der Empfänger in eine Variable stecken und dann einmal einsetzten. =1 Durchlauf
Nun wenn die empfänger die anderen Emailadressen nicht wissen sollten, dann nimmt die Variable ins BCC-Feld.
Als "An"-Feld kannst du z.B. deine Emailadresse nehmen, oder was auch immer.
http://ch2.php.net/manual/de/function.mail.php
(Sorry weiss nicht gerade auswendig, wie man hier einen Link erstellt)
Gruß Andreas
Gruss aus Winterthur(CH) Hannibal
hallo andreas,
Hallo,
mal eine grundsätliche Frage:
Um z.B. an 100 Personen die gleiche Email zu schicken, mache ich das in einer For-Schleife über 100 Durchgänge?
Ich sende die Mail mit der Anweisung: mail("$ziel", "$betreff", "$body");
Ist da so OK? Gibts da keine Performance-Probleme?Gruß Andreas
die mails auf diese art zu verschicken hat vor allem den vorteil, dass du deine e-mails individualisieren kannst, d.h. dass du jeden abonnenten mit seinem namen, sofern dieser etwa in einer datenbank gespeichert ist, ansprechen kannst; das geht meines wissens bei mails mit 100 adressen im cc- oder bcc-feld nicht;
performence-probleme habe ich bei rund 130 abonnenten keine; dauert keine 10 sekunden; falls du aber einmal sehr viel mehr mails auf einmal verschicken willst und keinen eigenen webserver hast, kann es sein, dass dein provider deinem skript nur eine bestimmte zeit zur ausführung zugesteht, damit andere prozesse nicht behindert bzw lahmgelegt werden können; wenn dein skript demnach zu lange läuft, wird es abgebrochen und nicht alle email werden verschickt.
mfg
mamue