BUG 6664 "smpt configuration does support to saecure connections like gmail now"

* A radio group option was added into smtp configuration interface to select a secure connetion type
* The phpMailer thirdparty library was updated to support ssl and tls secure connections
This commit is contained in:
Erik Amaru Ortiz
2011-04-19 17:16:12 -04:00
parent 50bf854bee
commit cfa12468db
38 changed files with 4320 additions and 4166 deletions

View File

@@ -4146,11 +4146,13 @@ class Cases {
$sTo = ((($aUser['USR_FIRSTNAME'] != '') || ($aUser['USR_LASTNAME'] != '')) ? $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME'] . ' ' : '') . '<' . $aUser['USR_EMAIL'] . '>';
$oSpool = new spoolRun();
$oSpool->setConfig(array('MESS_ENGINE' => $aConfiguration['MESS_ENGINE'],
'MESS_SERVER' => $aConfiguration['MESS_SERVER'],
'MESS_PORT' => $aConfiguration['MESS_PORT'],
'MESS_ACCOUNT' => $aConfiguration['MESS_ACCOUNT'],
'MESS_SERVER' => $aConfiguration['MESS_SERVER'],
'MESS_PORT' => $aConfiguration['MESS_PORT'],
'MESS_ACCOUNT' => $aConfiguration['MESS_ACCOUNT'],
'MESS_PASSWORD' => $aConfiguration['MESS_PASSWORD'],
'SMTPAuth' => $aConfiguration['MESS_RAUTH'] == '1' ? true : false));
'SMTPAuth' => $aConfiguration['MESS_RAUTH'] == '1' ? true : false,
'SMTPSecure' => isset($aConfiguration['SMTPSecure']) ? $aConfiguration['SMTPSecure'] : ''
));
$oSpool->create(array('msg_uid' => '',
'app_uid' => $sApplicationUID,
'del_index' => $iDelegation,
@@ -4163,7 +4165,8 @@ class Cases {
'app_msg_bcc' => '',
'app_msg_attach' => '',
'app_msg_template' => '',
'app_msg_status' => 'pending'));
'app_msg_status' => 'pending'
));
if (($aConfiguration['MESS_BACKGROUND'] == '') || ($aConfiguration['MESS_TRY_SEND_INMEDIATLY'] == '1')) {
$oSpool->sendMail();
}

View File

@@ -1,105 +0,0 @@
<?php
/**
* class.spool.php
* @package workflow.engine.classes
* @brief insert mail into the spool database
*
* @package Tomahawk_Mail
* @author Ian K Armstrong <ika@[REMOVE_THESE_CAPITALS]openmail.cc>
* @copyright Copyright (c) 2007, Ian K Armstrong
* @license http://www.opensource.org/licenses/gpl-3.0.html GNU Public License
* @link http://www.openmail.cc
*
* @category web_mail
* @subpackage send
* @filesource
* @version
*
* @file class.insert.php
*
*/
require_once ( "classes/model/AppMessage.php" );
class insert
{
private $db_spool;
private $status;
/**
* construct of insert
*
* @param string $pPRO_UID
* @return void
*/
function __construct($db_spool=array())
{
if(count($db_spool)>0)
$db_spool = $this->db_insert($db_spool);
}
/**
* returnStatus
*
* @return $this->status;
*/
public function returnStatus()
{
return $this->status;
}
/**
* db_insert
*
* @param array $db_spool
* @return string $sUID;
*/
public function db_insert($db_spool)
{
$sUID = G::generateUniqueID();
$spool = new AppMessage();
$spool->setAppMsgUid($sUID);
$spool->setMsgUid($db_spool['msg_uid']);
$spool->setAppUid($db_spool['app_uid']);
$spool->setDelIndex($db_spool['del_index']);
$spool->setAppMsgType($db_spool['app_msg_type']);
$spool->setAppMsgSubject($db_spool['app_msg_subject']);
$spool->setAppMsgFrom($db_spool['app_msg_from']);
$spool->setAppMsgTo($db_spool['app_msg_to']);
$spool->setAppMsgBody($db_spool['app_msg_body']);
$spool->setAppMsgDate(date('Y-m-d H:i:s'));
$spool->setAppMsgCc($db_spool['app_msg_cc']);
$spool->setAppMsgBcc($db_spool['app_msg_bcc']);
$spool->setappMsgAttach($db_spool['app_msg_attach']);
$spool->setAppMsgTemplate($db_spool['app_msg_template']);
$spool->setAppMsgStatus($db_spool['app_msg_status']);
$spool->setAppMsgSendDate(date('Y-m-d H:i:s')); // Add by Ankit
if(!$spool->validate()) {
$errors = $spool->getValidationFailures();
$this->status = 'error';
foreach($errors as $key => $value) {
echo "Validation error - " . $value->getMessage($key) . "\n";
}
}
else {
//echo "Saving - validation ok\n";
$this->status = 'success';
$spool->save();
}
return $sUID;
}
} // end of class
?>

