Re: email w/attachments

From: Date: Tue, 19 Apr 2011 03:10:42 +0000
Subject: Re: email w/attachments
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-312457@lists.php.net to get a copy of this message
On 4/17/2011 7:26 PM, tedd wrote:
Hi gang: Anyone have an email script that allows attachments they would share? I've been trying to figure this out and everything I've tried has failed. I've looked at over a dozen scripts that don't work. I'm about to pull out what hair I have left. Cheers (I think), tedd
I'm still using pear::mail (rhaah...) so here is an example using pear::mail. So let's say you have: - text only version of the body in $body - an html version of it in $html - and a file to attach to the email whose path is $attached_file Something like this (extracting from a class I use) should help you: //... $params["host"] = ...; $params["port"] = ...; $params["auth"] = ...; $params["username"] = ...; $params["password"] = ...; $params["localhost"] = ...; $params["timeout"] = ...; $params["verp"] = ...; $params["debug"] = ...; $smtp = Mail::factory("smtp",$params); //... $random_hash = "0123456789"; // :)) $mailHeaders = array(); // Setup other headers in $mailHeaders (i.e. "From", "to") $mailHeaders["MIME-Version"] = "1.0"; $mailHeaders["Content-Type"] = "multipart/mixed;\r\n" .' boundary="PHP-mixed-' . $random_hash . '"'; $mailBody = "This is a multi-part message in MIME format.\r\n"; // --- Text body -------------------------------------------------- if($body!=null){ $mailBody .= "--PHP-mixed-" . $random_hash ."\r\n"; $mailBody .= "Content-Type: text/plain; CHARSET=US-ASCII\r\n"; $mailBody .= "Content-Transfer-Encoding: 7bit"; $mailBody .= "\r\n\r\n"; $mailBody .= $body; $mailBody .= "\r\n\r\n"; } // --- HTML body -------------------------------------------------- if($html!=null){ $mailBody .= "--PHP-mixed-" . $random_hash ."\r\n"; $mailBody .= "Content-type: text/html; charset=US-ASCII\r\n"; $mailBody .= "Content-Transfer-Encoding: 7bit"; $mailBody .= "\r\n\r\n"; $mailBody .= $html; $mailBody .= "\r\n\r\n"; } // --- Attached file (already zipped) ----------------------------- if($attachedFile!=null){ if(is_file($attachedFile)){ $mailBody .= "--PHP-mixed-" . $random_hash ."\r\n"; $mailBody .= "Content-Type: application/zip; name=\"". basename($attachedFile) . "\"\r\n"; $mailBody .= "Content-Transfer-Encoding: base64\r\n"; $mailBody .= "Content-Disposition: attachment"; $mailBody .= "\r\n\r\n"; $mailBody .= chunk_split(base64_encode(file_get_contents($attachedFile))); } } $mailBody .= "--PHP-mixed-" . $random_hash ."--"; $mailBody .= "\r\n\r\n"; // Setup $recipients (see note below) ob_start(); $sending = $smtp->send($recipients,$mailHeaders,$mailBody); ob_clean(); if ($_pear->isError($sending)){ // Process error } ---- Note In the class that runs the stuff above, I put the following comment a long time ago: /* Undocumented pear::mail Recipients $recipients = array( "To" => "...", "Cc" => "...", "Bcc" => "..." ); Headers $headers = array( "To" => "..." "Cc" => "..." ); // Do NOT specify "Bcc" in $headers (yeah make f...ing sense @$%!%) */

« previous php.general (#312457) next »