webForumDet fria alternativet

Formulär med bifogad fil

PHPur Script - PHP

3 svar · 18 273 visningar · startad av Mr T

Medlem sedan maj 20071 061 inlägg
Frågan#1

Hittade ett gammalt formulär script där man kan skicka med bifogad fil (vilket har efterfrågats). En bra grund för den som vill skicka med bifogade filer i e-mail.
Det består av 2 filer. En grafisk fil och en program fil.

DOCK:
* "in-fångandet" av variablerna kan behövas bättras, beroende på server inställningar.
* Koden har funkat bra på FS-datas servrar, men har strulat på andra (och jag har därför inte test kört på ett tag). Detta beror inte på koden utan på inställningarna på servern.

Grafisk fil
email_g.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

	<head>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
		<meta name="generator" content="Adobe GoLive">
		<title>E-mail</title>
		<style type="text/css" media="screen"><!--
body
{
	font-size: 12px;
	font-family: Verdana, Arial, Serif, Geneva;
	font-style: normal
}
        
form
{
    font-size: 12pt;
    font-family: Verdana, Arial, Serif, Geneva;
    background-color: transparent
}

input
{
    border-right: none;
    border-top: none;
    border-left: none;
    border-bottom: 1px solid black;
    background-color: transparent
}

textarea
{
    border-right: 1px solid black;
    border-top: 1px solid black;
    border-left: 1px solid black;
    border-bottom: 1px solid black;
    background-color: transparent
}

select
{
    border-right: 1px solid black;
    border-top: 1px solid black;
    border-left: 1px solid black;
    border-bottom: 1px solid black;
    background-color: transparent
}
--></style>
	</head>

	<body bgcolor="#cecea5">
	
	<FORM ACTION="email_c.php" METHOD=POST NAME=phpgen1 enctype="multipart/form-data">
	
<table border="0">
	<tr>
		<td>
			<table border="0" cellspacing="2" cellpadding="2" bgcolor="#d8d79f">
				<tr>
					<td width="70">Fr&aring;n</td>
					<td><b>:</b></td>
					<td><input type="text" name="from_email" size="30" /></td>
				</tr>
				<tr>
					<td width="70">Till</td>
					<td><b>:</b></td>
					<td><input type="text" name="to_email" size="30" /></td>
				</tr>
				<tr>
					<td width="70">Cc</td>
					<td><b>:</b></td>
					<td><input type="text" name="cc_email" size="30" /></td>
				</tr>
				<tr>
					<td width="70">Bcc</td>
					<td><b>:</b></td>
					<td><input type="text" name="bcc_email" size="30" /></td>
				</tr>
				<tr>
					<td width="70">Rubrik</td>
					<td><b>:</b></td>
					<td><input type="text" name="subject_email" size="50" /></td>
				</tr>
				<tr>
					<td width="70">Bifoga</td>
					<td></td>
					<td><input type="file" name="AttachmentFile" size="16" /></td>
				</tr>
			</table>
		</td>
	</tr>
	<tr>
		<td>
			<hr />
		</td>
	</tr>
	<tr>
		<td><textarea name="mess" rows="6" cols="60"></textarea></td>
	</tr>
	<tr>
		<td align="right"><input type="submit" name="Submit" value="Skicka" /></td>
	</tr>
</table>

</form>

	</body>
</html>

Kod fil
email_c.php

<?

$from_email=chop($from_email);
$to_email=chop($to_email);
$subject_email=chop($subject_email);
$mess=chop($mess);

if (empty($from_email) OR empty($to_email) OR empty($subject_email) OR empty($mess)) {
	// något fällt saknas
	echo "<font color=\"#FF0000\"><h1>SOME FIELD IS MISSING!!</H1></font>";
	exit;
} // if

$file_upload_path = "/spamm/EmailAttachment/";

// ----------------- HEADERN ---------------

$headers = "From: ".$from_email."\n";
				
$headers .= "Reply-To: ".$from_email."\n";

if (!empty($cc_email)) {
				
	$headers .= "Cc: ".$cc_email."\n";
}

if (!empty($bcc_email)) {
				
	$headers .= "Bcc: ".$bcc_email."\n";
}

	

$headers .= "MIME-Version: 1.0\n".
				
