Ich bin gerade am Kontakt-Formular am Basteln: Bisher nutzte ich hier das Plugin PXS Mail Form, das eigentlich auch zuverlässig lief. Allerdings fehlte mir die Möglichkeit, Dateien an die Mail anzuhängen.
Jetzt habe ich zwar ein Mail-Formular Marke Eigenbau, aber das Anhängen von Dateien haut irgendwie nicht hin. Es ist zum Mäuse melken
Ich habe ein Formular genommen, welches ich für ein anderes Projekt geschrieben habe, einige Variablen angepasst, uns das ganze um ein Input-Feld vom Typ „File“ ergänzt. Dann habe ich den Code für die Generierung der Mail noch angepasst, und fertig. Dachte ich…
Wenn ich eine Testmail versende, kommt die nun auch mit Anhang, und der hat auch den richtigen Namen und das korrekte Symbol für den Dateityp. Nur hat die Datei dann eine GröÃ
Hier mal der Code:
";
$Header .= "\\nX-Sender-IP: " . $_SERVER['REMOTE_ADDR'];
$Header .= "\\nX-Mailer: PHP v." . phpversion() . " auf {$_SERVER['SERVER_NAME']}";
$Header .= "\\nMIME-Version: 1.0";
$Header .= "\\nContent-Type: multipart/mixed; boundary = "$boundary"";
$Header .= "\\n\\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";
// Generate mail body
$Body = "--".$boundary."\\n";
$Body .= "Content-Type: text/plain; charset="utf-8"\\n";
$Body .= "Content-Transfer-Encoding: 8bit\\n\\n";
$Body .= $_POST['message'];
// Attach file if submitted
if ( $_FILES['attach']['tmp_name'] )
{
$filename = $_FILES['attach']['name'];
$Body .= "\\n--".$boundary."\\n";
$Body .= "Content-Type: image/jpeg; name=".$filename."\\n";
$Body .= "Content-Transfer-Encoding: base64\\n";
$Body .= "Content-Disposition: attachment; filename=".$filename." \\n\\n";
$attachment = chunk_split(base64_encode(fread(fopen($filename, "r"), filesize($filename))));
$Body .= $attachment."\\n";
}
// Close multipart mail
$Body .= "--".$boundary."--\\n";
// Send mail
mail ( get_options('admin_email'), $_POST['Subject'], $Body, $Header );
if ( $_POST['Copy'] == 1 ) // If copy requested send mail to sender
{
mail ( $_POST['Email'], $_POST['Subject'], $Body, $Header );
}
// Show "Thank You" message
print "Vielen Dank für Deine Nachricht.
";
print "« Zurück zur Startseite";
unset ( $_POST );
} else { // Es folgt der XHTML-Code zur Anzeige des Formulares
?>
Das Formularfeld mit dem Dateianhang hört auf den Namen „attach
“ und eine Fehlerbehandlung gibt es noch nicht. Zudem hab ich es erst mal auf JPG-Bilder festgesetzt (Content-Type: image/jpeg
)
Ich habe im Netz zwar mehrere Anleitungen gefunden, die gehen scheinbar alle von einer Datei auf dem Server aus, nicht von einer hochzuladenden Datei. Zudem hängen die meisten das, was hier in der Variable $Body
steht, auch noch an $Header
an, und senden dann praktisch eine leere Mail. Funktioniert auch nicht, hab’s probiert
Hinterlasse jetzt einen Kommentar