• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP-Formmailer mit SWIFT Mailer

Körnerbrötchen

Aktives Mitglied
Hey zusammen,
ich habe eben mal wieder ein Kontaktformular zusammengebaut und da ich mir dachte, dass ich nicht wieder mein uralt-Script von vor 6 Jahren nutze wollte, habe ich mich mal nach einer Bibliothek umgeschaut und bin dabei über PHP: Fortgeschrittener PHP-Formmailer gestolpert (kannte ich vorher gar nicht^^). Ich habe den PHP-Teil jedoch anders als dort ausgelagert und ein verstecktes Input-Feld und eine versteckte textarea eingebunden. Zu finden ist das Script unter td-box.no-ip.org/outtakes. Leider wird der Inhalt der textarea nicht in die Mail geschrieben. Das fehlt einfach. Es liegt auch nicht am SPAM-Schutz. Das konnte ich ausschließen. Entferne ich nämlich die if-Verzweigung, dann kommt das versteckte input-Feld an, aber beide textareas nicht. Wo ist der Fehler? Ich finde ihn nicht…

Die PHP-Datei sieht so aus:
Code:
<?php
header("Content-type: text/html; charset=utf-8");


// An welche Adresse sollen die Mails gesendet werden?
$zieladresse = '[email protected]';


// Welche Adresse soll als Absender angegeben werden?
// (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$absenderadresse = '[email protected]';


// Welcher Absendername soll verwendet werden?
$absendername = 'OUTtakes Website';


// Welchen Betreff sollen die Mails erhalten?
$betreff = 'Feedback über Ihre Website';


// Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
// Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$urlDankeSeite = 'http://www.outtakes-bonn.de/profil/danke';


// Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$trenner = ":\t"; // Doppelpunkt + Tabulator


require_once "maillib/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($name == 'text' or $name == 'surname') {
        if($wert != 'Hier bitte nichts eintragen/verändern!') {
            die('SPAM-Schutz: Der Versand der Mail wurde abgebrochen! Bitte verändern Sie das zweite Input-Feld und das zweite Textfeld nicht!');
            exit;
        }
    } else { 
        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('Ein unerwarteter Fehler ist aufgetreten. Die Mail konnte nicht versandt werden. Das tut uns Leid. Bitte versuchen Sie es noch einmal!');
    }


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

Besten Gruß
Körnerbrötchen

PS: Ich wäre recht dankbar, wenn gleich keine 20.000 Mails in mein Postfach klettern. ;)
 
Werbung:
Steht im Body der E-Mail gar nichts oder fehlt lediglich der Inhalt der Textarea? Falls ersteres zutrifft, tausch...


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

...durch...

PHP:
 $message->setBody('testnachricht', 'text/plain');

...aus. Dann sieht man immerhin schonmal ob die Library funktionstüchtig ist.
 
Werbung:
Hast du dir $_POST mal direkt angeschaut ob auch alle Werte übertragen wurden?

bzw. mal folgendes machen:

PHP:
foreach ($_POST as $name => $wert) {
    echo 'Feld: '.$name.'<br>Wert: '.$wert.'<br><br>';
}
 
Ich find das IF-Konstrukt in der foreach-Schleife etwas misslungen. Die is_array-Überprüfung ist überflüssig.

Versuch mal folgendes:
PHP:
<?php
header("Content-type: text/html; charset=utf-8");  

 // An welche Adresse sollen die Mails gesendet werden? 
$zieladresse = '[email protected]';  

 // Welche Adresse soll als Absender angegeben werden? 

// (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben) 
$absenderadresse = '[email protected]';   

// Welcher Absendername soll verwendet werden? 
$absendername = 'OUTtakes Website';   

// Welchen Betreff sollen die Mails erhalten? 
$betreff = 'Feedback über Ihre Website';   

// Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden? 
// Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben! 
$urlDankeSeite = 'http://www.outtakes-bonn.de/profil/danke';  

$delimiter = ":\t";

require_once "maillib/swift_required.php"; // Swift initialisieren

if (isset($_POST['name']) && isset($_POST['email'])) {

    if (!isset($_POST['surname']) || $_POST['surname'] !== 'Hier bitte nichts eintragen/verändern!' ||
        !isset($_POST['text']) || $_POST['text'] !== 'Hier bitte nichts eintragen/verändern!'
        ) {
        die(); // spam - abbrechen    
    }    
        
    $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);    
        
    $message->setBody(
          'Name' . $delimiter . $_POST['name']
        . 'E-Mail' . $delimiter . $_POST['email']
        . 'Telefon' . $delimiter . $_POST['tel']
        . 'Anliegen' . $delimiter . $_POST['anliegen'],     
        'text/plain'
    );

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

    if ($result == 0) {
        die('Ein unerwarteter Fehler ist aufgetreten. Die Mail konnte nicht versandt werden. Das tut uns Leid. Bitte versuchen Sie es noch einmal!');
    }

    header("Location: $urlDankeSeite");
    exit;        
}
?>
 
Ja, hab ich. Und aus einem mir vollkommen unplausiblen Grund funktioniert es jetzt auch. Zu verstehen warum, habe ich aufgegeben.

edit: Sehe gerade erst deinen Post, T!P-TOP: Ja, das ist in diesem Fall korrekt. Liegt aber daran, dass ich das Lib nur ausprobieren wollte und per Copy&Paste das Beispiel genutzt habe. Das ermöglicht auch Radio-Buttons und Auswahllisten und so nen Kram.
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben