Hi there,
I have a simple online form-based email script that sends form data. I want to add the ability for users to send an attachment too (such as an image). I was wondering if anyone knew how to do this.
Here is the code from the form:
<form action="/sendmail.php" method="post" name="faq" onSubmit ="return checkData()" >
<input name="Referer" type="hidden" value="FAQ" />
<p>Firstname:<br /><input name="Fname" type="text" /></p>
<p>Lastname:<br /><input name="Lname" type="text" /></p>
<p>Email:<br /><input name="Email" type="text" /></p>
<p>Title of question/answer:<br /><input name="Title" type="text" /></p>
<p>Question:<br />
<textarea name="Message" rows="15" cols="20"></textarea>
</p>
<p>
<input name="clear" type="reset" id="clear" value="clear" />
<input name="submit" type="submit" id="submit" value="submit" />
</p>
</form>
Here is my PHP script so far (sendmail.php):
<?php
$Fname = $_REQUEST['Fname'] ;
$Lname = $_REQUEST['Lname'] ;
$Email = $_REQUEST['Email'] ;
$Referer = $_REQUEST['Referer'] ;
$Title = $_REQUEST['Title'] ;
$Message = $_REQUEST['Message'] ;
mail( "[email protected]", "Submit question form: $Referer: $Title",
$Message, "From: $Fname $Lname <$Email>" );
header( "Location: <!-- m --><a class="postlink" href="http://www.site.com/feedback.html">http://www.site.com/feedback.html</a><!-- m -->" );
?>
All I want is another form field where users can browse their files and click one to upload (similar to site like Yahoo Mail).
Thanks in advance,
- Tatlarso then you have to add a file input
<input type="file" name="upload">
then when it gets uploaded you have to get the temp name and load it into an array or variable tehn send it to the user they want. so basically you have to look into the headers and content through headers. if you don't understand php then it will be difficult to setup as it really gets into the headers and mime-types.i read this post while i was looking for a way to send attachments via the mail function of php. so i found usefull information on the php-manual site. Yes this post is old, but everyone whos looking for the same like me will be pleased to read the following:
I spent many hours with corrupted attachments (of all types of files) - The answer: a blank line is needed after $msg.=$file \r\n \r\n [incredible but true].
Heres some useful code for sending an attachment, and display html OR text depending on the users email-reader.
i work with many different systems, so...
<?php # Is the OS Windows or Mac or Linux
if (strtoupper(substr(PHP_OS,0,3)=='WIN')): $eol="\r\n"; elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')): $eol="\r"; else: $eol="\n"; endif; ?>
<?php
# File for Attachment
$f_name="../../letters/".$letter; // use relative path OR ELSE big headaches. $letter is my file for attaching.
$handle=fopen($f_name, 'rb');
$f_contents=fread($handle, filesize($f_name));
$f_contents=chunk_split(base64_encode($f_contents)); //Encode The Data For Transition using base64_encode();
$f_type=filetype($f_name);
fclose($handle);
# To Email Address
$emailaddress="[email protected]";
# Message Subject
$emailsubject="Heres An Email with a PDF".date("Y/m/d H:i:s");
# Message Body
ob_start();
require("emailbody.php"); // i made a simple & pretty page for showing in the email
$body=ob_get_contents(); ob_end_clean();
# Common Headers
$headers .= 'From: Jonny <[email protected]>'.$eol;
$headers .= 'Reply-To: Jonny <[email protected]>'.$eol;
$headers .= 'Return-Path: Jonny <[email protected]>'.$eol; // these two to set reply address
$headers .= "Message-ID: <".$now." TheSystem@".$_SERVER['SERVER_NAME'].">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol; // These two to help avoid spam-filters
# Boundry for marking the split & Multitype Headers
$mime_boundary=md5(time());
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol;
$msg = "";
# Attachment
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: application/pdf; name=\"".$letter."\"".$eol; // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
$msg .= "Content-Transfer-Encoding: base64".$eol;
$msg .= "Content-Disposition: attachment; filename=\"".$letter."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
$msg .= $f_contents.$eol.$eol;
# Setup for text OR html
$msg .= "Content-Type: multipart/alternative".$eol;
# Text Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= "This is a multi-part message in MIME format.".$eol;
$msg .= "If you are reading this, please update your email-reading-software.".$eol;
$msg .= "+ + Text Only Email from Genius Jon + +".$eol.$eol;
# HTML Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= $body.$eol.$eol;
# Finished
$msg .= "--".$mime_boundary."--".$eol.$eol; // finish with two eol's for better security. see Injection.
# SEND THE EMAIL
ini_set(sendmail_from,'[email protected]'); // the INI lines are to force the From Address to be used !
mail($emailaddress, $emailsubject, $msg, $headers);
ini_restore(sendmail_from);
?>
I hope this helps.
Jon Webb [Madrid&London]
you only have to change the application/type to what you need.
I have a simple online form-based email script that sends form data. I want to add the ability for users to send an attachment too (such as an image). I was wondering if anyone knew how to do this.
Here is the code from the form:
<form action="/sendmail.php" method="post" name="faq" onSubmit ="return checkData()" >
<input name="Referer" type="hidden" value="FAQ" />
<p>Firstname:<br /><input name="Fname" type="text" /></p>
<p>Lastname:<br /><input name="Lname" type="text" /></p>
<p>Email:<br /><input name="Email" type="text" /></p>
<p>Title of question/answer:<br /><input name="Title" type="text" /></p>
<p>Question:<br />
<textarea name="Message" rows="15" cols="20"></textarea>
</p>
<p>
<input name="clear" type="reset" id="clear" value="clear" />
<input name="submit" type="submit" id="submit" value="submit" />
</p>
</form>
Here is my PHP script so far (sendmail.php):
<?php
$Fname = $_REQUEST['Fname'] ;
$Lname = $_REQUEST['Lname'] ;
$Email = $_REQUEST['Email'] ;
$Referer = $_REQUEST['Referer'] ;
$Title = $_REQUEST['Title'] ;
$Message = $_REQUEST['Message'] ;
mail( "[email protected]", "Submit question form: $Referer: $Title",
$Message, "From: $Fname $Lname <$Email>" );
header( "Location: <!-- m --><a class="postlink" href="http://www.site.com/feedback.html">http://www.site.com/feedback.html</a><!-- m -->" );
?>
All I want is another form field where users can browse their files and click one to upload (similar to site like Yahoo Mail).
Thanks in advance,
- Tatlarso then you have to add a file input
<input type="file" name="upload">
then when it gets uploaded you have to get the temp name and load it into an array or variable tehn send it to the user they want. so basically you have to look into the headers and content through headers. if you don't understand php then it will be difficult to setup as it really gets into the headers and mime-types.i read this post while i was looking for a way to send attachments via the mail function of php. so i found usefull information on the php-manual site. Yes this post is old, but everyone whos looking for the same like me will be pleased to read the following:
I spent many hours with corrupted attachments (of all types of files) - The answer: a blank line is needed after $msg.=$file \r\n \r\n [incredible but true].
Heres some useful code for sending an attachment, and display html OR text depending on the users email-reader.
i work with many different systems, so...
<?php # Is the OS Windows or Mac or Linux
if (strtoupper(substr(PHP_OS,0,3)=='WIN')): $eol="\r\n"; elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')): $eol="\r"; else: $eol="\n"; endif; ?>
<?php
# File for Attachment
$f_name="../../letters/".$letter; // use relative path OR ELSE big headaches. $letter is my file for attaching.
$handle=fopen($f_name, 'rb');
$f_contents=fread($handle, filesize($f_name));
$f_contents=chunk_split(base64_encode($f_contents)); //Encode The Data For Transition using base64_encode();
$f_type=filetype($f_name);
fclose($handle);
# To Email Address
$emailaddress="[email protected]";
# Message Subject
$emailsubject="Heres An Email with a PDF".date("Y/m/d H:i:s");
# Message Body
ob_start();
require("emailbody.php"); // i made a simple & pretty page for showing in the email
$body=ob_get_contents(); ob_end_clean();
# Common Headers
$headers .= 'From: Jonny <[email protected]>'.$eol;
$headers .= 'Reply-To: Jonny <[email protected]>'.$eol;
$headers .= 'Return-Path: Jonny <[email protected]>'.$eol; // these two to set reply address
$headers .= "Message-ID: <".$now." TheSystem@".$_SERVER['SERVER_NAME'].">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol; // These two to help avoid spam-filters
# Boundry for marking the split & Multitype Headers
$mime_boundary=md5(time());
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol;
$msg = "";
# Attachment
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: application/pdf; name=\"".$letter."\"".$eol; // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
$msg .= "Content-Transfer-Encoding: base64".$eol;
$msg .= "Content-Disposition: attachment; filename=\"".$letter."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
$msg .= $f_contents.$eol.$eol;
# Setup for text OR html
$msg .= "Content-Type: multipart/alternative".$eol;
# Text Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= "This is a multi-part message in MIME format.".$eol;
$msg .= "If you are reading this, please update your email-reading-software.".$eol;
$msg .= "+ + Text Only Email from Genius Jon + +".$eol.$eol;
# HTML Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= $body.$eol.$eol;
# Finished
$msg .= "--".$mime_boundary."--".$eol.$eol; // finish with two eol's for better security. see Injection.
# SEND THE EMAIL
ini_set(sendmail_from,'[email protected]'); // the INI lines are to force the From Address to be used !
mail($emailaddress, $emailsubject, $msg, $headers);
ini_restore(sendmail_from);
?>
I hope this helps.
Jon Webb [Madrid&London]
you only have to change the application/type to what you need.