Autor |
Nachricht |
SiriusBlack
Threadersteller
Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mo 08.03.2010 15:43
Titel PHP Newsletter personalisieren |
|
|
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?
|
|
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst Mo 08.03.2010 16:09
Titel
|
|
|
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();
}
|
|
|
|
|
|
Anzeige
|
|
|
SiriusBlack
Threadersteller
Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mo 08.03.2010 17:15
Titel
|
|
|
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?
|
|
|
|
|
Eistee
Administrator
Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht:
|
Verfasst Mo 08.03.2010 21:41
Titel
|
|
|
Das wird in deinem Anfangscode doch einen Sinn gehabt haben
Code: | $mail->ClearAddresses(); |
|
|
|
|
|
SiriusBlack
Threadersteller
Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht:
|
Verfasst Di 09.03.2010 09:45
Titel
|
|
|
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
|
|
|
|
|
Eistee
Administrator
Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht:
|
Verfasst Di 09.03.2010 10:01
Titel
|
|
|
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
|
|
|
|
|
SiriusBlack
Threadersteller
Dabei seit: 04.09.2009
Ort: -
Alter: -
Geschlecht:
|
Verfasst Di 09.03.2010 10:21
Titel
|
|
|
Als Mailklasse hab ich den PHPMailer verwendet.
Aber mit Code: | $mailtext = 'HTML Code'; | klappt es jetzt wie es soll, vielen Dank
|
|
|
|
|
|
|
|
Ä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
|
|