"Content-Type: multipart/mixed;\n\t boundary=\"".$boundary1."\"\n".

"X-Priority: 3\n".

"X-Mailer: phpMimeMail ( http://www.ziet.zhitomir.ua/~rozhik/php3/mimemail/ )\n";

// ----------------- BODYN ---------------

$boundary1 = "MAIL-PARTS-2001-CODE-1-".time();
$boundary2 = "MAIL-AttachedPARTS-2001-CODE-2-".time();

$body = "\nThis part of the E-mail should never be seen. If\n";

$body .= "you are reading this, consider upgrading your e-mail\n";

$body .= "client to a MIME-compatible client.\n\n";
					
$body .= "--".$boundary1."\n".

"Content-Type: multipart/alternative;\n\t".

"boundary=\"".$boundary2."\"\n";

$body .= "\n";

$body .= "--".$boundary2."\n";
				
$body .= "Content-Type: text/plain\n";

$body .= "Content-Transfer-Encoding: quoted-printable\n\n";
			
$body .= $mess;
		 
$body .= "\n\n--".$boundary2."--\n";

// --------------------- lägger till ev. fil(er)

$AttachmentFile=chop($AttachmentFile);

if ($AttachmentFile!="") {

	$attach_file_name = $_FILES['AttachmentFile']['name']; // $AttachmentFile_name;
	$attach_file_type = $_FILES['AttachmentFile']['type'];
	$attach_file_sufix = strtolower(substr($attach_file_name, (strrpos($attach_file_name, '.'))));
		
	$BifogadFil = $_FILES['AttachmentFile']['tmp_name']; //$file_upload_path.$filnamn;
	
		
	if($f=@fopen($BifogadFil,"r")) {
	
		$file_contents=fread($f,filesize($BifogadFil));
		
		fclose($f);
    	
		$body .= "\n--".$boundary1."\n";
    	
		$body .= "Content-Type: ".$attach_file_type."\n"; //; name='sagan-om-ringen-kvitto.gif'\n";
    	
		$body .= "Content-Transfer-Encoding: base64\n";
    	
		$body .= "Content-Disposition: inline; filename=\"".$attach_file_name."\"\n\n";
    	
		$body .= "".chunk_split(base64_encode($file_contents))."\n";
    	
	} else {
		echo "<B>ERROR IN \"".$BifogadFil."\" !!!</B>";
	} // if($f=@fopen
} // for 

$body .= "\n--".$boundary1."--\n";

// ------------------------ Skickar e-mail

$success = mail($to_email, $subject_email, $body, $headers); 

// kollar om det gick bra att skicka e-mailet
if ($success) {
	echo "---------------------<br><br>\r\n";
	echo "to-email : ".$to_email."<br>";
	echo "subject_email : ".$subject_email."<br>";
	echo $headers;
	echo $body;
	echo "<br><br>---------------------<br>\r\n";
	echo "Mail iv&auml;gskickat";
} else {
	echo "ERROR ! Mailet kunde inte skickas!";
} // if ($success)
Medlem sedan juni 20031 837 inlägg
#2

Hmm, du använder variabeln $boundary1 innan den har tilldelats något värde.
Du använder aldrig variabeln $file_upload_path.

Sen kan det vara en fördel att ändra infångandet av variablerna som du skrev.

$from_email=chop($_POST['from_email']);
$to_email=chop($_POST['to_email']);
$subject_email=chop($_POST['subject_email']);
$mess=chop($_POST['mess']);
Medlem sedan maj 20071 061 inlägg
#3

Tack The Hulk. Finner du fler fel, vilket inte alls är omöjligt, får du gärna påpeka dom med. Det var ett tag sedan jag kunde köra det helt funktionelt tyvärr :-(
Dock var det en på forumet som frågade efter ett script, så jag tänkte jag kunde lägga upp det här.

Medlem sedan maj 20071 061 inlägg
#4

Har provat scriptet och det funkar precis som det är, men helt klart kan det behövas lite puttsning för att vara "snygg kod". Antagligen har mitt hotell configurerat om servrarna sina.
(provade redan då jag lade upp coden, men först ca 12 timmar senare kom mailen fram !?!??!)

141 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)