mirror of
https://github.com/moodle/moodle.git
synced 2025-01-21 07:28:31 +01:00
251 lines
7.0 KiB
PHP
251 lines
7.0 KiB
PHP
<?php
|
|
////////////////////////////////////////////////////
|
|
// mailerc - phpmailer client
|
|
//
|
|
// Version 0.07, Created 2001-01-03
|
|
//
|
|
// Client application for sending outgoing
|
|
// messages from a file.
|
|
//
|
|
// Author: Brent R. Matzelle <bmatzelle@yahoo.com>
|
|
//
|
|
// License: LGPL, see LICENSE
|
|
////////////////////////////////////////////////////
|
|
|
|
require("class.phpmailer.php");
|
|
|
|
// Gather global server arg variables
|
|
if(!isset($_SERVER))
|
|
$_SERVER = $HTTP_SERVER_VARS;
|
|
$cargv = $_SERVER["argv"];
|
|
$cargc = $_SERVER["argc"];
|
|
|
|
define("PROG_VERSION", "0.01");
|
|
define("PROG_NAME", $cargv[0]);
|
|
set_time_limit(0); // unlimited
|
|
|
|
// Ignore warning messages
|
|
error_reporting(E_ERROR);
|
|
|
|
/**
|
|
* mailerc - mailerc extension class
|
|
* @author Brent R. Matzelle
|
|
*/
|
|
class mailerc extends phpmailer
|
|
{
|
|
/**
|
|
* Send an email from a file created with the
|
|
* SendToQueue() function.
|
|
* @public
|
|
* @returns bool
|
|
*/
|
|
function SendFromFile($filePath) {
|
|
$qarray = array();
|
|
$to_list = array();
|
|
$header = "";
|
|
$body = "";
|
|
|
|
// Make sure is there and accessible
|
|
if(!is_file($filePath))
|
|
{
|
|
$this->error_handler(sprintf("Cannot access: %s", $filePath));
|
|
return false;
|
|
}
|
|
|
|
// upon getting header do not forget to gather the
|
|
// server info (date, recieved())
|
|
$qarray = file($filePath);
|
|
|
|
if(count($qarray) < 1)
|
|
{
|
|
$this->error_handler("Invalid queue file");
|
|
return false;
|
|
}
|
|
|
|
// Create the header and the body (just set header)
|
|
$header = $this->received();
|
|
$header .= sprintf("Date: %s\r\n", $this->rfc_date());
|
|
|
|
$msg_start = 0;
|
|
for($i = 0; $i < count($qarray); $i++)
|
|
{
|
|
if($qarray[$i] == "----END PQM HEADER----\r\n")
|
|
{
|
|
$msg_start = $i + 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for($i = $msg_start; $i < count($qarray); $i++)
|
|
$body .= $qarray[$i];
|
|
|
|
$this->Mailer = $this->qvar($qarray, "Mailer");
|
|
if($this->Mailer == "sendmail")
|
|
{
|
|
$this->Sendmail = $this->qvar($qarray, "Sendmail");
|
|
$this->Sender = $this->qvar($qarray, "Sender");
|
|
|
|
if(!$this->sendmail_send($header, $body))
|
|
return false;
|
|
}
|
|
elseif($this->Mailer == "mail")
|
|
{
|
|
$this->Sender = $this->qvar($qarray, "Sender");
|
|
$this->Subject = $this->qvar($qarray, "Subject");
|
|
|
|
$to_list = explode(";", $this->qvar($qarray, "to"));
|
|
for($i = 0; $i < count($to_list); $i++)
|
|
$this->AddAddress($to_list[0], "");
|
|
|
|
// This might not work because of not sending
|
|
// both a header and body.
|
|
if(!$this->mail_send($header, $body))
|
|
return false;
|
|
}
|
|
elseif($this->Mailer == "smtp")
|
|
{
|
|
$this->Host = $this->qvar($qarray, "Host");
|
|
$this->Port = $this->qvar($qarray, "Port");
|
|
$this->Helo = $this->qvar($qarray, "Helo");
|
|
$this->Timeout = $this->qvar($qarray, "Timeout");
|
|
$this->SMTPAuth = (int)$this->qvar($qarray, "SMTPAuth");
|
|
$this->Username = $this->qvar($qarray, "Username");
|
|
$this->Password = $this->qvar($qarray, "Password");
|
|
$this->From = $this->qvar($qarray, "From");
|
|
|
|
$to_addr = $this->qvar($qarray, "to");
|
|
if(!empty($to_addr))
|
|
{
|
|
$to_list = explode(";", $to_addr);
|
|
for($i = 0; $i < count($to_list); $i++)
|
|
$this->AddAddress($to_list[0], "");
|
|
}
|
|
|
|
$to_addr = $this->qvar($qarray, "cc");
|
|
if(!empty($to_addr))
|
|
{
|
|
$to_list = explode(";", $to_addr);
|
|
for($i = 0; $i < count($to_list); $i++)
|
|
$this->AddCC($to_list[0], "");
|
|
}
|
|
|
|
$to_addr = $this->qvar($qarray, "bcc");
|
|
if(!empty($to_addr))
|
|
{
|
|
$to_list = explode(";", $to_addr);
|
|
for($i = 0; $i < count($to_list); $i++)
|
|
$this->AddBCC($to_list[0], "");
|
|
}
|
|
|
|
if(!$this->smtp_send($header, $body))
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
$this->error_handler(sprintf("%s mailer is not supported", $this->Mailer));
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Return the given queue variable from the pqm header file. Returns
|
|
* an empty string if the data was not found.
|
|
* @private
|
|
* @return string
|
|
*/
|
|
function qvar($qarray, $data) {
|
|
$i = 0;
|
|
$pqm_marker = "----END PQM HEADER----\n";
|
|
|
|
while($qarray[$i] != $pqm_marker)
|
|
{
|
|
$item = explode(": ", $qarray[$i]);
|
|
//echo $item[0] . "\n"; // debug
|
|
if($item[0] == $data)
|
|
return rtrim($item[1]);
|
|
$i++;
|
|
}
|
|
|
|
return ""; // failure
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Print out the program version information.
|
|
* @private
|
|
* @returns void
|
|
*/
|
|
function print_version()
|
|
{
|
|
printf("mailerc %s - phpmailer client\n\n" .
|
|
"This program is distributed in the hope that it will be useful,\n" .
|
|
"but WITHOUT ANY WARRANTY; without even the implied warranty of \n" .
|
|
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" .
|
|
"GNU Lesser General Public License for more details.\n\n" .
|
|
"Written by: Brent R. Matzelle\n", PROG_VERSION);
|
|
}
|
|
|
|
/*
|
|
Print out the help message to the console.
|
|
@private
|
|
@returns void
|
|
*/
|
|
function print_help()
|
|
{
|
|
printf("mailerc %s, phpmailer queue daemon.\n", PROG_VERSION);
|
|
printf("Usage: %s [OPTION] [FILE]\n", PROG_NAME);
|
|
printf("
|
|
Options:
|
|
-h, --help print this help.
|
|
-V, --version print version information.
|
|
-s, --send send [FILE]\n");
|
|
}
|
|
|
|
/**
|
|
* Sends a given message from a pqm (Phpmailer Queue Message) file.
|
|
* @private
|
|
* @returns bool
|
|
*/
|
|
function send_message($filePath)
|
|
{
|
|
// Open the file and read the header contents and set
|
|
// another message. Then run the phpmailer send file.
|
|
$mail = new mailerc();
|
|
if(!$mail->SendFromFile($filePath))
|
|
printf("error: %s\n", $mail->ErrorInfo);
|
|
else
|
|
printf("success: sent\n");
|
|
}
|
|
|
|
/*
|
|
Pseudo main()
|
|
*/
|
|
if($cargc < 1)
|
|
{
|
|
print_version();
|
|
exit;
|
|
}
|
|
|
|
switch($cargv[1])
|
|
{
|
|
case "-h":
|
|
case "--help":
|
|
print_help();
|
|
break;
|
|
case "-V":
|
|
case "--version":
|
|
print_version();
|
|
break;
|
|
case "-s":
|
|
case "--send":
|
|
send_message($cargv[2]);
|
|
break;
|
|
default:
|
|
print_help();
|
|
}
|
|
|
|
return 0; // return success
|
|
?>
|