[quote]Vielleicht dürfen wir mal dein Script ansehen[/quote]Na aber gern doch
!
Also das Script, welches ich zum Testen hochgeladen habe, stammt von http://www.phpbuddy.eu/emails-mit-php-versenden.html?start=4 .
Alles in allem kommt es mit folgenden 4 Dateien aus:
- formular.htm (die Eingabemaske, über welche gestartet wird)
[code]
HTML Email mit Dateianhang
Name:
Email:
Betreff:
Nachricht:
Anhang:
[/code]
2. funktionen.inc.php (zur Prüfung der Benutzer-Eingaben)
[code]<?php
header( ‘Content-Type: text/html; charset=utf-8’ );
// Benutzereingabe bereinigen (trimmen, Slashes entfernen)
function cleanInput()
{
checkInjection();
if (get_magic_quotes_gpc()) $_POST = array_map( ‘stripslashes’, $_POST );
$_POST = array_map( ‘trim’, $_POST );
}
// Name auf Gültigkeit prüfen
function checkName( $name )
{
$muster_name = ‘/^([a-zA-ZäÄöÖüÜß\xc0-\xc2\xc8-\xcf\xd2-\xd4\xd9-\xdb\xe0-\xe2\xe8-\xef\xf2-\xf4\xf9-\xfb\x9f\xff.’-_]?(\s)?)+$/’;
if (preg_match( $muster_name, $name ))
{
return $name;
}
else
{
die( ‘Der eingegebene Name enthält nicht erlaubte Zeichen!’ );
}
}
// Email auf korrektes Format prüfen
function checkEmail( $email )
{
$nonascii = “\x80-\xff”;
$nqtext = “[^\\$nonascii\015\012”]";
$qchar = “\\[^$nonascii]”;
$normuser = ‘[a-zA-Z0-9][a-zA-Z0-9_.-]’;
$quotedstring = “”(?:$nqtext|$qchar)+"";
$user_part = “(?:$normuser|$quotedstring)”;
$dom_mainpart = '[a-zA-Z0-9][a-zA-Z0-9._-]\.’;
$dom_subpart = ‘(?:[a-zA-Z0-9][a-zA-Z0-9._-]\.)’;
$dom_tldpart = ‘[a-zA-Z]{2,5}’;
$domain_part = “$dom_subpart$dom_mainpart$dom_tldpart”;
$pattern = “$user_part@$domain_part”;
$muster_email = “/^{$pattern}$/”;
if (preg_match( $muster_email, $email ))
{
return $email;
}
else
{
die( ‘Die eingegebene Email-Adresse hat kein gültiges Format!’ );
}
}
// Dateianhang prüfen
function checkFile()
{
if ($_FILES[‘datei’][‘error’] == 0 &&
$_FILES[‘datei’][‘type’] == ‘image/jpeg’)
{
return $_FILES[‘datei’][‘name’];
}
else
{
die( ‘Bitte eine gültige JPG Datei anhängen!’ );
}
}
// Benutzereingaben auf mögliche Injection prüfen
function checkInjection()
{
$email_injection = array( ‘bcc:’, ‘boundary’, ‘cc:’, ‘content-transfer-encoding:’, ‘content-type:’, ‘mime-version:’, ‘subject:’ );
// Auf potentielle Email Injections prüfen
foreach ($email_injection as $injection)
{
foreach ($_POST as $feld => $inhalt)
{
if (preg_match( "/{$injection}/i", $inhalt ))
{
header( 'location: http://www.google.com/search?hl=en&q=how+to+become+a+better+hacker' );
exit;
}
}
}
return true;
}
?>[/code]
3. mail.php (Der Mail-Header)
[code]<?php
header( ‘Content-Type: text/html; charset=utf-8’ );
// Empfänger Email
$empfaenger = ‘foto-werk-stadt@XYZ.dk’;
// Prüfen ob das Formular abgeschickt wurde
if (isset($_POST[‘senden’]) && $_FILES[‘datei’][‘size’] > 0)
{
// 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'];
}
// Upload prüfen
$uploadname = checkFile();
// --------------------------------------------------------------------------------
// 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: tobias.hanke@XYZ.dk <tobias.hanke@XYZ.dk>\r\n"; // noreply@" .$_SERVER['SERVER_NAME']. "\r\n";
$mailheader .= "Message-ID: <" .time(). " tobias.hanke@XYZ.dk>\r\n"; // <" .time(). " noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "X-Mailer: PHP v" .phpversion(). "\r\n";
$mailheader .= "From: tobias.hanke@XYZ.dk <tobias.hanke@XYZ.dk>\r\n"; // 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!';
}
}
?>[/code]
4. mailbody.txt (die html-Mail)
[code]
Email als HTML mit Anhang
body { font: normal 12px Verdana, Arial, Helvetica, sans-serif; }
a { color: blue; text-decoration: none; }
h2 { font-size: 16px; font-weight: bold; }
.gruen { color: green; }
Soeben ist eine Nachricht von ###NAME### eingetroffen.
Als Antwortadresse wurde ###EMAIL### angegeben.
Die Nachricht die gesendet wurde lautet:
###NACHRICHT###
[/code]
Das Script ist funktionsfähig. Sämtliche verfügbaren Platzhalter habe ich gegen meinen E-Mailadressen ausgetauscht, ansonsten jedoch keine Änderungen vorgenommen. Wie bereits erwähnt, gehen aber auch mit diesem simplen Formmailer keine größeren Anhänge raus.
Gruß, Tobias