Newsletter

r4x

Mitglied
moin,

versuch grad mir meinen eigenen Newsletter zu programmieren
funktioniert auch alles nur beim senden habich kleine Problem

Mein Problem lässt sich wie folgt beschreiben:
ich versende einen Newsletter, die ersten bekommen ihn normal, bei den nächsen sind überall eine Leerzeile mehr drin und so weiter
am ende hat man ne riesen mail wo man sau lange scrollen kann auch wenn der eigentliche text nur 3 zeilen sind...

Danke schonmal

hier der code:

PHP:
<html>
       <head>
        <title>Newsletter schreiben</title>
       </head>
       <body>
        <form action="schreiben.php" method="POST">
        <textarea rows="15" cols="50" name="nachricht"></textarea><br>
        <input type="SUBMIT" name="go" value="Senden"><br>
        Verwenden sie die Variable {Username} um den User persönlich anzusprechen.
        </form>
        <?
      	  if(isset($_POST['go']))
      	{
      		$nachricht = $_POST['nachricht'];
      
      		$host = 'localhost';
      		$name = '***';
      		$pass = '***';
      		$datenbank = 'newsletter';
      
 		$connection = mysql_connect($host, $name, $pass) or die('konnte nicht verbinden');
 		$selectdatenbank = mysql_select_db($datenbank) or die('konnte Datenbank nicht auswählen');
      
      		$betreff = 'NEWSLETTER ';
 
      		$query = "SELECT * FROM newsletter";
      		$result = mysql_query($query) or die('konnte nicht auslesen<br>');
      
      		while($row = mysql_fetch_assoc($result))
      		{
      		  $nachricht = str_replace('{Username}', $row['username'], $nachricht);
      		  mail($row['mail'], $betreff, $nachricht, "from:****");
      		}
      		echo 'Nachrichten erfolgreich gesendet';
      	}
        ?>
       </body>
      </html>
 
Zuletzt bearbeitet:
Das liegt so weit ich das sehe an folgender Stelle:
PHP:
   $nachricht = str_replace('{Username}', $row['username'], $nachricht);
Dadurch wird $nachricht bei jeder Wiederholung länger!
So dürfte das gehen:
PHP:
  $nachricht2 = str_replace('{Username}', $row['username'], $nachricht);
				mail($row['mail'], $betreff, $nachricht2, "from:****");

Aber ich würde sowieso die einzelnen Mails nicht mit einer While Schleife verschicken, das dauert viel zu lang und der Server wird beansprucht. Ich würde lieber BCC nutzen!
 
Mit PHP solltest du keine Mails in einer Schleife verschicken. Für Newsletter gibt es entsprechende Programme/Tools, die die Mails für dich verschicken.
 
danube hat gesagt.:
Das liegt so weit ich das sehe an folgender Stelle:
PHP:
   $nachricht = str_replace('{Username}', $row['username'], $nachricht);
Dadurch wird $nachricht bei jeder Wiederholung länger!
So dürfte das gehen:
PHP:
  $nachricht2 = str_replace('{Username}', $row['username'], $nachricht);
 				mail($row['mail'], $betreff, $nachricht2, "from:****");

Aber ich würde sowieso die einzelnen Mails nicht mit einer While Schleife verschicken, das dauert viel zu lang und der Server wird beansprucht. Ich würde lieber BCC nutzen!

Danke erstmal für die schnelle Antwort
habs eben probiert funktioniert leider nicht :(

kommen immer noch die Leerzeilen

zu den BBCodes:

die müssen doch auch mit str_replace oder preg_replace ersetzt werden?!
ist doch dann das gleich?!

MFG
 
Und so:
PHP:
$nachricht2 = str_replace('{Username}', $row['username'], $nachricht);
mail($row['mail'], $betreff, $nachricht2, "from:****");
$nachricht2="";

?

Mit BCC brauchst du nur eine Liste mit eMail Adressen die durch ein Komma getrennt werden und schickst dann nur eine einzige Mail weg. Bei jeder Wiederholung schickst du gerade eine Mail weg,was zu einer sehr hohen CPU-Last führen kann.

Nur leider kannst du so keinen Usernamen in Nachricht ersetzen, d.h. jeder Empfänger sieht das gleiche
 
sry für doppelpost aber ich hab grad mal probiert was passiert wenn ich das mit dem Replace des Usernames rausnehme

Es is das gleiche wie mit replace d.h die Mails werden trotzdem mit mehr und mehr leetzeilen versehen...

an was kann's sonst noch liegen?
 
Warum mehrere Leerzeilen in der eMail ankommen, ist aus diesem Code nicht nachvollziehbar. Poste mal den ganzen Code. Der Fehler muss irgendwo anders liegen.
 
Das ist der ganze Code das spielt sich alles in dieser einen datei ab
hab nur noch eine datei um die Mail hinzuzufügen also die registerseite:

das dürfte aber nichts damit zutun haben, trotzdem:

PHP:
  <html>
   <head>
    <title>Newsletter</title>
   </head>
   <body>
    <form action="newsletter.php" method="POST">
    <input type="TEXT" name="username" value="Nick" size="30"><br>
    <input type="TEXT" name="mail" value="r4x@gmx.de" size="30"><br>
    <input type="SUBMIT" name="go" value="Regestrieren">
    </form>
    <?
  	  if(isset($_POST['go']))
  	{
  		$host = 'localhost';
  		$name = '***';
  		$pass = '***';
  		$datenbank = 'newsletter';
  
 		$myconnection = mysql_connect($host, $name, $pass) or die('Konnte nicht verbinden<br>');
 		$selectdb = mysql_select_db($datenbank) or die('Konnte Datenbank nicht auswählen<br>');
  
  		$username = $_POST['username'];
  		$mail = $_POST['mail'];
  
  		$query = "INSERT INTO newsletter VALUES ('','$username','$mail')";
 		$result = mysql_query($query) or die('Konnte nicht in die Datenbank eintragen<br>');
  
  		echo "sie wurden erfolgreich regestriert";
  	}
    ?>
   </body>
  </html>
 
Zurück