Wenn du die mail.php um die Eingabe- und Sicherheitsüberprüfung bereinigst, brauchst du nur die (also nicht die funktionen.php), ein template für die Email und halt ein Formular.
Moin.
Ich bin jetzt schon länger dabei, mich in dieses Tutorial einzuarbeiten und habe leider so meine Schwierigkeiten mit. Ich bekomme echt langsam die Krise.
Ich möchte keine Anhänge versenden. Es sollte lediglich Name, Adresse, Telefon, Email und frei editierbare Information übermitteln. Diese "fnktionen.inc.php" brauche ich doch nicht unbedingt dafür, oder?
Jetzt finde ich mehrere mail.php Dateien im Tutorial... und jede sieht hat unterschiedlich Daten. Es gibt doch nur eine mail.php in der alles Notwendige vermerkt ist, oder?
Wenn ich´s kapiert habe dann ist doch mail.php das Ergebnis, welches ich dann auch als mail.php brauche, oder?
Sorry, vor PHP habe ich wohl zu viel Respekt. Das Formatieren mit CSS bekomme ich dann aber hin.PHP-Code:<?php
header( 'Content-Type: text/html; charset=utf-8' );
// Empfänger Email
$empfaenger = 'max.mustermann@domain.tld';
// Prüfen ob das Formular abgeschickt wurde
if (isset($_POST['senden']))
{
// Funktionen einbinden
include( 'funktionen.inc.php' );
// Benutzereingaben bereinigen und auf Injection prüfen
cleanInput();
// Name prüfen
$name = checkName( $_POST['name'] );
// Email prüfen
$email = checkEmail( $_POST['email'] );
// Betreff und Nachricht prüfen
if ((strlen( $_POST['betreff'] ) < 5) || (strlen( $_POST['nachricht'] ) < 5))
{
die( 'Bitte füllen Sie alle Felder aus!' );
}
else
{
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];
}
// --------------------------------------------------------------------------------
// Wurde das Script bisher nicht abgebrochen, wurde das Formular korrekt ausgefüllt
// --------------------------------------------------------------------------------
// Template mit dem Mailbody laden und für den Versand vorbereiten
$mailbody = file_get_contents( 'mailbody.txt' );
// Platzhalter mit den Benutzereingaben ersetzen
$mailbody = str_replace( '###NAME###', htmlspecialchars( $name ), $mailbody );
$mailbody = str_replace( '###EMAIL###', $email, $mailbody );
$mailbody = str_replace( '###NACHRICHT###', htmlspecialchars( $nachricht ), $mailbody );
// Mail Header erstellen
$mailheader = "From: PHP Email Tutorial<noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "Reply-To: " .$name. "<" .$email. ">\r\n";
$mailheader .= "Return-Path: noreply@" .$_SERVER['SERVER_NAME']. "\r\n";
$mailheader .= "MIME-Version: 1.0\r\n";
$mailheader .= "Content-Type: text/plain; charset=UTF-8\r\n";
$mailheader .= "Content-Transfer-Encoding: 7bit\r\n";
$mailheader .= "Message-ID: <" .time(). " noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "X-Mailer: PHP v" .phpversion(). "\r\n\r\n";
// Email versenden
if (@mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader ))
{
// Bei erfolgreichem Versand Danke-Seite anzeigen
echo 'Danke, die Email wurde verschickt!';
}
}
?>
Lg,
Michael
Back to business!
Wenn du die mail.php um die Eingabe- und Sicherheitsüberprüfung bereinigst, brauchst du nur die (also nicht die funktionen.php), ein template für die Email und halt ein Formular.
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
Hallo Michael,
wenn Du keine Mails mit Anhang verschicken möchtest, dann solltest Du auch nicht das Script dafür benutzen. Im Download sind 3 Ordner, die sich aufteilen in:
- Mail als einfacher Text
- Mail als HTML
- Mail als HTML mit Anhang
Du brauchst also nicht alle Dateien, sondern nur eben die Dateien für das was Du vorhast aus dem entsprechenden Ordner.
Die funktionen.inc.php beinhalten sicherheitsrelevante Funktionen. Wenn Du diese entfernst, wird das Script zu einer Spamschleuder.
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Danke für die Antworten. Ich muß da aber noch mal nachhaken.
Für mich ist also die Datei "html_email" ausreichend. Und Dein Einwand Andreas, mit der Spamschleuder ist natürlich wichtig! Möchte ich nicht haben. Die "fnktionen.inc.php" lege ich auch auf dem Server ab, so dass dann meine mail.php Zugriff drauf nimmt!? Sehe ich das richtig?
Code:// Funktionen einbinden include( 'funktionen.inc.php' );
Back to business!
Hallo Michael,
genau, wenn Du HTML-Emails empfangen kannst nimmst Du die Dateien im "html_email", falls Du dir nicht sicher bist, nimmst Du "text_email". Im Prinzip sind die Dateien, so wie sie sind, einsatzbereit, aber dennoch würde ich die Dateien so nicht in einem Produktivsystem übernehmen, da es sich hierbei um ein Tutorial handelt das zeigen soll, wie man es machen kann.
Um es auf einer echten Seite einzusetzen sollte man da schon noch etwas Zeit investieren, um auf Eingabefehler u.ä. zu reagieren. Momentan wird das Script einfach mit einer knappen Fehlermeldung abgebrochen, was natürlich den Benutzer eher verwirren wird, als das es hilft.
Falls Dir das aber egal ist, einfach die HTML-Datei per CSS anpassen, die Empfänger Email in der mail.php anpassen und fertig.
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Ach echt?! Hier // Empfänger Email
$empfaenger = 'michael@php-nullChecker.de'; meine email eintragen?
Mehr erstmal nicht?!? Na dann. Gut. Wenn ich daran denke, dass meine bisherige mail.php die volle Spamschleuder war, ist diese doch Gold wert!
Da ich mir allerdings sicher bin, dass ich noch mal was fragen muß und ich Dich warmhalten möchte... erstmal auf diesem Weg ein GROSSES DANKESCHÖN!![]()
Back to business!
Hallo Andreas,
htaccess hat leider keine Veränderung gebracht.
Das "Komische" ist halt, dass ich in dem selben Verzeichnis auch andere php-Dateien liegen habe, die ohne Probleme funktionieren und die Seite auch zum Großteil in php geschrieben ist. Stichwort: News, dynamischer Terminkalender usw, alles in PHP.
PHP wird definitiv unterstützt, soviel kann ich sagen
Demnach kann dies als Fehlerquelle ausgeschlossen werden.
Ich dachte, dass es vielleicht an header() in der mail.php liegen könnte, hab das raus und statt dessen headerinfos von Hand eingetragen -> Keine Veränderung
Des Weiteren habe ich ein bisschen mit target und enctype in der formular.htm gespielt -> keine Veränderung!
Da mir im Moment nichts mehr einfällt, werde ich wohl meinen Hoster ansprechen, obwohl ich befürchte, dass das mich nicht wirklich weiterbringen wird, da der einfach sagen wird "PHP ist aktiv, alles iO". Abgesehen davon muss mir erstmal einfallen, wie ich dem dieses Prob verständlich schildere.Naja, ich geb Bescheid, sobald ich weiter bin...
Gruß, Joachim
Hallo alle zusammen,
habe ebenfalls noch eine Frage, zwecks der Implementierung der Empfangsbestätigung.
Komme irgendwie nicht weiter. Habe den Code folgendermaßen integriert:bekomme jetzt zwei gleiche Mails an $empfaenger, und keine an $email.PHP-Code:// Wurde das Script bisher nicht abgebrochen, wurde das Formular korrekt ausgefüllt
// --------------------------------------------------------------------------------
// Template mit dem Mailbody laden
$template = file_get_contents( 'mailbody.txt' );
// Trenner für den Anhang
$trenner = md5( time() );
// Platzhalter mit den Benutzereingaben ersetzen
$template = str_replace( '###NAME###', htmlspecialchars( $name ), $template );
$template = str_replace( '###EMAIL###', $email, $template );
$template = str_replace( '###NACHRICHT###', nl2br( htmlspecialchars( $nachricht ) ), $template );
// Mail Header erstellen
$mailheader .= "Reply-To: " .$name. "<" .$email. ">\r\n";
$mailheader .= "Return-Path: noreply@" .$_SERVER['SERVER_NAME']. "\r\n";
$mailheader .= "Message-ID: <" .time(). " noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "X-Mailer: PHP v" .phpversion(). "\r\n";
$mailheader .= "From: PHP Email Tutorial<noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "MIME-Version: 1.0\r\n";
$mailheader .= "Content-Type: multipart/mixed;\r\n";
$mailheader .= " boundary = " .$trenner;
$mailheader .= "\r\n\r\n";
// Mailbody vorbereiten
$mailbody = "This is a multi-part message in MIME format\r\n";
$mailbody .= "--" .$trenner. "\r\n";
$mailbody .= "Content-Type: text/html; charset=UTF-8\r\n";
$mailbody .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$mailbody .= $template. "\r\n\r\n";
// Anhang anfügen
$mailbody .= "--" .$trenner. "\r\n";
$mailbody .= "Content-Type: image/jpeg; name=\"" .$uploadname. "\"\r\n";
$mailbody .= "Content-Transfer-Encoding: base64\r\n";
$mailbody .= "Content-Disposition: attachment; filename=\"" .$uploadname. "\"\r\n\r\n";
$mailbody .= chunk_split( base64_encode( file_get_contents( $_FILES['datei']['tmp_name'] ) ) );
$mailbody .= "\n";
// Email versenden
if (@mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader ))
{
// Bei erfolgreichem Versand Danke-Seite anzeigen
echo 'Danke, die Email wurde verschickt!';
}
if (@mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader ))
{
// Bei erfolgreichem Versand Danke-Seite anzeigen
$mailheader = "From: Firma Max Mustermann<mustermann@domain.tld>\r\n";
$mailheader .= "Reply-To: Firma Max Mustermann<mustermann@domain.tld>\r\n";
$mailheader .= "Return-Path: noreply@" .$_SERVER['SERVER_NAME']. "\r\n";
$mailheader .= "MIME-Version: 1.0\r\n";
$mailheader .= "Content-Type: text/plain; charset=UTF-8\r\n";
$mailheader .= "Content-Transfer-Encoding: 7bit\r\n";
$mailheader .= "Message-ID: <" .time(). " noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "X-Mailer: PHP v" .phpversion(). "\r\n\r\n";
// Inhalt der Bestätigung
$mailbody = 'Vielen Dank für Ihre Email. Wir werden uns in Kürze bei Ihnen melden.';
// Bestätigung verschicken
if (@mail( $email, "Die Firma Max Mustermann bedankt sich", $mailbody, $mailheader ))
{
// Bestätigung wurde verschickt
}
}
}
?>
Habe schon alles mögliche ausprobiert, aber ohne PHP-Kenntnisse ist das vergleichbar mit dem Suchen nach der Nadel im Heuhaufen.
Vielleicht hat jemand eine Idee, was hier falsch ist. Danke.
Im Übrigen noch ein großes Dankeschön an Rizzo für den PHP-Mailer. Eine große Erleichterung für alle, die gar keine bzw. nur geringe Kenntnisse in PHP besitzen.
Dann solltest du genau da auch ansetzenHabe schon alles mögliche ausprobiert, aber ohne PHP-Kenntnisse ist das vergleichbar mit dem Suchen nach der Nadel im Heuhaufen.![]()
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Hallo Boris,
danke für den Tipp. Das Problem ist nur die Zeit. Man kann sich nicht in allen Dingen auskennen. Deswegen erscheint meine Frage für Experten vielleicht etwas zu oberfächlich.
Wie isses denn nun mit Unterstützung für Zeitgenosse?
Es ist ja nun nicht so, dass Zeitgenosse sich noch gar nicht mit dem Thema "php" auseinandergesetzt hat.
Es wäre im Ganzen wesentlich zielgerichter, wenn er wenigstens noch einen Tipp bekommen hätte, was er denn noch machen kann bzw. wo er ansetzen sollte.
Also seid so nett und greift ihm noch ein wenig unter die Arme. Danke!
Grüße
Michael
Back to business!
Hallo Michael,
der Grund wieso ihm hier wohl niemand geholfen hat, zumindest trifft das auf mich zu, ist, dass er hier bereits einen eigenen Thread mit genau dem gleichen Beitrag hat, bei dem ihm sehr wohl von 2 verschiedenen Helfern versucht wurde zu helfen. Die Hilfe wurde aber mehr oder weniger ignoriert und auch auf den letzten Hilfeversuch hat er nicht mehr reagiert oder Feedback gegeben.
Ein Grund, weshalb ich in dem anderen Thread nichts gesagt habe ist, dass bereits alles in diesem Tutorial erklärt wurde und im Zip ein funktionierendes Beispiel ist. Wenn man die Funktionalität aber durch "unsachgemässes" zusammenkopieren von 2 verschiedenen Scripts ruiniert, darf man sich nicht wundern, wenn nichts funktioniert.
Außerdem sollten sich Hilfesuchende mal angewöhnen nicht nur Fragmente von nicht funktionierendem Code zu posten, dann wäre eine sinnvolle Hilfe eher möglich. Darauf wird beinahe in jedem zweiten Thread hingewiesen und dennoch wird es beharrlich ignoriert.
Gerade bei Anfängern ist es sehr häufig so, dass es ganz banale Gründe sind, wie z.B. falsch geschriebene Variablennamen und ähnliches.
Einem erfahrenen Programmierer fällt das sehr oft direkt auf, wenn Einsicht auf das komplette Script (bei Formularen am besten auch zusätzlich das HTML-Formular dazu) gegeben ist.
Lange Rede kurzer Sinn:
Wenn ein Hilfesuchender nur das absolut Minimalste zur Problembehebung beisteuert, darf er nicht das Maximum an Hilfe erwarten.
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Na gut. Wenn das so ist...... dann ist Eure Vorgehensweise verständlich. Allerdings. Du siehst, dass man schnell denken kann, dass einem hier im Forum "nicht" geholfen wird. Ich meine für Außenstehende.
Und wenn ich lese... habe ich dann hier meine Frage richtig gestellt?Außerdem sollten sich Hilfesuchende mal angewöhnen nicht nur Fragmente von nicht funktionierendem Code zu posten![]()
Back to business!
Hallo, wie versprochen möchte ich euch über das Ergebnis meiner Anfrage beim Support meines Hosters informieren.
Laut einem Mitarbeiter springe der PHP-Parser wie gewollt an, demnach liege es nicht an der Konfiguration des Servers! Allerdings seien laut seiner Aussage ein oder mehrere Bugs im Script, was ich allerdings schwer glauben kann.
Trotzdem habe ich mich mal drangesetzt und versucht einen vernünftigen PHP-Debugger zum Laufen zu bringen, woran es schon scheiterte. Erst habe ich das neueste xampp, eclipse + phpeclipse installed und versucht dbg zu integrieren. Die phpinfo() führt ihn anschließend auch als installiert auf, jedoch wird er in eclipse nicht angeführt. 1000 Tuts und Foreneinträge später war ich der Lösung genauso fern wie zuvor. Also habe ich versucht den zend debugger zu integrieren, jedoch tut der auch nicht so, wie er eigentlich sollte, trotz korrekter Umsetzung der Schritt-für-Schritt Anweisung auf Entwicklerseite und hastenichtgesehen.
Seit ganzen 3 Tagen mache ich damit jetzt schon rum und so langsam nervts mich einfach nur noch!
Der Typ von meinem Hoster meinte, dass er das Debuggen übernehmen würde für schlappe 20 EUR pro 15 Minuten. OK, das entspricht vermutlich den üblichen Preiskonditionen, jedoch denke ich, dass ich das Problem mit eurer Hilfe mindestens genauso gut und wesentlich preisgünstiger lösen kann
Woran könnte es denn liegen? Wirklich an einem Bug? Dann hätten doch bestimmt andere das gleiche Prob gehabt.
Stimmt was mit der Methode post nicht oder dem header(), sodass formular.htm und mail.php sich "nicht finden", um es mal salopp zu umschreiben?
Ich dachte, dass es an meinem System liegen müsste bzw. an einer Erweiterung (Greasemonkey, Add-on,..) von Firefox und habe deshalb einen jungfreulichen IE7 benutzt. Immerhin leitet der mich zur mail.php weiter, jedoch steht dann dort "Die Webseite kann nicht angezeigt werden"...
Hat noch jemand eine Idee??![]()
Geändert von Frisko (13.01.2009 um 15:00 Uhr)
Hallo,
jedes Tutorial und Script das ich hier veröffentliche, wird von mir zuvor immer auf Webspace bei 3 unterschiedlichen Anbietern getestet, die unterschiedliche Konfigurationen haben. Zusätzlich lasse ich dann noch ein oder zwei Freiwillige, je nachdem wie viele gerade Zeit und Lust haben, das Script/Tutorial auf Funktionalität testen. Erst wenn es keine (mehr) Probleme gibt, veröffentliche ich den Code. Von daher halte ich die "verbuggte Script"-Theorie von dem Support Mensch als eher sehr unwahrscheinlich, sofern deinerseits nichts am Script verändert wurde. Aber natürlich ist man vor Fehler nie ganz gefeit, deswegen kannst Du ihn ja mal höflich fragen, was seiner Meinung nach nicht stimmen würde mit dem Script.
Ansonsten hast Du aber auch noch nicht einen Schnipsel Code gepostet, an dem man erkennen könnte was nicht funktioniert. Du hast doch sicher nicht das Script aus dem Tutorial 1:1 übernommen, sondern selbst noch etwas daran herumgedoktert, oder?!
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)