@Unbekannter Interessent: Lösung für Mailanhang+PHP



  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<title>Mail with Attachment</title>
    	<meta http-equiv="content-type" content="text/html; charset= ISO-8859-1" />
    </head>
    <body>
    <?php
    	if(!($_SERVER['REQUEST_METHOD']=='POST'))
    	{
    		?>
    		<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST" enctype="multipart/form-data">
    		<table>
    			<tr>
    				<td>Nachname:</td>
    				<td>
    					<input type="text" name="name" />
    				</td>
    			</tr>
    			<tr>
    				<td>Klasse:</td>
    				<td>
    					<select name="klasse">
    						<option>3BHD</option>
    						<option>2BHD</option>
    					</select>
    				</td>
    			</tr>
    			<tr>
    				<td>Übungsname:</td>
    				<td>
    					<input type="text" name="uebung" />
    				</td>
    			</tr>
    			<tr>
    				<td>Übung (als *.zip-File gepackt):</td>
    				<td>
    					<input type="file" name="file" accept="application/zip" />
    				</td>
    			</tr>
    			<tr>
    				<td>
    				<input type="submit" name="" value="Senden" />
    				</td>
    				<td>&nbsp;</td>
    			</tr>
    		</table>
    		</form>
    		<br />
    		<b>Achtung:</b> Ihre IP wird mitgeloggt, so dass eine Zurückverfolgung bei strafrechtlich relevanten Missbrauch dieses UploadCenters problemlos möglich ist! Spamming wird strafrechtlich verfolgt!
    		<br />
    		<br />
    		<br />
    		<br />
    		<b>Copyright 2004, Dominik Rauch &lt;SideWinder@c-plusplus.net&gt;</b>
    		<?php
    	}
    	else
    	{
    		// Input aus Formular extrahieren
    		$name = $_POST['name'];
    		$klasse = $_POST['klasse'];
    		$uebung = $_POST['uebung'];
    
    		$filename = $_FILES['file']['name'];
    		$filesize = $_FILES['file']['size'];
    		$filetype = $_FILES['file']['type'];
    		$filetemp = $_FILES['file']['tmp_name'];
    
    		$loguser = "IP: ".$_SERVER['REMOTE_ADDR']."\nPort: ".$_SERVER['REMOTE_PORT']."\nBrowser: ".$_SERVER['HTTP_USER_AGENT']."\n";
    
    		// Input aus Formular auf Richtigkeit checken
    		if(trim($name)=='')
    			die('Geben Sie einen Namen an!');
    
    		if(trim($uebung)=='')
    			die('Geben Sie einen Namen für die Übung an!');
    
    		if(!file_exists($filetemp))
    		{
    			die('Die Datei konnte aus unbekanntem Grund nicht korrekt hochgeladen werden.');
    		}
    		else
    		{
    			if(!is_uploaded_file($filetemp))
    				die('Die Datei konnte aus unbekanntem Grund nicht korrekt hochgeladen werden.');
    		}
    
    		if($filesize > 1048576)
    			die('Die Maximalgröße für Dateien beträgt ein Megabyte.');
    
    		if($filetype != 'application/zip')
    			die('Die hochgeladene Datei muss vom Typ "*.zip" sein.');
    
    		// Aus dem Input den Output für die Mail generieren
    		$from = 'UploadCenter';
    		$to = 'anonymous@example.com';
    		$subject = $klasse.' '.$name.' '.$uebung;
    		$text = "Diese Mail wurde automatisch generiert um eine Übung zu senden.\n\nDiese Mail wurde in Auftrag gegeben von:\n".$loguser;
    
    		// Den Inhalt der hochgeladenen Datei für den Versand per Mail anpassen
    		$f = fopen($filetemp,'rb');
    		$filecontent = fread($f,filesize($filetemp));
    		fclose($f);
    
    		$filecontent = chunk_split(base64_encode($filecontent));
    
    		// Zufälligen String als Trenner zwischen Mail und Attachment generieren
    		$mimeboundary = '[ MIME-Boundary'.md5(mt_rand()).' ]';
    
    		// Mail bauen - Headers
    		$headers = "From: $from\r\n".
    			"MIME-Version: 1.0\r\n".
    			"Content-Type: multipart/mixed;\r\n".
    			" boundary=\"{$mimeboundary}\"";
    
    		// Mail bauen - Message
    		$message = "--{$mimeboundary}\n".
    			"Content-Type: text/plain; charset=\"ISO-8859-1\"\n".
    			"Content-Transfer-Encoding: 7bit\n\n".
    			$text.
    			"\n\n".
    			"--{$mimeboundary}\n".
    			"Content-Type: {$filetype};\n".
    			" name=\"{$filename}\"\n".
    			"Content-Transfer-Encoding: base64\n\n".
    			$filecontent.
    			"\n\n".
    			"--{$mimeboundary}".
    			"--\n";
    
    		// Mail senden
    		if(mail($to,$subject,$message,$headers))
    		{
    			?>
    			Mail wurde versendet.
    			<?php
    		}
    		else
    		{
    			?>
    			Mail konnte aus unbekanntem Grund nicht korrekt gesendet werden.
    			<?php
    		}
    	}
    ?>
    </body>
    </html>
    

    Verbesserungsvorschläge kann man natürlich auch noch bringen 🙂

    MfG SideWinder


Log in to reply