File diff suppressed because it is too large Load Diff

View File

@@ -129,9 +129,7 @@ class spoolRun {
* @return none
*/
public function create($aData) {
G::LoadClass('insert');
$oInsert = new insert();
$sUID = $oInsert->db_insert($aData);
$sUID = $this->db_insert($aData);
$aData['app_msg_date'] = isset($aData['app_msg_date']) ? $aData['app_msg_date'] : '';
@@ -274,11 +272,14 @@ class spoolRun {
$this->fileData['envelope_to'][] = "$val";
}
}
} else {
} else if($text != '') {
$this->fileData['envelope_to'][] = "$text";
} else {
$this->fileData['envelope_to'] = Array();
}
//for cc add by alvaro
if( false !== (strpos($textcc, ',')) ) {
//CC
if( false !== (strpos($textcc, ',')) ) {
$holdcc = explode(',', $textcc);
foreach( $holdcc as $valcc ) {
@@ -286,11 +287,14 @@ class spoolRun {
$this->fileData['envelope_cc'][] = "$valcc";
}
}
} else {
} else if($textcc != '') {
$this->fileData['envelope_cc'][] = "$textcc";
} else {
$this->fileData['envelope_cc'] = Array();
}
//forbcc add by alvaro
if( false !== (strpos($textbcc, ',')) ) {
//BCC
if( false !== (strpos($textbcc, ',')) ) {
$holdbcc = explode(',', $textbcc);
foreach( $holdbcc as $valbcc ) {
@@ -298,8 +302,10 @@ class spoolRun {
$this->fileData['envelope_bcc'][] = "$valbcc";
}
}
} else {
} else if($textbcc != '') {
$this->fileData['envelope_bcc'][] = "$textbcc";
} else {
$this->fileData['envelope_bcc'] = Array();
}
@@ -349,9 +355,18 @@ class spoolRun {
break;
case 'PHPMAILER':
G::LoadThirdParty('phpmailer', 'class.phpmailer');
$oPHPMailer = new PHPMailer();
$oPHPMailer = new PHPMailer(true);
$oPHPMailer->Mailer = 'smtp';
$oPHPMailer->SMTPAuth = (isset($this->config['SMTPAuth']) ? $this->config['SMTPAuth'] : '');
/**
* Posible Options for SMTPSecure are: "", "ssl" or "tls"
*/
if (preg_match('/^(ssl|tls)$/', $this->config['SMTPSecure'])) {
$oPHPMailer->SMTPSecure = $this->config['SMTPSecure'];
}
$oPHPMailer->Host = $this->config['MESS_SERVER'];
$oPHPMailer->Port = $this->config['MESS_PORT'];
$oPHPMailer->Username = $this->config['MESS_ACCOUNT'];
@@ -373,8 +388,9 @@ class spoolRun {
$oPHPMailer->AddAddress($sEmail);
}
}
//add cc add by alvaro
foreach( $this->fileData['envelope_cc'] as $sEmail ) {
//CC
foreach( $this->fileData['envelope_cc'] as $sEmail ) {
$evalMail = strpos($sEmail, '<');
if( strpos($sEmail, '<') !== false ) {
@@ -386,8 +402,9 @@ class spoolRun {
$oPHPMailer->AddCC($sEmail);
}
}
//add bcc add by alvaro
foreach( $this->fileData['envelope_bcc'] as $sEmail ) {
//BCC
foreach( $this->fileData['envelope_bcc'] as $sEmail ) {
$evalMail = strpos($sEmail, '<');
if( strpos($sEmail, '<') !== false ) {
@@ -491,5 +508,49 @@ class spoolRun {
}
return false;
}
/**
* db_insert
*
* @param array $db_spool
* @return string $sUID;
*/
public function db_insert($db_spool)
{
$sUID = G::generateUniqueID();
$spool = new AppMessage();
$spool->setAppMsgUid($sUID);
$spool->setMsgUid($db_spool['msg_uid']);
$spool->setAppUid($db_spool['app_uid']);
$spool->setDelIndex($db_spool['del_index']);
$spool->setAppMsgType($db_spool['app_msg_type']);
$spool->setAppMsgSubject($db_spool['app_msg_subject']);
$spool->setAppMsgFrom($db_spool['app_msg_from']);
$spool->setAppMsgTo($db_spool['app_msg_to']);
$spool->setAppMsgBody($db_spool['app_msg_body']);
$spool->setAppMsgDate(date('Y-m-d H:i:s'));
$spool->setAppMsgCc($db_spool['app_msg_cc']);
$spool->setAppMsgBcc($db_spool['app_msg_bcc']);
$spool->setappMsgAttach($db_spool['app_msg_attach']);
$spool->setAppMsgTemplate($db_spool['app_msg_template']);
$spool->setAppMsgStatus($db_spool['app_msg_status']);
$spool->setAppMsgSendDate(date('Y-m-d H:i:s')); // Add by Ankit
if(!$spool->validate()) {
$errors = $spool->getValidationFailures();
$this->status = 'error';
foreach($errors as $key => $value) {
echo "Validation error - " . $value->getMessage($key) . "\n";
}
}
else {
//echo "Saving - validation ok\n";
$this->status = 'success';
$spool->save();
}
return $sUID;
}
}
?>

View File

@@ -81,6 +81,14 @@ function testConnection() {
params += '&auth_required='+ (getField('MESS_RAUTH').checked ? 'yes' : 'no');
params += '&send_test_mail='+ (getField('MESS_TEST_MAIL').checked ? 'yes' : 'no');
params += '&mail_to=' + $('form[MESS_TEST_MAIL_TO]').value;
if(getField('SMTPSecure][ssl').checked) {
params +='&SMTPSecure=ssl';
} else if(getField('SMTPSecure][tls').checked) {
params +='&SMTPSecure=tls';
} else {
params +='&SMTPSecure=';
}
oPanel = new leimnud.module.panel();
oPanel.options = {
@@ -108,7 +116,7 @@ function testConnection() {
oRPC.callback = function(rpc) {
oPanel.loader.hide();
oPanel.addContent(rpc.xmlhttp.responseText);
testSMTPHost(1); // execution de init test
testSMTPHost(1, params); // execution de init test
}.extend(this);
oRPC.make();
};
@@ -152,19 +160,11 @@ function testConnectionMail() {
};
var resultset = true;
function testSMTPHost(step) {
function testSMTPHost(step, params) {
$("test_" + step).style.display = "block";
var requestfile = PROCESS_REQUEST_FILE;
var params = 'request=testConnection&step=' + step;
params += '&srv=' + getField('MESS_SERVER').value.trim();
params += '&port='+ ((getField('MESS_PORT').value.trim() != '') ? getField('MESS_PORT').value : 'default');
params += '&account=' + getField('MESS_ACCOUNT').value;
params += '&passwd=' + getField('MESS_PASSWORD').value;
params += '&auth_required='+ (getField('MESS_RAUTH').checked ? 'yes' : 'no');
params += '&send_test_mail='+ (getField('MESS_TEST_MAIL').checked ? 'yes' : 'no');
params += '&mail_to=' + $('form[MESS_TEST_MAIL_TO]').value;
var requestfile = PROCESS_REQUEST_FILE;
var uri = 'request=testConnection&step=' + step +'&'+ params;
var ajax = AJAX();
ajax.open("POST", requestfile, true);
@@ -193,7 +193,7 @@ function testSMTPHost(step) {
}
}
step += 1;
testSMTPHost(step);
testSMTPHost(step, params);
} catch (e) {
if (resultset) {
$('form[SAVE_CHANGES]').disabled = false;
@@ -207,7 +207,7 @@ function testSMTPHost(step) {
$('status_' + step).innerHTML = "<img src='/images/ajax-loader.gif' width=12 height=12 border=0><br/>";
}
}
ajax.send(params);
ajax.send(uri);
}
function cancelTestConnection() {
@@ -256,6 +256,7 @@ function initSet() {
hideRowById('MESS_TEST_MAIL');
hideRowById('MESS_TEST_MAIL_TO');
hideRowById('TEST');
hideRowById('SMTPSecure');
hideRowById('SAVE_CHANGES');
$('form[SAVE_CHANGES]').disabled = false;
} else {

View File

@@ -59,6 +59,8 @@ else {
}
}
$aFields['SMTPSecure'] = $aFields['SMTPSecure'] == ''? 'none' : $aFields['SMTPSecure'];
$rows[] = array ( 'uid' => 'char', 'name' => 'char', 'age' => 'integer', 'balance' => 'float' );
$rows[] = array ( 'uid' => 'PHPMAILER', 'name' => 'SMTP (PHPMailer)' );
// ending OpenMail support

View File

@@ -60,7 +60,7 @@ switch ($request) {
case 'testConnection':
G::LoadClass('net');
require_once('classes/class.smtp.rfc-821.php');
G::LoadThirdParty('phpmailer', 'class.smtp');
define("SUCCESSFUL", 'SUCCESSFUL');
define("FAILED", 'FAILED');
@@ -77,9 +77,11 @@ switch ($request) {
$auth_required = $_POST['auth_required'];
$send_test_mail = $_POST['send_test_mail'];
$mail_to = $_POST['mail_to'];
$SMTPSecure = $_POST['SMTPSecure'];
$timeout = 10;
$Server = new NET($srv);
$oSMTP = new ESMTP;
$smtp = new SMTP;
switch ($step) {
case 1:
@@ -92,7 +94,7 @@ switch ($request) {
case 2:
if($port == 0){
$port = $oSMTP->SMTP_PORT;
$port = $smtp->SMTP_PORT;
}
$Server->scannPort($port);
if ($Server->getErrno() == 0) {
@@ -104,37 +106,70 @@ switch ($request) {
#try to connect to host
case 3:
if($port == 0){
$resp = $oSMTP->Connect($srv);
$hostinfo = array();
if (preg_match('/^(.+):([0-9]+)$/', $srv, $hostinfo)) {
$host = $hostinfo[1];
$port = $hostinfo[2];
} else {
$resp = $oSMTP->Connect($srv, $port);
$host = $srv;
}
if( !$resp) {
print(FAILED.','.$oSMTP->error['error']);
$tls = ($SMTPSecure == 'tls');
$ssl = ($SMTPSecure == 'ssl');
$resp = $smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $timeout);
if ($resp) {
print(SUCCESSFUL.','.$smtp->status);
} else {
print(SUCCESSFUL.','.$oSMTP->status);
print(FAILED.','.$smtp->error['error']);
}
break;
#try login to host
case 4:
if($auth_required == 'yes'){
if($port == 0){
$resp = $oSMTP->Connect($srv);
} else {
$resp = $oSMTP->Connect($srv, $port);
}
if($resp) {
$oSMTP->do_debug = false;
$oSMTP->Hello($srv);
if( !$oSMTP->Authenticate($user, $passwd) ) {
print(FAILED.','.$oSMTP->error['error']);
if($auth_required == 'yes') {
try {
$hostinfo = array();
if (preg_match('/^(.+):([0-9]+)$/', $srv, $hostinfo)) {
$host = $hostinfo[1];
$port = $hostinfo[2];
} else {
print(SUCCESSFUL.','.$oSMTP->status);
$host = $srv;
}
} else {
print(FAILED.','.$oSMTP->error['error']);
$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 {
print(FAILED.','.$smtp->error['error']);
}
} else {
print(FAILED.','.$smtp->error['error']);
}
} catch (Exception $e) {
print(FAILED.','.$e->getMessage());
}
} else {
print(SUCCESSFUL.', No authentication required!');
@@ -143,28 +178,33 @@ switch ($request) {
case 5:
if($send_test_mail == 'yes'){
//print(SUCCESSFUL.',ok');
$_POST['FROM_NAME'] = 'Process Maker O.S. [Test mail]';
$_POST['FROM_EMAIL'] = $user;
try {
//print(SUCCESSFUL.',ok');
$_POST['FROM_NAME'] = 'Process Maker O.S. [Test mail]';
$_POST['FROM_EMAIL'] = $user;
$_POST['MESS_ENGINE'] = 'PHPMAILER';
$_POST['MESS_SERVER'] = $srv;
$_POST['MESS_PORT'] = $port;
$_POST['MESS_ACCOUNT'] = $user;
$_POST['MESS_PASSWORD'] = $passwd;
$_POST['TO'] = $mail_to;
if($auth_required == 'yes'){
$_POST['SMTPAuth'] = true;
} else {
$_POST['SMTPAuth'] = false;
}
$resp = sendTestMail();
$_POST['MESS_ENGINE'] = 'PHPMAILER';
$_POST['MESS_SERVER'] = $srv;
$_POST['MESS_PORT'] = $port;
$_POST['MESS_ACCOUNT'] = $user;
$_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);
if($resp->status){
print(SUCCESSFUL.','.$resp->msg);
} else {
print(FAILED.','.$resp->msg);
}
} catch (Exception $e) {
print(FAILED.','.$e->getMessage());
}
} else {
print('jump this step');
}
@@ -177,7 +217,7 @@ switch ($request) {
}
function sendTestMail() {
G::LoadClass("system");
$sFrom = ($_POST['FROM_NAME'] != '' ? $_POST['FROM_NAME'] . ' ' : '') . '<' . $_POST['FROM_EMAIL'] . '>';
$sSubject = G::LoadTranslation('ID_MESS_TEST_SUBJECT');
$msg = G::LoadTranslation('ID_MESS_TEST_BODY');
@@ -194,13 +234,12 @@ function sendTestMail() {
break;
}
$colosa_msg = "This Business Process is powered by <b>ProcessMaker</b>.";
$sBody = "
<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%'>
<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>
<tr><td style='vertical-align:middel;'>
<br /><hr><b>This Business Process is powered by ProcessMaker.<b><br />
<br /><hr><b>This Business Process is powered by ProcessMaker ver. ".System::getVersion().".<b><br />
<a href='http://www.processmaker.com' style='color:#c40000;'>www.processmaker.com</a><br /></td>
</tr></tbody></table>";
@@ -214,7 +253,8 @@ function sendTestMail() {
'MESS_PORT' => $_POST['MESS_PORT'],
'MESS_ACCOUNT' => $_POST['MESS_ACCOUNT'],
'MESS_PASSWORD' => $_POST['MESS_PASSWORD'],
'SMTPAuth' => $_POST['SMTPAuth']
'SMTPAuth' => $_POST['SMTPAuth'],
'SMTPSecure' => $_POST['SMTPSecure']
));
$oSpool->create(array(

View File

@@ -35,12 +35,15 @@ $aFields['MESS_PASSWORD'] = $_POST['form']['MESS_PASSWORD'];
$aFields['MESS_BACKGROUND'] = isset($_POST['form']['MESS_BACKGROUND']) ? $_POST['form']['MESS_BACKGROUND'] : '';
$aFields['MESS_EXECUTE_EVERY'] = $_POST['form']['MESS_EXECUTE_EVERY'];
$aFields['MESS_SEND_MAX'] = $_POST['form']['MESS_SEND_MAX'];
$aFields['SMTPSecure'] = $_POST['form']['SMTPSecure'];
$aFields['MESS_TRY_SEND_INMEDIATLY'] = isset($_POST['form']['MESS_TRY_SEND_INMEDIATLY']) ? $_POST['form']['MESS_TRY_SEND_INMEDIATLY'] : '';
$oConfiguration->update(array('CFG_UID' => 'Emails',
'OBJ_UID' => '',
'CFG_VALUE' => serialize($aFields),
'PRO_UID' => '',
'USR_UID' => '',
'APP_UID' => ''));
G::SendMessageText(G::LoadTranslation('ID_CHANGES_SAVED'), 'info');
G::header('location: emails');
$oConfiguration->update(array(
'CFG_UID' => 'Emails',
'OBJ_UID' => '',
'CFG_VALUE' => serialize($aFields),
'PRO_UID' => '',
'USR_UID' => '',
'APP_UID' => '')
);
G::SendTemporalMessage('ID_CHANGES_SAVED', 'TMP-INFO', 'label', 4, '100%');
G::header('location: emails');

View File

@@ -49,6 +49,15 @@
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.MESS_TEST_MAIL_TO}</td>
</tr>
<tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}"><font color="red">* </font>{$SMTPSecure}</td>
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.SMTPSecure}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}"></td>
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.MESS_BACKGROUND }</td>
</tr>
@@ -89,4 +98,4 @@
{$form.JS}
</script>
</form>
</form>

View File

@@ -19,7 +19,7 @@
</MESS_SERVER>
<MESS_PORT type="text" size="5" maxlength="5" validate="Int">
<en>Port</en>
<en>Port (default 25)</en>
</MESS_PORT>
<MESS_RAUTH type="checkbox" value="1">
@@ -42,6 +42,14 @@
<en>Mail to</en>
</MESS_TEST_MAIL_TO>
<SMTPSecure type="radiogroup" required="0" mode="edit" options="Array" viewAlign ="horizontal" defaultValue="none">
<en>Use Secure Connection
<option name="none">No</option>
<option name="tls">TLS</option>
<option name="ssl">SSL</option>
</en>
</SMTPSecure>
<MESS_BACKGROUND type="checkbox" value="1">
<en>Run in the background</en>
</MESS_BACKGROUND>
@@ -96,6 +104,7 @@
hideRowById('MESS_ACCOUNT');
hideRowById('MESS_PASSWORD');
hideRowById('SAVE_CHANGES2');
hideRowById('SMTPSecure');
showRowById('TEST');
showRowById('MESS_TEST_MAIL');
if ( getField('MESS_TEST_MAIL').checked )
@@ -108,13 +117,12 @@
case 'PHPMAILER':
hideRowById('SAVE_CHANGES2');
case 'OPENMAIL':
showRowById('MESS_SERVER');
showRowById('MESS_PORT');
showRowById('MESS_ACCOUNT');
showRowById('MESS_PASSWORD');
showRowById('TEST');
showRowById('SMTPSecure');
showRowById('MESS_RAUTH');
showRowById('MESS_TEST_MAIL');
@@ -148,6 +156,7 @@
hideRowById('MESS_SEND_MAX');
hideRowById('MESS_TRY_SEND_INMEDIATLY');
hideRowById('TEST');
hideRowById('SMTPSecure');
hideRowById('MESS_RAUTH');
hideRowById('MESS_TEST_MAIL');
hideRowById('MESS_TEST_MAIL_TO');