Formularübergabe leer? Mailer verliert Formatierung
Cy
- php
0 Henryk Plötz0 Chris0 Henryk Plötz0 chris0 Henryk Plötz0 Chris0 Henryk Plötz0 Chris
hallo,
ich habe einen Mailer geschrieben. Die Nachricht soll über ein normales HTML Textarea-Feld übergeben werden.
<form action="exec/sendnews.php" method=post target=_blank enctype=text/plain>
ist da die Form Definition. Das Problem ist, es wird anscheinend nichts übergeben.
Wenn ich das enctype weglasse, bekomme ich die Variablen $message und $subject übergeben.
Wenn ich sie senden will, dann verliert der Newsletter jegliche formatierung- der Zeilenumbruch ist weg usw.
Ein nachträgliches Eintragen von von \n befördert ein \n zutage.
Ich bitte dringend um Hilfe, weil der Kunde mit im Nacken sitzt, und ich keine Ahnung habe was da los ist.
Viele Grüße und Danke
Chris
Moin
<form action="exec/sendnews.php" method=post target=_blank enctype=text/plain>
ist da die Form Definition. Das Problem ist, es wird anscheinend nichts übergeben.
Wenn ich das enctype weglasse, bekomme ich die Variablen $message und $subject übergeben.
Wenn ich sie senden will, dann verliert der Newsletter jegliche formatierung- der Zeilenumbruch ist weg usw.
Ein nachträgliches Eintragen von von \n befördert ein \n zutage.
Ich bitte dringend um Hilfe, weil der Kunde mit im Nacken sitzt, und ich keine Ahnung habe was da los ist.
Offensichtlich nicht. Erstmal: Des enctype ist da nicht nur falsch notiert (da gehören Anführungszeichen drumrum!) sondern auch falsch. Das willst du nur benutzen, wenn du mailto: als action hast. Ich hab sogar schonmal gesehen, dass text/plain einen Perl-Formmailer vollkommen verwirrt hat, so daß nix mehr ging. (Ich hoffe einfach mal, dass PHP damit klarkommt).
Zweitens: das mit dem \n ist auch vollkommen ok so. Du hast magic quotes eingeschaltet und dann werden die Backslashes eben escaped. Es würde auch nichts bringen \n hineinzuschreiben, da das eh nicht als Zeilenumbruch interpretiert wird. Stattdessen musst du die Zeilenumbrüche in das Textfeld eingeben.
Hast du dort zufällig wrap="virtual" oder sowas gesetzt? Eigentlich sollten die Zeilenumbrüche nämlich völlig problemlos mit rüberkommen.
Was hast du sonst noch gemacht? Hast du vielleicht einen Header gesendet der dem Mailclient einredet, er würde HTML-Code bekommen, dann aber vergessen nl2br() über den Text laufen zu lassen?
--
Henryk Plötz
Grüße aus Berlin
Hallo,
und erstmal vielen Dank für deine Hilfe. Nachfolgend werde ich deine Kommentare kommentieren :)
Offensichtlich nicht. Erstmal: Des enctype ist da nicht nur falsch notiert (da gehören Anführungszeichen drumrum!) sondern auch falsch. Das willst du nur benutzen, wenn du mailto: als action hast. Ich hab sogar schonmal gesehen, dass text/plain einen Perl-Formmailer vollkommen verwirrt hat, so daß nix mehr ging. (Ich hoffe einfach mal, dass PHP damit klarkommt).
Ok alles klar, das ist draußen.
Zweitens: das mit dem \n ist auch vollkommen ok so. Du hast magic quotes eingeschaltet und dann werden die Backslashes eben escaped. Es würde auch nichts bringen \n hineinzuschreiben, da das eh nicht als Zeilenumbruch interpretiert wird. Stattdessen musst du die Zeilenumbrüche in das Textfeld eingeben.
Hast du dort zufällig wrap="virtual" oder sowas gesetzt?
Eigentlich sollten die Zeilenumbrüche nämlich völlig problemlos mit rüberkommen.
Ja, ich habe wrap=physical gesetzt. Es hatte auch mal funktioniert...
Was hast du sonst noch gemacht? Hast du vielleicht einen Header gesendet der dem Mailclient einredet, er würde HTML-Code bekommen, dann aber vergessen nl2br() über den Text laufen zu lassen?
Ok hier eine Beschreibung der Dinge die ich in dem Skript gemacht habe, das die Daten verarbeitet.
Was ist eigentlich n12br() ?
Also:
Er schreibt ein Backup von $message in ein Datei
Er fragt nach wieviele Emails es zu versenden gibt
Er legt fest wieviele Emails er auf einmal versenden darf
Echo eines HTML Heads: Muß sein, da der Mailer mit mehreren Hüben die Mails verschickt. Hier refresht er sich mit diesem Header.
Er versendet die Emails, mit $message, wobei die Emails dann keinerlei Formatierung mehr aufweisen.
Ist der Code hilfreich? kann ich jederzeit posten.
Vielen Dank!
CY
--
Henryk Plötz
Grüße aus Berlin
Moin
Was ist eigentlich n12br() ?
Wandelt Zeilenumbrüche in <br>+Zeilenumbruch um. Wenn du HTML-Code ausgeben willst, und dabei deine Zeilenumbrüche erhalten bleiben sollen, brauchst du das. Hint: http://www.php.net/manual/de/ beantwortet alle deine Fragen zu vorgegebenen Funktionen.
Ist der Code hilfreich? kann ich jederzeit posten.
Ja, wäre sehr hilfreich. Ich tippe mal dadrauf dass den Text wieder aus der Datei holst und dabei die Zeilenumbrüche wegwirfst?
--
Henryk Plötz
Grüße aus Berlin
Moin
Was ist eigentlich n12br() ?
Wandelt Zeilenumbrüche in <br>+Zeilenumbruch um. Wenn du HTML-Code ausgeben willst, und dabei deine Zeilenumbrüche erhalten bleiben sollen, brauchst du das. Hint: http://www.php.net/manual/de/ beantwortet alle deine Fragen zu vorgegebenen Funktionen.
Danke, ich sehs mir mal an.
Ja, wäre sehr hilfreich. Ich tippe mal dadrauf dass den Text wieder aus der Datei holst und dabei die Zeilenumbrüche wegwirfst?
Nein, der Text bleibt in der Variable $message und wird von dort auch versandt
Hier der Code:
// ** INIT
if (!isset($startfrom))
{
$startfrom=0;
$fp = fopen("../backup/".time().".txt","a-");
if (fwrite($fp,$message));
fclose($fp);
}
// ** CONNECTION
$server="host";
$Benutzer ="ichselbst";
$Kennwort ="pass";
$verbindung = mysql_connect($server, $Benutzer, $Kennwort);
mysql_select_db("datenbank", $verbindung);
// ** Zaehlen der Emailadressen
$sql = "
SELECT *
FROM LIST_$liste
WHERE status='1'
";
// Status=1 bedeuted : bekommt den Letter
$result = mysql_query($sql);
$menge = mysql_num_rows($result);
// ** AUSLESEN DER HUB ADRESSEN
$sql = "
SELECT *
FROM LIST_$liste
WHERE status='1'
LIMIT $startfrom,$versendenProHub
";
$result = mysql_query($sql);
// ** START NEXT BERECHNEN / Anhalten des Programmes
$startnext = $startfrom + $versendenProHub;
$pruefsumme = $menge + $versendenProHub;
if ($startnext>$pruefsumme) { killitbaby(); }
// ** Header
echo (" <html>
<head>
<title> VERSENDE MAIL </title>
<meta http-equiv="refresh" content="3; URL=sendnews.php?startfrom=$startnext">
</title>
<body>
");
echo("<b class=message_ok> -> Backup des Newsletters geschrieben </b><br>");
// ** Versenden der Emails
while ($row = mysql_fetch_array($result))
{
echo("<b class=text>Versende Email an: ".$row["email"]."</b><br>");
$headers = "From: ".$fromadress."\r\nReply-To: ".$replyadress."";
if(!@mail($row["email"],$subject,$message,$headers))
{
echo "<b class=message_error> -> FEHLGESCHLAGEN</b><br>";
}
else
{
echo "<b class=message_ok> -> OK</b><br>";
}
}
echo("</body>");
function killitbaby()
{
echo ("Alle Letter versendet. Das Programm ist beendet.");
session_destroy();
die;
}
?>
--
Henryk Plötz
Grüße aus Berlin
Moin
Nein, der Text bleibt in der Variable $message und wird von dort auch versandt
Noe, der Text ist gar nirgendwo drin und wird verworfen. Ich kommentier das mal eben.
// ** INIT
if (!isset($startfrom))
{
$startfrom=0;
$fp = fopen("../backup/".time().".txt","a-");
if (fwrite($fp,$message));
// Sinnlose Anweisung ^
fclose($fp);
}
[snip]
// ** Zaehlen der Emailadressen
[snip]
$menge = mysql_num_rows($result);
// *autsch*, du hältst wohl nicht viel von SELECT COUNT(*) ?
[snip]
<meta http-equiv="refresh" content="3; URL=sendnews.php?startfrom=$startnext">
// Abgesehen davon, dass ich das mit header() lösen würde, wird hier gar nichts weiter übergeben. Das ist genauso als würdest du sendnews.php?startfrom=3 (mit beliebigen Werten für 3) in die Addressezeile eintippen. Soll das Skript den Nachrichtentext etwa raten?
[snip]
if(!@mail($row["email"],$subject,$message,$headers))
// Weder $subject noch $message können hier bekannt sein
[snip]
?>
--
Henryk Plötz
Grüße aus Berlin
Moin
Nein, der Text bleibt in der Variable $message und wird von dort auch versandt
Noe, der Text ist gar nirgendwo drin und wird verworfen. Ich kommentier das mal eben.
Die $message und $subject wird doch vom Forumlar hierher übergeben? Das Feld des Formulars heißt eben auch message zb.
// ** INIT
if (!isset($startfrom))
{
$startfrom=0;
$fp = fopen("../backup/".time().".txt","a-");
if (fwrite($fp,$message));
// Sinnlose Anweisung ^
fclose($fp);
}
Wieso sinnlos? Die Datei ist gefüllt.
[snip]
// ** Zaehlen der Emailadressen
[snip]
$menge = mysql_num_rows($result);
// *autsch*, du hältst wohl nicht viel von SELECT COUNT(*) ?
Oh, das kenn ich gar nicht. Ich sehs mir an, danke :)
[snip]
<meta http-equiv="refresh" content="3; URL=sendnews.php?startfrom=$startnext">
// Abgesehen davon, dass ich das mit header() lösen würde, wird hier gar nichts weiter übergeben. Das ist genauso als würdest du sendnews.php?startfrom=3 (mit beliebigen Werten für 3) in die Addressezeile eintippen. Soll das Skript den Nachrichtentext etwa raten?
Ich hatte vor, eine Session am Anfang zu eröffnen, um das alles nicht übergeben zu müssen. Das mit dem Header werd ich mir ansehen :)
[snip]
if(!@mail($row["email"],$subject,$message,$headers))
// Weder $subject noch $message können hier bekannt sein
Ja wieso?
Wie gesagt, das Formular solls ja hierher übergeben,
wieso kann das nciht bekannt sein? Versteh ich nicht.
Gruß
CY
[snip]
?>
--
Henryk Plötz
Grüße aus Berlin
Moin
Wieso sinnlos? Die Datei ist gefüllt.
Ich meinte das if ( ) ; ist sinnlos. Da steht "Wenn das Schreiben erfolgreich war, dann tue nichts, wenn das Schreiben nicht erfolgreich war, dann tue auch nichts".
Wie gesagt, das Formular solls ja hierher übergeben,
wieso kann das nciht bekannt sein? Versteh ich nicht.
Wenn du nicht irgendwo noch einen genialen Codeteil aus dem Hut ziehst, ist es aber trotzdem so, dass $message nur einmal, beim Abschicken deines ursprünglichen Formulars übergeben wird. Danach wird dann das Skript immer wieder nur mit dem einzigen Parameter startfrom aufgerufen.
--
Henryk Plötz
Grüße aus Berlin
Moin
Wieso sinnlos? Die Datei ist gefüllt.
Ich meinte das if ( ) ; ist sinnlos. Da steht "Wenn das Schreiben erfolgreich war, dann tue nichts, wenn das Schreiben nicht erfolgreich war, dann tue auch nichts".
Wie gesagt, das Formular solls ja hierher übergeben,
wieso kann das nciht bekannt sein? Versteh ich nicht.
Wenn du nicht irgendwo noch einen genialen Codeteil aus dem Hut ziehst, ist es aber trotzdem so, dass $message nur einmal, beim Abschicken deines ursprünglichen Formulars übergeben wird. Danach wird dann das Skript immer wieder nur mit dem einzigen Parameter startfrom aufgerufen.
--
Henryk Plötz
Grüße aus Berlin
Hi,
ne kein genialer Codeteil, wie gesagt... ne Session hoffentlich :)
Ähm, ok dein Tip mit nl2.. hat geholfen. Ich hab jetzt alles da, nur noch eine Frage:
Wenn mein Formular " übergibt, wird daraus "
Wie stelle ich es an das in der Mail dann wieder " dasteht?
Gruß
Cy
Moin
Wenn mein Formular " übergibt, wird daraus "
Wie stelle ich es an das in der Mail dann wieder " dasteht?
http://www.php.net/manual/de/function.stripslashes.php ist dein Freund.
--
Henryk Plötz
Grüße aus Berlin