mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 00:17 Benutzername: Passwort: Auto-Login

Thema: PHP Newsletter personalisieren vom 08.03.2010


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP Newsletter personalisieren
Autor Nachricht
SiriusBlack
Threadersteller

Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Mo 08.03.2010 15:43
Titel

PHP Newsletter personalisieren

Antworten mit Zitat Zum Seitenanfang

Hallo,
ich würde meine Newsletter gerne personalisieren.
Die E-Mail Adressen kommen aus einer Datenbank.

Damit Speicher ich die Werte aus der Datenbank in jeweils einem Array:
Code:
 
while ($row = mysql_fetch_assoc($ergebnis)) 
 {     $receivers[] = $row['Email'];
        $anreden[] = $row['Anrede']; 
        $vornamen[] = $row['Vorname'];
        $namen[] = $row['Name'];
  }         
                                   



Und damit leg ich die Empfänger fest und verschicke die Mail:

Code:
foreach ($receivers as $receiver)
                     {
                       //Empfänger setzen
                            $mail->AddAddress($receiver);
  if(!$mail->Send())
                               {
                                      echo "Die Email konnte nicht gesendet werden<br>";
                                      echo "Fehler: " . $mail->ErrorInfo;
                               }
                              else
                              {
                                      echo "Die Email wurde versandt.<br>";
                                                               
                              }
 
     
                              $mail->ClearAddresses();
                     }     
                   



wenn ich jetzt beispielsweise das schreibe,
Code:

foreach ($namen as $name){
$mailtext.=$name;
}


um den Namen von jedem Empfänger in die Anrede des Newsletters zu setzten, werden logischerweise sämtliche Werte aus der Datenbank hintereinander in die Anrede gesetzt.
Was muss ich denn jetzt für eine Bedingung daran knüpfen, damit jeder Empfänger nur seinen Namen in der Anrede hat?
  View user's profile Private Nachricht senden
pRiMUS

Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht: Männlich
Verfasst Mo 08.03.2010 16:09
Titel

Antworten mit Zitat Zum Seitenanfang

wenn die daten eh schon aus einer datenbank kommen, warum verpackst du dann alles einzeln in einem array um das dann nochmal zu durchlaufen? das ist doch unsinn.

Code:

while ($row = mysql_fetch_assoc($ergebnis))
 {     
   $mail->addTo($row['Email']);
   $anrede = $row['Anrede'] ." ". $row['Vorname'] ." ". $row['Name'] .",\n";
   $emailtext = $anrede . $textvonwoandersher;
   $mail->send();
  } 
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
SiriusBlack
Threadersteller

Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Mo 08.03.2010 17:15
Titel

Antworten mit Zitat Zum Seitenanfang

Vielen Dank für die Hilfe, jetzt stehen die richtigen Anreden im Newsletter,
aber bei meinen drei Testadressen kommt jede Mail drei mal an (wenn ich nur mit 2 Adressen teste kommt jede Mail zwei mal an...) und bei GMX steht jeder Name einmal drin (Mail 1-> Name 1., Mail 2-> Name 2 usw.) woran kann das liegen?
  View user's profile Private Nachricht senden
Eistee
Administrator

Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht: Männlich
Verfasst Mo 08.03.2010 21:41
Titel

Antworten mit Zitat Zum Seitenanfang

Das wird in deinem Anfangscode doch einen Sinn gehabt haben Grins

Code:
$mail->ClearAddresses();
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
SiriusBlack
Threadersteller

Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Di 09.03.2010 09:45
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Das wird in deinem Anfangscode doch einen Sinn gehabt haben

Code:
$mail->ClearAddresses();


Das hab ich auch noch drin....warum zwei Mails ankamen weiß ich nun, es war ein mail() zuviel drin.
Das Problem was ich jetzt noch habe besteht darin, das jede Testadresse eine Mail mit 3 Newslettern bekommt, mit jeweils einen anderen Namen in der Anrede.

Scheinbar liegt das daran, wann ich die Klammer zum beenden der While-Schleife setze.

Mein aktueller Code (verkürzt):
Code:
//Datenbankverbindung                               
                     //Abfrage
                     $ergebnis = mysql_query($abfrage);   
                     
                     while ($row = mysql_fetch_assoc($ergebnis))
                             {   
                           
                            $mail->AddAddress($row['Email']);                               
                            $anrede = $row['Anrede'] ." ". $row['Vorname'] ." ". $row['Name'] .",\n";
                                           
                            $mailtext.='HTML Code';
                            $mailtext.=$anrede;
                            $mailtext.='Text +HTML Code';
                     
                            $mail->Body  =  "$mailtext";


                            // Reine Textausgabe:                   

                            $alt_mailtext = 'text';
                            $mail->AltBody  = "$alt_mailtext";           
                                         
                            $mail->send();
                            $mail->ClearAddresses();       
                            }     
                   


Wenn ich nun die Klammer vor $mailtext schließe, kommt eine Mail mit nur einem Newsletter an, aber immer mit dem letzten Eintrag in der Datenbank. Und es werden alle Empfänger der Mail angezeigt. Setze ich die Klammer so wie im Moment, kommen wie gesagt 3 Newsletter in einer Mail mit allen Namen. Was mache ich falsch?


Zuletzt bearbeitet von SiriusBlack am Di 09.03.2010 09:46, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
Eistee
Administrator

Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht: Männlich
Verfasst Di 09.03.2010 10:01
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
$mailtext.='HTML Code';
$mailtext.=$anrede;
$mailtext.='Text +HTML Code';


Dadurch wird $mailtext bei jedem Durchlauf länger, teste mal:

Code:
$mailtext = 'HTML Code';
$mailtext .= $anrede;
$mailtext .= 'Text +HTML Code';


Falls das auch nichts hilft:

Gibt es bei deiner Mailklasse (was ist das für eine?) auch sowas wie $mail->ClearBody(); oder allgemein ein Reset welches du am ende jedes Schleifendurchlaufs ausführen könntest?


Zuletzt bearbeitet von Eistee am Di 09.03.2010 10:02, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
SiriusBlack
Threadersteller

Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Di 09.03.2010 10:21
Titel

Antworten mit Zitat Zum Seitenanfang

Als Mailklasse hab ich den PHPMailer verwendet.

Aber mit
Code:
$mailtext = 'HTML Code';
klappt es jetzt wie es soll, vielen Dank Grins *Thumbs up!*
  View user's profile Private Nachricht senden
 
Ähnliche Themen HTML Newsletter personalisieren?
Fotos für Newsletter durch öffnen des Newsletter downloaden
Kleiner Newsletter Client - Newsletter an 200 Adressen?
HTML/ Newsletter <--> Flash Newsletter?
Personalisieren mit Bild
Kartenausschnitte personalisieren / vektorisieren
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.