Fix: Correct bugs in simplemail class that did not handle multi recipients correctly.

This commit is contained in:
Laurent Destailleur 2009-05-24 21:30:37 +00:00
parent c5effe4caf
commit fbf0747e0c
2 changed files with 55 additions and 46 deletions

View File

@ -263,7 +263,9 @@ class simplemail {
$this->headers = '';
if ( empty($this->recipientlist) ) { $this->error_log("destinataire manquant"); return FALSE; }
// else { $this->AddField2Header("To",$this->recipient); }
else { // DOLCHANGE LDR Fix missing recipients in header
$this->AddField2Header("To",$this->recipient);
}
if ( empty($this->subject) ) {
$this->error_log("sujet manquant");
@ -322,18 +324,22 @@ class simplemail {
case 'socket': $this->socketmailloop(); break;
}
// DOLCHANGE LDR
return (empty($this->error_log)?TRUE:FALSE);
return TRUE;
}
// Mail send by PHPmail
function phpmail() {
while ( list($key, $to) = each($this->recipientlist) ) {
$this->recipient = $to['mail'];
// DOLCHANGE LDR Fix the To in header was not filled
foreach ($this->recipientlist as $key => $to)
{
$this->recipient = ($this->recipient?$this->recipient.', ':'').$to['mail'];
}
foreach ($this->recipientlist as $key => $to)
{
// $this->recipient = $to['mail']; DOLCHANGE LDR Fix the To in header was not filled
if ( mail($to['mail'], $this->subject, $this->body, $this->makeheader() ) ) {
// DOLCHANGE LDR Comment this to have no error when no error !
//$this->error_log("envoie vers {$to['nameplusmail']} reussi");
$this->error_log("envoie vers {$to['nameplusmail']} reussi");
} else {
$this->error_log("envoie vers {$to['nameplusmail']} echoue");
}
@ -358,9 +364,11 @@ class simplemail {
function SocketSend($in,$wait='') {
fputs($this->connect, $in, strlen($in));
//echo $in;
$this->error_log($in); // DOLCHANGE LDR Add debug
//flush();
if(empty($wait)) {
$rcv = fgets($this->connect, 1024);
$this->error_log('('.$rcv.')'); // DOLCHANGE LDR Add debug
return $rcv;
}
return TRUE;
@ -373,25 +381,27 @@ class simplemail {
$this->SocketStart();
if (!isset($_SERVER['SERVER_NAME']) || empty($_SERVER['SERVER_NAME'])) { $serv = 'unknown'; }
else { $serv = $_SERVER['SERVER_NAME']; }
$this->SocketSend("HELO $serv\r\n");
// DOLCHANGE LDR
$serv = ini_get('SMTP');
$this->SocketSend("HELO $serv\r\n",'250');
}
function socketmailsend($to) {
$this->recipient = $to;
// DOLCHANGE LDR To have no error when no error
//$this->error_log("Socket vers $to");
// $this->recipient = $to; // DOLCHANGE LDR Must not reset this property
$this->error_log("Socket vers $to");
$this->SocketSend( "MAIL FROM:{$this->hfrom}\r\n" );
$this->SocketSend( "RCPT TO:$to\r\n" );
$this->SocketSend( "DATA\r\n" );
$this->SocketSend( $this->CleanMailDataString($this->headers)."\r\n", 'NOWAIT' );
$this->SocketSend( $this->CleanMailDataString($this->body)."\r\n", 'NOWAIT' );
// DOLCHANGE LDR: From has to be the raw email address, strip the "name" off
$fromarray=split(' ',$this->hfrom);
$from=(empty($fromarray[1])?$fromarray[0]:$fromarray[1]);
$this->SocketSend( "MAIL FROM: ".$from."\r\n", '250');
$this->SocketSend( "RCPT TO: <".$to.">\r\n", '250');
$this->SocketSend( "DATA\r\n", '354');
$this->SocketSend( $this->CleanMailDataString($this->headers)."\r\n".$this->CleanMailDataString($this->body)."\r\n", '250'); // DOLCHANGE LDR Must wait return 250
$this->SocketSend( ".\r\n" );
$this->SocketSend( "RSET\r\n" );
// DOLCHANGE LDR To have no error when no error
//$this->error_log("Fin de l'envoi vers $to");
$this->error_log("Fin de l'envoi vers $to");
return TRUE;
}
@ -404,8 +414,13 @@ class simplemail {
function socketmailloop() {
$this->socketmailstart();
while ( list($key, $to) = each($this->recipientlist)) {
$this->recipient = $to['mail'];
// DOLCHANGE LDR Fix the To in header was not filled
foreach ($this->recipientlist as $key => $to)
{
$this->recipient = ($this->recipient?$this->recipient.', ':'').$to['mail'];
}
foreach ($this->recipientlist as $key => $to)
{
$this->makeheader();
$this->socketmailsend($to['mail']);
}
@ -416,7 +431,9 @@ class simplemail {
function error_log($msg='') {
if(!empty($msg)) {
$this->error_log .= $msg . "\r\n--\r\n";
//$this->error_log .= $msg . "\r\n--\r\n";
//DOLCHANGE LDR Better to read log
$this->error_log .= $msg;
return TRUE;
}
return " --- Error Log --- \r\n\r\n".$this->error_log;

View File

@ -412,8 +412,8 @@ class CMailFile
if (! empty($conf->global->MAIN_MAIL_SMTP_SERVER)) ini_set('SMTP',$conf->global->MAIN_MAIL_SMTP_SERVER);
if (! empty($conf->global->MAIN_MAIL_SMTP_PORT)) ini_set('smtp_port',$conf->global->MAIN_MAIL_SMTP_PORT);
if ($conf->global->MAIN_MAIL_SENDMODE == 'mail') $dest=$this->getValidAddress($this->addr_to,2);
if (! $dest && $conf->global->MAIN_MAIL_SENDMODE == 'mail')
$dest=$this->getValidAddress($this->addr_to,2);
if (! $dest)
{
$this->error="Failed to send mail to SMTP=".ini_get('SMTP').", PORT=".ini_get('smtp_port')."<br>Recipient address '$dest' invalid";
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERROR);
@ -476,32 +476,24 @@ class CMailFile
if (! empty($conf->global->MAIN_MAIL_SMTP_SERVER)) ini_set('SMTP',$conf->global->MAIN_MAIL_SMTP_SERVER);
if (! empty($conf->global->MAIN_MAIL_SMTP_PORT)) ini_set('smtp_port',$conf->global->MAIN_MAIL_SMTP_PORT);
if ($conf->global->MAIN_MAIL_SENDMODE == 'mail') $dest=$this->getValidAddress($this->addr_to,2);
if (! $dest && $conf->global->MAIN_MAIL_SENDMODE == 'mail')
dol_syslog("CMailFile::sendfile: mail start SMTP=".ini_get('SMTP').", PORT=".ini_get('smtp_port'), LOG_DEBUG);
$this->message=stripslashes($this->message);
if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail();
$res = $this->simplemail->sendmail();
if (! $res)
{
$this->error="Failed to send mail to SMTP=".ini_get('SMTP').", PORT=".ini_get('smtp_port')."<br>Recipient address '$dest' invalid";
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERROR);
$this->error="Failed to send mail to SMTP=".ini_get('SMTP').", PORT=".ini_get('smtp_port')."<br>Check your server logs and your firewalls setup";
dol_syslog("CMailFile::sendfile: mail end error ".$this->error, LOG_ERR);
dol_syslog("CMailFile::sendfile: ".$this->simplemail->error_log, LOG_ERR);
}
else
{
dol_syslog("CMailFile::sendfile: mail start SMTP=".ini_get('SMTP').", PORT=".ini_get('smtp_port'), LOG_DEBUG);
$this->message=stripslashes($this->message);
if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail();
$res = $this->simplemail->sendmail();
if (! $res)
{
$this->error="Failed to send mail to SMTP=".ini_get('SMTP').", PORT=".ini_get('smtp_port')."<br>Check your server logs and your firewalls setup";
$this->error.="\n".$this->simplemail->error_log;
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
}
else
{
dol_syslog("CMailFile::sendfile: mail end success", LOG_DEBUG);
}
dol_syslog("CMailFile::sendfile: mail end success", LOG_DEBUG);
dol_syslog("CMailFile::sendfile: ".$this->simplemail->error_log, LOG_DEBUG);
}
if (isset($_SERVER["WINDIR"]))
@ -535,7 +527,7 @@ class CMailFile
if (! $dest)
{
$this->error="Failed to send mail to SMTP=".$conf->global->MAIN_MAIL_SMTP_SERVER.", PORT=".$conf->global->MAIN_MAIL_SMTP_PORT."<br>Recipient address '$dest' invalid";
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_DEBUG);
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
}
else
{