2010-12-02 23:34:41 +00:00
< ? php
/**
* emails . php
*
* ProcessMaker Open Source Edition
* Copyright ( C ) 2004 - 2008 Colosa Inc . 23
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
2012-10-17 15:40:37 -04:00
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
2010-12-02 23:34:41 +00:00
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
2012-10-17 15:40:37 -04:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2010-12-02 23:34:41 +00:00
*
* For more information , contact Colosa Inc , 2566 Le Jeune Rd . ,
* Coral Gables , FL , 33134 , USA , or email info @ colosa . com .
*/
2017-08-14 16:13:46 -04:00
use ProcessMaker\Core\System ;
2017-02-15 16:26:02 +00:00
2015-03-18 17:12:38 -04:00
$filter = new InputFilter ();
$_POST = $filter -> xssFilterHard ( $_POST );
if ( isset ( $_SERVER [ 'SERVER_NAME' ])) {
$_SERVER [ 'SERVER_NAME' ] = $filter -> xssFilterHard ( $_SERVER [ 'SERVER_NAME' ]);
}
2010-12-02 23:34:41 +00:00
global $RBAC ;
2012-10-17 15:40:37 -04:00
$RBAC -> requirePermissions ( 'PM_SETUP_ADVANCE' );
2010-12-02 23:34:41 +00:00
2012-10-17 15:40:37 -04:00
$request = ( isset ( $_POST [ 'action' ] )) ? $_POST [ 'action' ] : $_POST [ 'request' ];
2010-12-02 23:34:41 +00:00
switch ( $request ) {
2012-10-17 15:40:37 -04:00
case 'init' :
$G_PUBLISH = new Publisher ();
$G_PUBLISH -> AddContent ( 'view' , 'setup/mailConnectiontest' );
G :: RenderPage ( 'publish' , 'raw' );
break ;
case 'mailTestMail_Show' :
define ( " SUCCESSFUL " , 'SUCCESSFUL' );
define ( " FAILED " , 'FAILED' );
$mail_to = $_POST [ 'mail_to' ];
$send_test_mail = $_POST [ 'send_test_mail' ];
$_POST [ 'FROM_NAME' ] = $mail_to ;
$_POST [ 'FROM_EMAIL' ] = $mail_to ;
$_POST [ 'MESS_ENGINE' ] = 'MAIL' ;
$_POST [ 'MESS_SERVER' ] = 'localhost' ;
$_POST [ 'MESS_PORT' ] = 25 ;
$_POST [ 'MESS_ACCOUNT' ] = $mail_to ;
$_POST [ 'MESS_PASSWORD' ] = '' ;
$_POST [ 'TO' ] = $mail_to ;
$_POST [ 'SMTPAuth' ] = true ;
$resp = sendTestMail ();
if ( $resp -> status ) {
print ( SUCCESSFUL . ',' . $resp -> msg ) ;
2011-01-13 23:14:20 +00:00
} else {
2012-10-17 15:40:37 -04:00
print ( FAILED . ',' . $resp -> msg ) ;
2011-01-13 23:14:20 +00:00
}
2012-10-17 15:40:37 -04:00
break ;
case 'testConnection' :
define ( " SUCCESSFUL " , 'SUCCESSFUL' );
define ( " FAILED " , 'FAILED' );
$varaux = preg_match ( " ([^//]* $ ) " , $_POST [ 'srv' ], $regs );
if ( $regs )
$srv = $regs [ 0 ];
else
$srv = $_POST [ 'srv' ];
$port = ( $_POST [ 'port' ] == 'default' ) ? 25 : $_POST [ 'port' ];
$user = $_POST [ 'account' ];
$passwd = $_POST [ 'passwd' ];
$passwdDec = G :: decrypt ( $passwd , 'EMAILENCRYPT' );
$auxPass = explode ( 'hash:' , $passwdDec );
if ( count ( $auxPass ) > 1 ) {
if ( count ( $auxPass ) == 2 ) {
$passwd = $auxPass [ 1 ];
2011-01-13 23:14:20 +00:00
} else {
2012-10-17 15:40:37 -04:00
array_shift ( $auxPass );
$passwd = implode ( '' , $auxPass );
2011-01-13 23:14:20 +00:00
}
}
2012-10-17 15:40:37 -04:00
$_POST [ 'passwd' ] = $passwd ;
$step = $_POST [ 'step' ];
$auth_required = $_POST [ 'auth_required' ];
$send_test_mail = $_POST [ 'send_test_mail' ];
$mail_to = $_POST [ 'mail_to' ];
$SMTPSecure = $_POST [ 'SMTPSecure' ];
$timeout = 10 ;
2017-08-11 15:54:49 -04:00
$Server = new Net ( $srv );
2012-10-17 15:40:37 -04:00
$smtp = new SMTP ();
switch ( $step ) {
case 1 :
if ( $Server -> getErrno () == 0 ) {
print ( SUCCESSFUL . ',' ) ;
} else {
print ( FAILED . ',' . $Server -> error ) ;
}
break ;
case 2 :
if ( $port == 0 ) {
$port = $smtp -> SMTP_PORT ;
}
$Server -> scannPort ( $port );
if ( $Server -> getErrno () == 0 ) {
print ( SUCCESSFUL . ',' ) ;
} else {
print ( FAILED . ',' . $Server -> error ) ;
}
break ;
#try to connect to host
case 3 :
$hostinfo = array ();
if ( preg_match ( '/^(.+):([0-9]+)$/' , $srv , $hostinfo )) {
$host = $hostinfo [ 1 ];
$port = $hostinfo [ 2 ];
} else {
$host = $srv ;
}
2011-01-13 23:14:20 +00:00
2012-10-17 15:40:37 -04:00
$tls = ( $SMTPSecure == 'tls' );
$ssl = ( $SMTPSecure == 'ssl' );
2012-07-25 18:47:13 -04:00
2012-10-17 15:40:37 -04:00
$resp = $smtp -> Connect ( ( $ssl ? 'ssl://' : '' ) . $host , $port , $timeout );
if ( $resp ) {
print ( SUCCESSFUL . ',' . $smtp -> status ) ;
} else {
print ( FAILED . ',' . $smtp -> error [ 'error' ]) ;
}
break ;
#try login to host
case 4 :
if ( $auth_required == 'yes' ) {
try {
$hostinfo = array ();
if ( preg_match ( '/^(.+):([0-9]+)$/' , $srv , $hostinfo )) {
$host = $hostinfo [ 1 ];
$port = $hostinfo [ 2 ];
} else {
$host = $srv ;
}
$tls = ( $SMTPSecure == 'tls' );
$ssl = ( $SMTPSecure == 'ssl' );
$resp = $smtp -> Connect ( ( $ssl ? 'ssl://' : '' ) . $host , $port , $timeout );
if ( $resp ) {
$hello = $_SERVER [ 'SERVER_NAME' ];
$smtp -> Hello ( $hello );
if ( $tls ) {
if ( ! $smtp -> StartTLS ()) {
// problem with tls
}
//We must resend HELO after tls negotiation
$smtp -> Hello ( $hello );
}
if ( $smtp -> Authenticate ( $user , $passwd )) {
print ( SUCCESSFUL . ',' . $smtp -> status ) ;
} else {
2013-05-10 11:50:14 -04:00
$smtpError = $smtp -> getError ();
print ( FAILED . ',' . $smtpError [ 'error' ]);
// print (FAILED . ',' . $smtp->error['error']) ;
2012-10-17 15:40:37 -04:00
}
} else {
2013-05-10 11:50:14 -04:00
$smtpError = $smtp -> getError ();
print ( FAILED . ',' . $smtpError [ 'error' ]);
// print (FAILED . ',' . $smtp->error['error']) ;
2012-10-17 15:40:37 -04:00
}
} catch ( Exception $e ) {
2016-07-27 16:37:21 -04:00
$token = strtotime ( " now " );
PMException :: registerErrorLog ( $e , $token );
G :: outRes ( G :: LoadTranslation ( " ID_EXCEPTION_LOG_INTERFAZ " , array ( $token )) );
2012-10-17 15:40:37 -04:00
}
} else {
print ( SUCCESSFUL . ', No authentication required!' ) ;
}
break ;
case 5 :
if ( $send_test_mail == 'yes' ) {
try {
//print(SUCCESSFUL.',ok');
2013-09-16 09:16:04 -04:00
$_POST [ 'FROM_NAME' ] = G :: LoadTranslation ( 'ID_MESS_TEST_BODY' );
$_POST [ 'FROM_EMAIL' ] = $user ;
2012-10-17 15:40:37 -04:00
2013-09-16 09:16:04 -04:00
$_POST [ 'MESS_ENGINE' ] = 'PHPMAILER' ;
$_POST [ 'MESS_SERVER' ] = $srv ;
$_POST [ 'MESS_PORT' ] = $port ;
$_POST [ 'MESS_ACCOUNT' ] = $user ;
2012-10-17 15:40:37 -04:00
$_POST [ 'MESS_PASSWORD' ] = $passwd ;
$_POST [ 'TO' ] = $mail_to ;
if ( $auth_required == 'yes' ) {
$_POST [ 'SMTPAuth' ] = true ;
} else {
$_POST [ 'SMTPAuth' ] = false ;
}
$resp = sendTestMail ();
if ( $resp -> status ) {
print ( SUCCESSFUL . ',' . $resp -> msg ) ;
} else {
print ( FAILED . ',' . $resp -> msg ) ;
}
} catch ( Exception $e ) {
2016-07-27 16:37:21 -04:00
$token = strtotime ( " now " );
PMException :: registerErrorLog ( $e , $token );
G :: outRes ( G :: LoadTranslation ( " ID_EXCEPTION_LOG_INTERFAZ " , array ( $token )) );
2012-10-17 15:40:37 -04:00
}
} else {
print ( 'jump this step' ) ;
}
break ;
default :
print ( 'test finished!' ) ;
2011-01-13 23:14:20 +00:00
}
2012-10-17 15:40:37 -04:00
break ;
}
2011-01-13 23:14:20 +00:00
2012-10-17 15:40:37 -04:00
function sendTestMail ()
{
$sFrom = ( $_POST [ 'FROM_NAME' ] != '' ? $_POST [ 'FROM_NAME' ] . ' ' : '' ) . '<' . $_POST [ 'FROM_EMAIL' ] . '>' ;
$sSubject = G :: LoadTranslation ( 'ID_MESS_TEST_SUBJECT' );
$msg = G :: LoadTranslation ( 'ID_MESS_TEST_BODY' );
switch ( $_POST [ 'MESS_ENGINE' ]) {
case 'MAIL' :
$engine = G :: LoadTranslation ( 'ID_MESS_ENGINE_TYPE_1' );
break ;
case 'PHPMAILER' :
$engine = G :: LoadTranslation ( 'ID_MESS_ENGINE_TYPE_2' );
break ;
case 'OPENMAIL' :
$engine = G :: LoadTranslation ( 'ID_MESS_ENGINE_TYPE_3' );
break ;
2011-01-13 23:14:20 +00:00
}
2010-12-02 23:34:41 +00:00
2012-10-17 15:40:37 -04:00
$sBody = "
2011-01-13 23:14:20 +00:00
< table style = \ " background-color: white; font-family: Arial,Helvetica,sans-serif; color: black; font-size: 11px; text-align: left; \" cellpadding='10' cellspacing='0' width='100%'>
2012-10-17 15:40:37 -04:00
< tbody >< tr >< td >< img id = 'logo' src = 'http://" . $_SERVER[' SERVER_NAME '] . "/images/processmaker.logo.jpg' /></ td ></ tr >
< tr >< td style = 'font-size: 14px;' > $msg [ " . date( 'H:i:s' ) . " ] - $engine </ td ></ tr >
2011-01-13 23:14:20 +00:00
< tr >< td style = 'vertical-align:middel;' >
2017-08-14 16:13:46 -04:00
< br />< hr >< b > This Business Process is powered by ProcessMaker ver . " . System::getVersion() . " .< b >< br />
2011-01-13 23:14:20 +00:00
< a href = 'http://www.processmaker.com' style = 'color:#c40000;' > www . processmaker . com </ a >< br /></ td >
</ tr ></ tbody ></ table > " ;
2017-08-14 10:56:14 -04:00
$oSpool = new SpoolRun ();
2010-12-02 23:34:41 +00:00
2012-10-17 15:40:37 -04:00
$passwd = $_POST [ 'MESS_PASSWORD' ];
$passwdDec = G :: decrypt ( $passwd , 'EMAILENCRYPT' );
$auxPass = explode ( 'hash:' , $passwdDec );
if ( count ( $auxPass ) > 1 ) {
if ( count ( $auxPass ) == 2 ) {
$passwd = $auxPass [ 1 ];
} else {
array_shift ( $auxPass );
$passwd = implode ( '' , $auxPass );
}
}
$_POST [ 'MESS_PASSWORD' ] = $passwd ;
2010-12-02 23:34:41 +00:00
2012-10-17 15:40:37 -04:00
$oSpool -> setConfig ( array ( 'MESS_ENGINE' => $_POST [ 'MESS_ENGINE' ], 'MESS_SERVER' => $_POST [ 'MESS_SERVER' ], 'MESS_PORT' => $_POST [ 'MESS_PORT' ], 'MESS_ACCOUNT' => $_POST [ 'MESS_ACCOUNT' ], 'MESS_PASSWORD' => $_POST [ 'MESS_PASSWORD' ], 'SMTPAuth' => $_POST [ 'SMTPAuth' ], 'SMTPSecure' => isset ( $_POST [ 'SMTPSecure' ] ) ? $_POST [ 'SMTPSecure' ] : 'none'
) );
2011-01-13 23:14:20 +00:00
2012-10-17 15:40:37 -04:00
$oSpool -> create ( array ( 'msg_uid' => '' , 'app_uid' => '' , 'del_index' => 0 , 'app_msg_type' => 'TEST' , 'app_msg_subject' => $sSubject , 'app_msg_from' => $sFrom , 'app_msg_to' => $_POST [ 'TO' ], 'app_msg_body' => $sBody , 'app_msg_cc' => '' , 'app_msg_bcc' => '' , 'app_msg_attach' => '' , 'app_msg_template' => '' , 'app_msg_status' => 'pending' , 'app_msg_attach' => '' // Added By Ankit
) );
2011-01-13 23:14:20 +00:00
2012-10-17 15:40:37 -04:00
$oSpool -> sendMail ();
2011-01-13 23:14:20 +00:00
2012-10-17 15:40:37 -04:00
global $G_PUBLISH ;
$G_PUBLISH = new Publisher ();
if ( $oSpool -> status == 'sent' ) {
$o -> status = true ;
$o -> msg = G :: LoadTranslation ( 'ID_MAIL_TEST_SUCCESS' );
2011-01-13 23:14:20 +00:00
} else {
2012-10-17 15:40:37 -04:00
$o -> status = false ;
$o -> msg = $oSpool -> error ;
2011-01-13 23:14:20 +00:00
}
2012-10-17 15:40:37 -04:00
return $o ;
}
function e_utf8_encode ( $input )
{
$utftext = null ;
2010-12-02 23:34:41 +00:00
2012-10-17 15:40:37 -04:00
for ( $n = 0 ; $n < strlen ( $input ); $n ++ ) {
$c = ord ( $input [ $n ] );
if ( $c < 128 ) {
$utftext .= chr ( $c );
} else if (( $c > 128 ) && ( $c < 2048 )) {
$utftext .= chr ( ( $c >> 6 ) | 192 );
$utftext .= chr ( ( $c & 63 ) | 128 );
} else {
$utftext .= chr ( ( $c >> 12 ) | 224 );
$utftext .= chr ( (( $c & 6 ) & 63 ) | 128 );
$utftext .= chr ( ( $c & 63 ) | 128 );
}
}
return $utftext ;
2011-02-22 20:32:43 +00:00
}
2012-10-17 15:40:37 -04:00