Datei zu PHP Formmailer anhängen?
Hallo!
Ich habe ein kleines Kontaktformular welches Name und Text an einen vorher Festgelegten Absender schickt. Nun möchte ich das man dazu noch eine Datei anhängen kann, die an mit an die Email angehangen wird. Ich habe einen PHP Mailer. Bis zum Dateiupload funktioniert alles. Also Namen sowie Text werden übertragen, aber es scheitert am Dateiupload. Ich bitte um Hilfe, was kann ich machen damit die Datei an die Email angehangen wird? Ich poste hier mal die beiden Codes... Bitte helft mir!
CODE FORMULAR (mail.php):
CODE PHP MAILER (mailer-engine.php)
<?php
// ======= Konfiguration:
$mailTo = $_POST['Empfänger'];
$mailFrom = 'Schüler der Klasse 9-3 <****@***.de>';
$mailSubject = 'Email von einem Schüler der Klasse 9-3 [Weitergeleitet über Notfallcloud der Klasse 9-3]';
$returnPage = 'form_erfolg.html';
$returnErrorPage = 'form_fehler.html';
$mailText = "";
// ======= Text der Mail aus den Formularfeldern erstellen:
// Wenn Daten mit method="post" versendet wurden:
if(isset($_POST)) {
// alle Formularfelder der Reihe nach durchgehen:
foreach($_POST as $name => $value) {
// Wenn der Feldwert aus mehreren Werten besteht:
// (z.B. <select multiple>)
if(is_array($value)) {
// "Feldname:" und Zeilenumbruch dem Mailtext hinzufügen
$mailText .= $name . ":\n";
// alle Werte des Feldes abarbeiten
foreach($valueArray as $entry) {
// Einrückungsleerzeichen, Wert und Zeilenumbruch
// dem Mailtext hinzufügen
$mailText .= " " . $value . "\n";
} // ENDE: foreach
} // ENDE: if
// Wenn der Feldwert ein einzelner Feldwert ist:
else {
// "Feldname:", Wert und Zeilenumbruch dem Mailtext hinzufügen
$mailText .= $name . ": " . $value . "\n";
} // ENDE: else
} // ENDE: foreach
} // if
// ======= Korrekturen vor dem Mailversand
// Wenn PHP "Magic Quotes" vor Apostrophzeichen einfügt:
if(get_magic_quotes_gpc()) {
// eventuell eingefügte Backslashes entfernen
$mailtext = stripslashes($mailtext);
}
// ======= Mailversand
// Mail versenden und Versanderfolg merken
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
// ======= Return-Seite an den Browser senden
// Wenn der Mailversand erfolgreich war:
if($mailSent == TRUE) {
// Seite "Formular verarbeitet" senden:
header("Location: " . $returnPage);
}
// Wenn die Mail nicht versendet werden konnte:
else {
// Seite "Fehler aufgetreten" senden:
header("Location: " . $returnErrorPage);
}
// ======= Ende
exit();
?>
2 Antworten
1) Deine Abfrage, ob es überhaupt Daten im Request Body gibt, kommt etwas spät.
$mailTo = $_POST['Empfänger'];
// ...
if (isset($_POST))
2) Die Leerzeichen in name und id sind ungünstig. Setze zumindest Bindestriche dazwischen. Die Umlaute aus solchen Attributen würde ich im Übrigen auch besser entfernen bzw. ersetzen (gegen ae, oe, ue, ss).
<input type="file" name="Angehängte Datei" id="Angehängte Datei"><br /><br />
3) Ich sehe nicht, dass du irgendwo die Datei über $_FILES entgegennehmen würdest. Von daher ist es kein Wunder, wenn keine Datei hochgeladen wird.
Die einfachste Form eines Upload kann so aussehen: PHP Datei Upload simples code snippet?. Die verzichtet allerdings noch gänzlich auf irgendeine Validation. Beschäftige dich also mit $_FILES und Dateioperationen. Beschränke beispielsweise die Dateigröße und den Dateityp. Weiteres zu möglichen Sicherheitsmaßnahmen und -lücken kannst du hier nachlesen:
3) Nutze PHPMailer, um deine E-Mail abzuschicken. Diese Bibliothek hat auch schon eine Methode parat, um Dateianhänge mit zu versenden.
Ach, noch etwas zu 1): $_POST ist superglobal und somit auch präsent, wenn nichts drin steht. Nutze entweder empty oder prüfe auf ein bestimmtes, erwartetes Feld.
Der Dateiupload läuft ja unabhängig vom Mailversand vorab. Also schau im Netz nach PHP File Upload Tutorials - gibts wie Sand am Meer. Danach musst du eine Multipart E-Mail erstellen und versenden. Dafür musst du dich mit den E-Mail Spezifikationen aber wirklich gut auskennen.
Ich seh grad: Das Leerzeichen im name Attribut des Upload Feldes ist nicht so hilfreich.
Wenn die Datei auf dem Server ist kannst du sie auch anhängen.
Da hab ich dir ja geschrieben, dass das nicht so einfach ist, wie einen einfachen Text per Mail zu Versenden. Dafür musst du dich schon ordentlich in das Thema einarbeiten.
Muss dann nicht aber die Datei an die Email angehangen werden? Wie erstellt man denn so eine Multipart Email?