Location: PHPKode > scripts > fmail > fmail/fmail.class.php
<?php
/**
 *	This class has one method used for sending a MIME email the same way that
 *	PHP's standard mail function does, except the 3rd argument must be a stream
 *	thereby reducing the memory overhead need to send large attachments
 *
 *	These functions are best when used with large files that cause 
 *	memory capacity to be exceeded
 *
 *	@author Sam Shull <hide@address.com>
 *	@version 1.0
 *
 *	@copyright Copyright (c) 2009 Sam Shull <hide@address.com>
 *	@license <http://www.opensource.org/licenses/mit-license.html>
 *
 *	Permission is hereby granted, free of charge, to any person obtaining a copy
 *	of this software and associated documentation files (the "Software"), to deal
 *	in the Software without restriction, including without limitation the rights
 *	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *	copies of the Software, and to permit persons to whom the Software is
 *	furnished to do so, subject to the following conditions:
 *	
 *	The above copyright notice and this permission notice shall be included in
 *	all copies or substantial portions of the Software.
 *	
 *	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *	THE SOFTWARE.
 *
 */

class fmail
{
	/**
	 *	A function that does what the standard mail function does, 
	 *	except this function takes a stream as the third argument
	 *
	 *	@param string $to
	 *	@param string $subject
	 *	@param resource $stream
	 *	@param string $headers = null
	 *	@param string $parameters = null
	 *
	 *	@return boolean
	 *
	 *	<code>
	 *		print (int)mail("hide@address.com", "Mail Test", "This is the mail function", "FROM: Tester ");
	 *
	 *		error_reporting(E_ALL);
	 *		
	 *		$message = tmpfile();
	 *		
	 *		fwrite($message, "This is the fmail function");
	 *		
	 *		print (int)fmail::send("hide@address.com", "FMail Test", $message, "FROM: Tester ");
	 *		
	 *		fclose($message);
	 *	</code>
	 *
	 */
	static function send ($to, $subject, $stream, $headers=null, $parameters=null)
	{
		//otherwise if the $stream is not a resource fail
		if (!is_resource($stream))
		{
			trigger_error(sprintf("fmail expects parameter 3 to be a resource, '%s' given", gettype($stream)), E_USER_WARNING);
			return false;
		}
		
		//$to = preg_replace('/\r?\n(\S)/' "\r\n \\1", $to);
		//$subject = preg_replace('/\r?\n(\S)/', "\r\n \\1", $subject);
		
		//the path to the application that will be handling the message
		$mail = ini_get("sendmail_path");
		
		//print $mail;
		
		$mail_command = $parameters ? sprintf("%s %s", $mail, escapeshellcmd($parameters)) : $mail;
		
		$WIN = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
		
		//open the program - use binary for windows
		if ($sendmail = popen($mail_command, $WIN ? "wb" : "w"))
		{
			fwrite($sendmail, sprintf("To: %s\n", $to));
			fwrite($sendmail, sprintf("Subject: %s\n", $subject));
			
			if ($headers != null)
			{
				fwrite($sendmail, sprintf("%s\n", $headers));
			}
			//write the message
			//begin with a new line
			fwrite($sendmail, "\n");
			
			//rewind to beginning of stream
			rewind($stream);
			
			//write the stream to the program
			//stream_copy_to_stream($stream, $sendmail);
			while (!feof($stream))
			{
				fwrite($sendmail, fgets($stream));
			}
			
			//end with a new line
			fwrite($sendmail, "\n");
			
			return pclose($sendmail) == ($WIN ? -1 : 0);
		}
		else
		{
			trigger_error(sprintf("Could not execute mail delivery program '%s'", $mail_command), E_USER_WARNING);
		}
		
		return false;
	}
}



?>
Return current item: fmail