This commit is contained in:
Laurent Destailleur 2012-01-04 14:05:49 +01:00
parent 16c6dd3c95
commit 893b7b96f4

View File

@ -240,24 +240,46 @@ class SMTPs
/**
* Set delivery receipt
*
* @param int $_val Value
* @return void
*/
function setDeliveryReceipt($_val = 0) function setDeliveryReceipt($_val = 0)
{ {
$this->_deliveryReceipt = $_val; $this->_deliveryReceipt = $_val;
} }
/**
* get delivery receipt
*
* @return int Delivery receipt
*/
function getDeliveryReceipt() function getDeliveryReceipt()
{ {
return $this->_deliveryReceipt; return $this->_deliveryReceipt;
} }
/**
* Set errors to
*
* @param string $_strErrorsTo Errors to
* @return void
*/
function setErrorsTo($_strErrorsTo) function setErrorsTo($_strErrorsTo)
{ {
if ( $_strErrorsTo ) if ( $_strErrorsTo )
$this->_errorsTo = $this->_strip_email($_strErrorsTo); $this->_errorsTo = $this->_strip_email($_strErrorsTo);
} }
function getErrorsTo ( $_part = true ) /**
* Get errors to
*
* @param boolean $_part Variant
* @return string Errors to
*/
function getErrorsTo($_part = true )
{ {
$_retValue = ''; $_retValue = '';
@ -269,8 +291,13 @@ class SMTPs
return $_retValue; return $_retValue;
} }
/**
function setDebug( $_vDebug = false ) * Set debug
*
* @param boolean $_vDebug Value for debug
* @return void
*/
function setDebug($_vDebug = false )
{ {
$this->_debug = $_vDebug; $this->_debug = $_vDebug;
} }
@ -306,7 +333,7 @@ class SMTPs
// DOL_CHANGE LDR // DOL_CHANGE LDR
include_once(DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php');
if ( (! is_ip($host)) && ((gethostbyname ( $host )) == $host) ) if ( (! is_ip($host)) && ((gethostbyname($host)) == $host))
{ {
$this->_setErr(99, $host . ' is either offline or is an invalid host name.'); $this->_setErr(99, $host . ' is either offline or is an invalid host name.');
$_retVal = false; $_retVal = false;
@ -314,11 +341,13 @@ class SMTPs
else else
{ {
//See if we can connect to the SMTP server //See if we can connect to the SMTP server
if ( $this->socket = @fsockopen($this->getHost(), // Host to 'hit', IP or domain if ($this->socket = @fsockopen(
$this->getPort(), // which Port number to use $this->getHost(), // Host to 'hit', IP or domain
$this->errno, // actual system level error $this->getPort(), // which Port number to use
$this->errstr, // and any text that goes with the error $this->errno, // actual system level error
$this->_smtpTimeout) ) // timeout for reading/writing data over the socket $this->errstr, // and any text that goes with the error
$this->_smtpTimeout
)) // timeout for reading/writing data over the socket
{ {
// Fix from PHP SMTP class by 'Chris Ryan' // Fix from PHP SMTP class by 'Chris Ryan'
// Sometimes the SMTP server takes a little longer to respond // Sometimes the SMTP server takes a little longer to respond
@ -386,7 +415,7 @@ class SMTPs
* @return mixed void * @return mixed void
* $_strMsg If this is run in 'Test' mode, the actual message structure will be returned * $_strMsg If this is run in 'Test' mode, the actual message structure will be returned
*/ */
function sendMsg ( $_bolTestMsg = false, $_bolDebug = false ) function sendMsg($_bolTestMsg = false, $_bolDebug = false)
{ {
/** /**
* Default return value * Default return value
@ -419,7 +448,7 @@ class SMTPs
// From this point onward most server response codes should be 250 // From this point onward most server response codes should be 250
// Specify who the mail is from.... // Specify who the mail is from....
// This has to be the raw email address, strip the "name" off // This has to be the raw email address, strip the "name" off
$this->socket_send_str('MAIL FROM: ' . $this->getFrom('addr' ), '250'); $this->socket_send_str('MAIL FROM: ' . $this->getFrom('addr'), '250');
// 'RCPT TO:' must be given a single address, so this has to loop // 'RCPT TO:' must be given a single address, so this has to loop
// through the list of addresses, regardless of TO, CC or BCC // through the list of addresses, regardless of TO, CC or BCC
@ -448,7 +477,7 @@ class SMTPs
// Now tell the server we are done and close the socket... // Now tell the server we are done and close the socket...
fputs($this->socket, 'QUIT'); fputs($this->socket, 'QUIT');
fclose($this->socket ); fclose($this->socket);
} }
} }
@ -510,13 +539,13 @@ class SMTPs
{ {
// Set these properties ONLY if they are set in the php.ini file. // Set these properties ONLY if they are set in the php.ini file.
// Otherwise the default values will be used. // Otherwise the default values will be used.
if ( $_host = ini_get ('SMTPs') ) if ( $_host = ini_get('SMTPs') )
$this->setHost($_host); $this->setHost($_host);
if ( $_port = ini_get ('smtp_port') ) if ( $_port = ini_get('smtp_port') )
$this->setPort($_port); $this->setPort($_port);
if ( $_from = ini_get ('sendmail_from') ) if ( $_from = ini_get('sendmail_from') )
$this->setFrom($_from); $this->setFrom($_from);
} }
@ -535,7 +564,7 @@ class SMTPs
*/ */
function setTransportType($_type = 0) function setTransportType($_type = 0)
{ {
if ( ( is_numeric ($_type) ) && if ( ( is_numeric($_type) ) &&
( ( $_type >= 0 ) && ( $_type <= 3 ) ) ) ( ( $_type >= 0 ) && ( $_type <= 3 ) ) )
$this->_transportType = $_type; $this->_transportType = $_type;
} }
@ -603,7 +632,7 @@ class SMTPs
*/ */
function setPort($_intPort) function setPort($_intPort)
{ {
if ( ( is_numeric ($_intPort) ) && if ( ( is_numeric($_intPort) ) &&
( ( $_intPort >= 1 ) && ( $_intPort <= 65536 ) ) ) ( ( $_intPort >= 1 ) && ( $_intPort <= 65536 ) ) )
$this->_smtpsPort = $_intPort; $this->_smtpsPort = $_intPort;
} }
@ -701,7 +730,7 @@ class SMTPs
*/ */
function setTransEncode ( $_strTransEncode ) function setTransEncode ( $_strTransEncode )
{ {
if ( array_search ( $_strTransEncode, $this->_smtpsTransEncodeTypes ) ) if (array_search($_strTransEncode, $this->_smtpsTransEncodeTypes))
$this->_smtpsTransEncode = $_strTransEncode; $this->_smtpsTransEncode = $_strTransEncode;
} }
@ -802,12 +831,12 @@ class SMTPs
if ( !empty ($_addrList )) if ( !empty ($_addrList ))
{ {
// $_addrList can be a STRING or an array // $_addrList can be a STRING or an array
if ( is_string ($_addrList) ) if ( is_string($_addrList) )
{ {
// This could be a COMMA delimited string // This could be a COMMA delimited string
if ( strstr ($_addrList, ',') ) if ( strstr($_addrList, ',') )
// "explode "list" into an array // "explode "list" into an array
$_addrList = explode (',', $_addrList); $_addrList = explode(',', $_addrList);
// Stick it in an array // Stick it in an array
else else
@ -818,28 +847,28 @@ class SMTPs
foreach ( $_addrList as $_strAddr ) foreach ( $_addrList as $_strAddr )
{ {
// Strip off the end '>' // Strip off the end '>'
$_strAddr = str_replace ('>', '', $_strAddr); $_strAddr = str_replace('>', '', $_strAddr);
// Seperate "Real Name" from eMail address // Seperate "Real Name" from eMail address
$_tmpaddr = null; $_tmpaddr = null;
$_tmpaddr = explode ('<', $_strAddr); $_tmpaddr = explode('<', $_strAddr);
// We have a "Real Name" and eMail address // We have a "Real Name" and eMail address
if ( count ($_tmpaddr) == 2 ) if ( count($_tmpaddr) == 2 )
{ {
$_tmpHost = explode ('@', $_tmpaddr[1]); $_tmpHost = explode('@', $_tmpaddr[1]);
$_tmpaddr[0] = trim ($_tmpaddr[0], ' ">'); $_tmpaddr[0] = trim($_tmpaddr[0], ' ">');
$aryHost[$_tmpHost[1]][$_type][$_tmpHost[0]] = $_tmpaddr[0]; $aryHost[$_tmpHost[1]][$_type][$_tmpHost[0]] = $_tmpaddr[0];
} }
// We only have an eMail address // We only have an eMail address
else else
{ {
// Strip off the beggining '<' // Strip off the beggining '<'
$_strAddr = str_replace ('<', '', $_strAddr); $_strAddr = str_replace('<', '', $_strAddr);
$_tmpHost = explode ('@', $_strAddr); $_tmpHost = explode('@', $_strAddr);
$_tmpHost[0] = trim ($_tmpHost[0]); $_tmpHost[0] = trim($_tmpHost[0]);
$_tmpHost[1] = trim ($_tmpHost[1]); $_tmpHost[1] = trim($_tmpHost[1]);
$aryHost[$_tmpHost[1]][$_type][$_tmpHost[0]] = ''; $aryHost[$_tmpHost[1]][$_type][$_tmpHost[0]] = '';
} }
@ -871,20 +900,20 @@ class SMTPs
$_aryEmail['org'] = $_strAddr; $_aryEmail['org'] = $_strAddr;
// Set entire string to Lower Case // Set entire string to Lower Case
$_strAddr = strtolower ($_strAddr); $_strAddr = strtolower($_strAddr);
// Drop "stuff' off the end // Drop "stuff' off the end
$_strAddr = trim ($_strAddr, ' ">'); $_strAddr = trim($_strAddr, ' ">');
// Seperate "Real Name" from eMail address, if we have one // Seperate "Real Name" from eMail address, if we have one
$_tmpAry = explode ('<', $_strAddr); $_tmpAry = explode('<', $_strAddr);
// Do we have a "Real name" // Do we have a "Real name"
if ( count ($_tmpAry) == 2 ) if ( count($_tmpAry) == 2 )
{ {
// We may not really have a "Real Name" // We may not really have a "Real Name"
if ( $_tmpAry[0]) if ( $_tmpAry[0])
$_aryEmail['real'] = trim ($_tmpAry[0], ' ">'); $_aryEmail['real'] = trim($_tmpAry[0], ' ">');
$_aryEmail['addr'] = $_tmpAry[1]; $_aryEmail['addr'] = $_tmpAry[1];
} }
@ -892,7 +921,7 @@ class SMTPs
$_aryEmail['addr'] = $_tmpAry[0]; $_aryEmail['addr'] = $_tmpAry[0];
// Pull User Name and Host.tld apart // Pull User Name and Host.tld apart
list($_aryEmail['user'], $_aryEmail['host'] ) = explode ('@', $_aryEmail['addr']); list($_aryEmail['user'], $_aryEmail['host'] ) = explode('@', $_aryEmail['addr']);
// Put the brackets back around the address // Put the brackets back around the address
$_aryEmail['addr'] = '<' . $_aryEmail['addr'] . '>'; $_aryEmail['addr'] = '<' . $_aryEmail['addr'] . '>';
@ -1076,7 +1105,7 @@ class SMTPs
*/ */
function getHeader() function getHeader()
{ {
$_header = 'From: ' . $this->getFrom( 'org' ) . "\r\n" $_header = 'From: ' . $this->getFrom('org') . "\r\n"
. 'To: ' . $this->getTO() . "\r\n"; . 'To: ' . $this->getTO() . "\r\n";
if ( $this->getCC() ) if ( $this->getCC() )
@ -1119,10 +1148,11 @@ class SMTPs
/** /**
* Message Content * Message Content
* *
* @param string $_msgContent Message Content * @param string $strContent Message Content
* @return void * @param string $strType Type
* @return void
*/ */
function setBodyContent ( $strContent, $strType = 'plain' ) function setBodyContent($strContent, $strType = 'plain')
{ {
//if ( $strContent ) //if ( $strContent )
//{ //{
@ -1132,7 +1162,7 @@ class SMTPs
$strMimeType = 'text/plain'; $strMimeType = 'text/plain';
// Make RFC821 Compliant, replace bare linefeeds // Make RFC821 Compliant, replace bare linefeeds
$strContent = preg_replace("/(?<!\r)\n/si", "\r\n", $strContent ); $strContent = preg_replace("/(?<!\r)\n/si", "\r\n", $strContent);
$strContent = rtrim(wordwrap($strContent)); $strContent = rtrim(wordwrap($strContent));
@ -1157,10 +1187,10 @@ class SMTPs
$this->_setBoundary(); $this->_setBoundary();
// What type[s] of content do we have // What type[s] of content do we have
$_types = array_keys ($this->_msgContent); $_types = array_keys($this->_msgContent);
// How many content types do we have // How many content types do we have
$keyCount = count ($_types); $keyCount = count($_types);
// If we have ZERO, we have a problem // If we have ZERO, we have a problem
if( $keyCount === 0 ) if( $keyCount === 0 )
@ -1199,7 +1229,7 @@ class SMTPs
// . "\r\n" // . "\r\n"
// . 'This is a multi-part message in MIME format.' . "\r\n"; // . 'This is a multi-part message in MIME format.' . "\r\n";
$content .= "Content-Transfer-Encoding: 8bit" . "\r\n"; $content .= "Content-Transfer-Encoding: 8bit\r\n";
$content .= "\r\n"; $content .= "\r\n";
// Loop through message content array // Loop through message content array
@ -1219,9 +1249,7 @@ class SMTPs
if ( $this->getMD5flag() ) if ( $this->getMD5flag() )
$content .= 'Content-MD5: ' . $_data['md5'] . "\r\n"; $content .= 'Content-MD5: ' . $_data['md5'] . "\r\n";
$content .= "\r\n" $content .= "\r\n" . $_data['data'] . "\r\n\r\n";
. $_data['data'] . "\r\n"
. "\r\n";
} }
} }
// DOL_CHANGE LDR // DOL_CHANGE LDR
@ -1262,9 +1290,7 @@ class SMTPs
if ( $this->getMD5flag() ) if ( $this->getMD5flag() )
$content .= 'Content-MD5: ' . $_content['md5'] . "\r\n"; $content .= 'Content-MD5: ' . $_content['md5'] . "\r\n";
$content .= "\r\n" $content .= "\r\n" . $_content['data'] . "\r\n\r\n";
. $_content['data'] . "\r\n"
. "\r\n";
} }
} }
@ -1342,7 +1368,7 @@ class SMTPs
*/ */
function setSensitivity($_value = 0) function setSensitivity($_value = 0)
{ {
if ( ( is_numeric ($_value) ) && if ( ( is_numeric($_value) ) &&
( ( $_value >= 0 ) && ( $_value <= 3 ) ) ) ( ( $_value >= 0 ) && ( $_value <= 3 ) ) )
$this->_msgSensitivity = $_value; $this->_msgSensitivity = $_value;
} }
@ -1355,7 +1381,6 @@ class SMTPs
* - [2] Private * - [2] Private
* - [3] Company Confidential * - [3] Company Confidential
* *
* @param string Message Sensitivity
* @return void * @return void
*/ */
function getSensitivity() function getSensitivity()
@ -1378,7 +1403,7 @@ class SMTPs
*/ */
function setPriority ( $_value = 3 ) function setPriority ( $_value = 3 )
{ {
if ( ( is_numeric ($_value) ) && if ( ( is_numeric($_value) ) &&
( ( $_value >= 0 ) && ( $_value <= 5 ) ) ) ( ( $_value >= 0 ) && ( $_value <= 5 ) ) )
$this->_msgPriority = $_value; $this->_msgPriority = $_value;
} }
@ -1471,8 +1496,9 @@ class SMTPs
* This function has been modified as provided by SirSir to allow multiline responses when * This function has been modified as provided by SirSir to allow multiline responses when
* using SMTP Extensions * using SMTP Extensions
* *
* @param $socket * @param Handler $socket Socket handler
* @param $response * @param string $response Response
* @return boolean True or false
*/ */
function server_parse($socket, $response) function server_parse($socket, $response)
{ {
@ -1502,7 +1528,15 @@ class SMTPs
return $_retVal; return $_retVal;
} }
function socket_send_str ( $_strSend, $_returnCode = null, $CRLF = "\r\n" ) /**
* Send str
*
* @param string $_strSend String to send
* @param string $_returnCode Return code
* @param string $CRLF CRLF
* @return boolean True or false
*/
function socket_send_str( $_strSend, $_returnCode = null, $CRLF = "\r\n" )
{ {
if ($this->_debug) $this->log.=$_strSend; // DOL_CHANGE LDR for log if ($this->_debug) $this->log.=$_strSend; // DOL_CHANGE LDR for log
fputs($this->socket, $_strSend . $CRLF); fputs($this->socket, $_strSend . $CRLF);