Edit working php mail() to include pdf attachment

I have the following code that currently sends an email based on session variables.  It works perfectly (I have changed the email addresses only to comply with EE rules of not showing your real email address).

I need to ammend the following code so that it always sends out an attachment called form.pdf (which is found in the root directory).  How do I edit my code to add an PDF attachment.
<?php session_start();?>
<?php
	$emailSubject = 'New Automated Email';
	$webMaster = 'someone@fakeemail.com';
	$firstnameEM = $_SESSION['svFirstName'];
	$lastnameEM = $_SESSION['svLastName'];
	$companyEM = $_SESSION['svCompany'];
	$phoneEM = $_SESSION['svphone'];
	$emailEM = $_SESSION['svemail'];
	$dateEM = date('l, F dS Y.');
	$body = <<<EOD
<br><hr><br>
First Name:  $firstnameEM <br><br>
Last Name:  $lastnameEM <br><br>
Company:  $companyEM <br><br>
Phone: $phoneEM <br><br>
Email:  $emailEM <br><br>
Date Completed Form:  $dateEM <br><br>
 
EOD;
 
	/*$headers = "From: $emailField\r\n";  */
	$headers = "From:  fake@email.com\r\n";
	
	$headers .= "Content-type: text/html\r\n";
	$success = mail($webMaster, $emailSubject, $body, $headers);
	$theResults = <<<EOD
 
EOD;
echo "$theResults";
	
 
?>

Open in new window

fastfind1Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
agriesserConnect With a Mentor Commented:
I was in the need for something similar some time ago and found a fully working "send_mail" implementation on php.net.

In your case, you'd only have to substitute the mail() invocation with send_mail().
I attached the code snippet, please give it a try.

The parameter "attachments" to the function shown below must be filled like this:

  $attachment=array(0);
  $attachment[0] = array( "file" => $filename, "content_type" => "application/pdf" );

Please note that the "content_type" option has to be changed acording to the type of attachment you want to send.

/*
 * send_mail() implementation (uses the PHP mail() function and allows for attaching
 * files
 * found on http://php.net
 */
function send_mail($to, $body, $subject, $fromaddress, $fromname, $attachments=false)
{
  $eol="\r\n";
  $mime_boundary=md5(time());
 
  # Common Headers
  $headers .= "From: ".$fromname."<".$fromaddress.">".$eol;
  $headers .= "Reply-To: ".$fromname."<".$fromaddress.">".$eol;
  $headers .= "Return-Path: ".$fromname."<".$fromaddress.">".$eol;    // these two to set reply address
  $headers .= "Message-ID: <".time()."-".$fromaddress.">".$eol;
  $headers .= "X-Mailer: PHP v".phpversion().$eol;          // These two to help avoid spam-filters
 
  # Boundry for marking the split & Multitype Headers
  $headers .= 'MIME-Version: 1.0'.$eol;
  $headers .= "Content-Type: multipart/mixed; boundary=\"".$mime_boundary."\"".$eol.$eol;
 
  # Open the first part of the mail
  $msg = "--".$mime_boundary.$eol;
 
  $htmlalt_mime_boundary = $mime_boundary."_htmlalt"; //we must define a different MIME boundary for this section
  # Setup for text OR html -
  $msg .= "Content-Type: multipart/alternative; boundary=\"".$htmlalt_mime_boundary."\"".$eol.$eol;
 
  # Text Version
  $msg .= "--".$htmlalt_mime_boundary.$eol;
  $msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
  $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  $msg .= strip_tags(str_replace(array("<br>", "<br />", "<br/>"), array("\n", "\n", "\n"), $body)) . $eol . $eol;
//  $msg .= strip_tags(str_replace("<br>", "\n", substr($body, (strpos($body, "<body>")+6)))).$eol.$eol;
 
  # HTML Version
  $msg .= "--".$htmlalt_mime_boundary.$eol;
  $msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
  $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  $msg .= $body.$eol.$eol;
 
  //close the html/plain text alternate portion
  $msg .= "--".$htmlalt_mime_boundary."--".$eol.$eol;
 
  if ($attachments !== false)
  {
    for($i=0; $i < count($attachments); $i++)
    {
      if (is_file($attachments[$i]["file"]))
      {
        # File for Attachment
        $file_name = substr($attachments[$i]["file"], (strrpos($attachments[$i]["file"], "/")+1));
 
        $handle=fopen($attachments[$i]["file"], 'rb');
        $f_contents=fread($handle, filesize($attachments[$i]["file"]));
        $f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode();
        $f_type=filetype($attachments[$i]["file"]);
        fclose($handle);
 
        # Attachment
        $msg .= "--".$mime_boundary.$eol;
        $msg .= "Content-Type: ".$attachments[$i]["content_type"]."; name=\"".$file_name."\"".$eol;  // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
        $msg .= "Content-Transfer-Encoding: base64".$eol;
        $msg .= "Content-Description: ".$file_name.$eol;
        $msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
        $msg .= $f_contents.$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,$fromaddress);  // the INI lines are to force the From Address to be used !
  $mail_sent = mail($to, $subject, $msg, $headers);
 
  ini_restore(sendmail_from);
 
  return $mail_sent;
}

Open in new window

0
 
hernst42Commented:
use a mailer class for the attachment like
http://phpmailers.f.net
http://swiftmailer.sf.net

those classes are easy to use and code the mail correctly. Your code should be easy transformed to use those classes.
0
 
hernst42Commented:
ups should be http://phpmailer.sf.net
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.