try another color:

 
try another fontsize: tiny small normal big huge
netsperience 2.x
Drupal web development and other stuff

Attach a file to an email with PHP - code that actually works

I am using Open Inviter as a contacts importer, but I need to attach the same file to each email it sends. After Googling for code snippets, and trying out three of them I was able to debug the code so it actually works. The snippets I found all had errors, such as "n" instead of "\n" and "." instead of ".=" - or screwy quotes.

Here is a link to my Open Inviter code snippet - try a demo which sends a file named "download.zip" that contains the Open Inviter files.

And herewith, PHP code that actually works to attach a file to an email, which needs some minor customizations for your specific situation:

$email_to = "[email protected]"; // The email you are sending to (example)
$email_from = "[email protected]"; // The email you are sending from (example)
$email_subject = "subject line"; // The Subject of the email
$email_txt = "text body of message"; // Message that the email has in it
$fileatt = "/home/decibelp/public_html/OpenInviter/download.zip"; // Path to the file (example)
$fileatt_type = "application/zip"; // File Type
$fileatt_name = "download.zip"; // Filename that will be used for the file as the attachment
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers="From: $email_from"; // Who the email is from (example)
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$email_message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" . $email_txt;
$email_message .= "\n\n";
$data = chunk_split(base64_encode($data));
$email_message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";

mail($email_to,$email_subject,$email_message,$headers);

if you are using a form to send the email(s) you may use $_POST values:

$email_from = $_POST['email_from']

Learn more about sending email with PHP at W3Schools

Code tested and attachment received by Yahoo, Gmail, and POP mail via Thunderbird. I am amazed at the amount of non-working code that is posted on the internet - please let me know if you have problems with this code working.

Register
url