Forenindex » Programmierung/Entwicklung » PHP und MySQL » responseMailer

responseMailer

troll_13
Beiträge gesamt: 40

13. Feb 2012, 19:20
Bewertung:

gelesen: 1673

Beitrag als Lesezeichen
Hallo
Ich habe ein Problem mit einem Antwort-Mailer. Der Kunde gibt mit einem Formular eine Bestellung auf. Dieses Formular wird zwar ausgeliefert, aber weder in html, noch kommen die Variablen mit (ich möchte den Formularinhalt bekommen: Was für Schokolade und was für Früchte hat er bestellt). Was habe ich für einen Fehler in dem Code?
Danke im Voraus für einen Tipp!
Code
<?php 
//Empfänger aus Formular

$empfaenger = $_POST["mail"];
$betreff = 'Bestellbestätigung';


// Nachricht
$nachricht = '
<html>
<head>
<title>Bestellbestätigung</title>
</head>
<body>
<p>Du hast folgende Angaben gemacht:</p>
<table>
<tr>
<th>Name</th><th>Vorname</th><th>Jahrgang</th><th>Jahr</th>
</tr>
<tr>
<td>$_POST["schoggi"]</td><td>3.</td><td>$_POST["frucht"]</td><td>$_POST["computer"]</td>
</tr>
</table>
</body>
</html>
';

$_SERVER['REQUEST_METHOD'] === "POST";

// für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/plain; charset=utf-8' . "\r\n";
// zusätzliche Header
$header .= 'From: Bestellbestätigung <bestellung@gmx.ch>' . "\r\n";


// verschicke die E-Mail
mail($empfaenger, $betreff, $nachricht, $header) or die("Die Mail konnte nicht versendet werden.");
header("Location: danke.html");
header("Content-type: text/html; charset=utf-8");
?>

responseMailer

Pozor
Beiträge gesamt: 892

13. Feb 2012, 23:04
Bewertung:

gelesen: 1649

Beitrag als Lesezeichen
Hallo Troll,

als erstes, Du öffnest Spamer Tür und Tor mit deinem Script!

Die Empfänger Emailadresse als POST Parameter zu akzeptieren ist
grober Unfug und eine Absicherung muss eingebaut werden.

Ansonsten kann man an beliebige Emailadresse Emails versenden.
Zwar mit deinem HTML aber wiederum beliebigen Inhalt deiner Variablen.

z.B. Prüfe den HTTP_REFERER in $_SERVER wobei auch dies sehr einfach gefaked
werden kann.
Setze in der Session eine Variable, timestamp die ein Emailversand nur einmal zulässt.
-> beim Versand löschen und nur versenden wenn vorhanden.
etc.

Am besten wäre es wenn der User ein Konto hat und du an die im Konto registrierte Email das Email versenden würdest ohne die Email über POST Parameter zu übermitteln...

Diese Zeile macht gar nix:
$_SERVER['REQUEST_METHOD'] === "POST";



Zu deiner eigentlichen Frage:
$nachricht = '... $_POST["schoggi"] ...';
Der String wird genau so übernommen, da er nicht verarbeitet wird.

So wird der String verarbeitet:
$nachricht = "... ".$_POST["schoggi"]." ...";


Gruss Stefan


"KISS - KEEP IT SIMPLE, STUPID"
PHP Documentation Download

responseMailer

troll_13
Beiträge gesamt: 40

14. Feb 2012, 11:53
Bewertung:

gelesen: 1599

Beitrag als Lesezeichen
Herzlichen Dank Stefan!
Nach ein bisschen üben, habe ich es geschafft. Aber wie erstelle ich das nun mit dem?

Zitat Setze in der Session eine Variable, timestamp die ein Emailversand nur einmal zulässt.
-> beim Versand löschen und nur versenden wenn vorhanden.
etc.

Was für ein Code wäre das? Habe ich nicht verständlich gefunden im Netz. Und ich sollte das ja in dem Fall schon einbauen.
Vielen Dank!

responseMailer

Pozor
Beiträge gesamt: 892

18. Feb 2012, 00:45
Bewertung:

gelesen: 1553

Beitrag als Lesezeichen
Hallo,

Sessions in PHP starten mit session_start (nur mit cookies erlauben).

Danach kannst Du z.B. auf der Absender-Seite beim Aufruf folgendes setzen:
Code
$_SESSION['validation'] = time(); 


Auf dem Empfänger Script dann testen mit:
Code
if($_SESSION['validation'] > time() - 900) 
{ //15min zeit zum absenden, danach wird alles verworfen
//sende Email
unset($_SESSION['validation']); //token löschen
}
else
{
//sende email nicht -> fehlermeldung ausgeben
}

Das ist was sehr einfaches und unterbindet den Missbrauch nur bedingt.
Dürfte aber für den Anfang reichen (man muss die Absender Seite Aufrufen und
cookies aktiviert haben um Emails versenden).

Noch besser wäre da ein Captcha um echte User von Maschinen zu unterscheiden.


Gruss Stefan


"KISS - KEEP IT SIMPLE, STUPID"
PHP Documentation Download