Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send File Attachment from Form Using phpMailer and PHP

I have a form on example.com/contact-us.php that looks like this (simplified):

<form method="post" action="process.php" enctype="multipart/form-data">   <input type="file" name="uploaded_file" id="uploaded_file" />   <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> </form> 

In my process.php file, I have the following code utilizing PHPMailer() to send an email:

require("phpmailer.php");  $mail = new PHPMailer();  $mail->From     = [email protected]; $mail->FromName = My name; $mail->AddAddress([email protected],"John Doe");  $mail->WordWrap = 50; $mail->IsHTML(true);  $mail->Subject  =  "Contact Form Submitted"; $mail->Body     =  "This is the body of the message."; 

The email sends the body correctly, but without the Attachment of uploaded_file.

MY QUESTION

I need the file uploaded_file from the form to be attached to the email, and sent. I do NOT care about saving the file after the process.php script sends it in an email.

I understand that I need to add AddAttachment(); somewhere (I'm assuming under the Body line) for the attachment to be sent. But...

  1. What do I put at the top of the process.php file to pull in the file uploaded_file? Like something using $_FILES['uploaded_file'] to pull in the file from the contact-us.php page?
  2. What goes inside of AddAttachment(); for the file to be attached and sent along with the email and where does this code need to go?

Please help and provide code!Thanks!

like image 457
adamdehaven Avatar asked Aug 01 '12 17:08

adamdehaven


2 Answers

Try:

if (isset($_FILES['uploaded_file']) &&     $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK) {     $mail->AddAttachment($_FILES['uploaded_file']['tmp_name'],                          $_FILES['uploaded_file']['name']); } 

Basic example can also be found here.

The function definition for AddAttachment is:

public function AddAttachment($path,                               $name = '',                               $encoding = 'base64',                               $type = 'application/octet-stream') 
like image 140
drew010 Avatar answered Sep 19 '22 04:09

drew010


File could not be Attached from client PC (upload)

In the HTML form I have not added following line, so no attachment was going:

enctype="multipart/form-data"

After adding above line in form (as below), the attachment went perfect.

<form id="form1" name="form1" method="post" action="form_phpm_mailer.php"  enctype="multipart/form-data"> 
like image 45
Imtiaz Ahmad Avatar answered Sep 20 '22 04:09

Imtiaz Ahmad