Swiftmailer Problem mit der Danke-Seite

kraftwerk

Aktives Mitglied
Thread Starter
Dabei seit
09.01.2005
Beiträge
669
Reaktionspunkte
1.400
Hallo zusammen,

Ich hoffe, es gibt hier jemanden mit Erfahrung mit Swiftmailer. Ich habe folgendes Problem: Versand der Mail aus einem php-Formular funktioniert einwandfrei, nur die Weiterleitung auf die Danke-Seite (=.html) klappt nicht.

Code sieht so aus:


<?php
$zieladresse = 'admin@xxxx.de';
$absenderadresse = 'admin@xxxx.de';
$absendername = 'Anfrage von der Webseite';
$betreff = 'Bitte um Rückruf';
$urlDankeSeite = 'http://www.xxxx.de/dank.html';
$trenner = ":\t"; // Doppelpunkt + Tabulator


require_once "Swift-5.0.1/lib/swift_required.php"; // Swift initialisieren
if ($_SERVER['REQUEST_METHOD'] === "POST") {

$message = Swift_Message::newInstance(); // Ein Objekt für die Mailnachricht.

$message
->setFrom(array($absenderadresse => $absendername))
->setTo(array($zieladresse)) // alternativ existiert setCc() und setBcc()
->setSubject($betreff);

$mailtext = "";

foreach ($_POST as $name => $wert) {
if (is_array($wert)) {
foreach ($wert as $einzelwert) {
$mailtext .= $name.$trenner.$einzelwert."\n";
}
} else {
$mailtext .= $name.$trenner.$wert."\n";
}
}

$message->setBody($mailtext, 'text/plain');

$mailer = Swift_Mailer::newInstance(Swift_MailTransport::newInstance());
$result = $mailer->send($message);

if ($result == 0) {
die("Mail konnte nicht versandt werden.");
}

header("Location: $urlDankeSeite");
exit;
}

header("Content-type: text/html; charset=utf-8");

?>

Wäre toll, wenn mir jemand einen Lösungsansatz geben könnte. Nach dem Versand wird die Seite weiß und in der Adresszeile des Browsers bleibt die contact.php (die Formularseite) stehen.

Viele Grüße, Kraftwerk
 
fehlt da vielleicht nur das:

if ($result == 0) {
die("Mail konnte nicht versandt werden.");
}
else {
header("Location: $urlDankeSeite");
exit;
}
 
Nein, wenn ich ein else { einfüge bleibt die Seite von Anfang an weiss. Ich habe dasselbe Script auch auf einer anderen Seite laufen und da leitet es einwandfrei weiter.
 
Der weiße Screen kommt von der Zeile hier:

header("Content-type: text/html; charset=utf-8");


Wozu?

So rein gedanklich gibt es doch nur 2 Optionen:
a) Mailversand ging schief, Fehlermeldung
b) Erfolgreich, Dankeseite.

Welchen Sinn hat die leere Seite und wann soll sie kommen???
 
Danke für den Hinweis, nur bleibt es trotzdem bei der weissen Seite.
 
Es war eine Frage...


Das Script im Wesentlichen:

....Mailinhalt basteln...


senden....

wenn erfolgreich
(danke-Seite)
else
(fehlermeldung)

Da ist kein Platz mehr für eine weiße Seite...
 
Ja klar, das habe ich schon alles verstanden. Die weisse Seite hat sich durch Übernahme des Scriptes aus einer anderen Seite von mir eingeschlichen (die, die damit problemlos läuft). Aber auch wenn ich diesen header entferne, bleibt alles wie gehabt. Ich bin Gestalter und kein Programmierer …
 
schau mal in die Log-Dateien! Steht da vielleicht etwas von "Headers already sent" ? Alternativ kannst Du auch im PHP-Script mal Alle Warnungen aktivieren und auf dem Bildschirm ausgeben lassen! Header("Location") ist mit viel Vorsicht zu geniessen!

kraftwerk schrieb:
Ich bin Gestalter und kein Programmierer …

..und ich bin Programmierer und gestalte nicht, weil ich weiß wo meine Grenzen sind :)
 
Zwar ist die Frage uralt, doch leider wurde keine Lösung gepostet.
Da ich jetzt ebenfalls vor dem Problem stand, war das für mich sehr unbefriedigend.
Des Rätsels Lösung, bzw. der Fehler ist BOM (Byte Order Mark; deutsch Bytereihenfolge-Markierung).
Hierbei handelt es sich um unsichtbare Zeichen, die der der Editor, weil er ganz schlau ist, an den Anfang des Scripts gesetzt hat. Man sieht ihn nicht, man riecht ihn nicht und daher findet man den Fehler auch nicht.
<?php muss ganz am Anfang stehen, kein Leerzeichen vorweg oder halt unsichtbare Zeichen.
Ich habe das Script mit einen einfachen Text-Editor in eine simple TXT kopiert und diese in php umbenannt. Jetzt klappt es.
Ob BOM vorliegt, kann man hier checken:
https://validator.w3.org/i18n-checker/
 
ja, auch "Headers already sent" ! Das ist ein gängiges Problem bei HTML, es reicht ein unbeabsichtigtes Zeichen und schon ist HTML-Output da. Deswegen auch der Rat immer in die Log-Dateien zu schauen. Manchmal ist es wie hier ein BOM, das andere mal eine unbeabsichtigte angefügte Leerzeile in einem includierten script.
 
Zurück
Oben Unten