<?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 <sam.shull@jhspecialty.com>
* @version 1.0
*
* @copyright Copyright (c) 2009 Sam Shull <sam.shull@jhspeicalty.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("sam.shull@jhspecialty.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("sam.shull@jhspecialty.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;
}
}
?>
|