Authenticate() 공개 메소드

Performs SMTP authentication. Must be run after running the Hello() method. Returns true if successfully authenticated.
public Authenticate ( $username, $password ) : boolean
리턴 boolean
예제 #1
0
 public function Authenticate($username, $password, $authtype = 'LOGIN', $realm = '', $workstation = '')
 {
     $result = false;
     // check if the resource is valid
     if (!is_resource($this->smtp_conn)) {
         $this->error = array("error" => "Not a valid SMTP resource supplied");
     } else {
         $result = parent::Authenticate($username, $password, $authtype, $realm, $workstation);
     }
     $this->handleError();
     return $result;
 }
예제 #2
0
 /**
  * Sends mail via SMTP using PhpSMTP (Author:
  * Chris Ryan).  Returns bool.  Returns false if there is a
  * bad MAIL FROM, RCPT, or DATA input.
  * @private
  * @returns bool
  */
 function smtp_send($header, $body)
 {
     // Include SMTP class code, but not twice
     include_once $this->PluginDir . "class.smtp.php";
     $smtp = new SMTP();
     $smtp->do_debug = $this->SMTPDebug;
     // Try to connect to all SMTP servers
     $hosts = explode(";", $this->Host);
     $index = 0;
     $connection = false;
     $smtp_from = "";
     $bad_rcpt = array();
     $e = "";
     // Retry while there is no connection
     while ($index < count($hosts) && $connection == false) {
         if (strstr($hosts[$index], ":")) {
             list($host, $port) = explode(":", $hosts[$index]);
         } else {
             $host = $hosts[$index];
             $port = $this->Port;
         }
         if ($smtp->Connect($host, $port, $this->Timeout)) {
             $connection = true;
         }
         //printf("%s host could not connect<br>", $hosts[$index]); //debug only
         $index++;
     }
     if (!$connection) {
         $this->error_handler("SMTP Error: could not connect to SMTP host server(s)");
         return false;
     }
     // Must perform HELO before authentication
     $smtp->Hello($this->Helo);
     // If user requests SMTP authentication
     if ($this->SMTPAuth) {
         if (!$smtp->Authenticate($this->Username, $this->Password)) {
             $this->error_handler("SMTP Error: Could not authenticate");
             return false;
         }
     }
     if ($this->Sender == "") {
         $smtp_from = $this->From;
     } else {
         $smtp_from = $this->Sender;
     }
     if (!$smtp->Mail(sprintf("<%s>", $smtp_from))) {
         $e = sprintf("SMTP Error: From address [%s] failed", $smtp_from);
         $this->error_handler($e);
         return false;
     }
     // Attempt to send attach all recipients
     for ($i = 0; $i < count($this->to); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->to[$i][0]))) {
             $bad_rcpt[] = $this->to[$i][0];
         }
     }
     for ($i = 0; $i < count($this->cc); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->cc[$i][0]))) {
             $bad_rcpt[] = $this->cc[$i][0];
         }
     }
     for ($i = 0; $i < count($this->bcc); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->bcc[$i][0]))) {
             $bad_rcpt[] = $this->bcc[$i][0];
         }
     }
     // Create error message
     if (count($bad_rcpt) > 0) {
         for ($i = 0; $i < count($bad_rcpt); $i++) {
             if ($i != 0) {
                 $e .= ", ";
             }
             $e .= $bad_rcpt[$i];
         }
         $e = sprintf("SMTP Error: The following recipients failed [%s]", $e);
         $this->error_handler($e);
         return false;
     }
     if (!$smtp->Data(sprintf("%s%s", $header, $body))) {
         $this->error_handler("SMTP Error: Data not accepted");
         return false;
     }
     $smtp->Quit();
     return true;
 }
 function checkSMTP($smtp_server, $smtp_port = 25, $username, $password, $auth_enabled = false, $tls_enabled = true)
 {
     require_once "libs/phpmailer/class.smtp.php";
     $smtp = new SMTP();
     $smtp->Connect($smtp_server, $smtp_port);
     if (!$smtp->Connected()) {
         return array("ERROR" => "Failed to connect to server", "SMTP_ERROR" => $smtp->getError());
     }
     if (!$smtp->Hello()) {
         return array("ERROR" => "Failed to send hello command", "SMTP_ERROR" => $smtp->getError());
     }
     if ($tls_enabled) {
         if (!$smtp->StartTLS()) {
             return array("ERROR" => "Failed to start TLS", "SMTP_ERROR" => $smtp->getError());
         }
     }
     if ($auth_enabled) {
         if (!$smtp->Authenticate($username, $password)) {
             $error = $smtp->getError();
             if (preg_match("/STARTTLS/", $error['smtp_msg'])) {
                 return array("ERROR" => "Authenticate Error, TLS must be activated", "SMTP_ERROR" => $smtp->getError());
             } else {
                 return array("ERROR" => "Authenticate not accepted from server", "SMTP_ERROR" => $smtp->getError());
             }
         }
     }
     return true;
 }
예제 #4
0
 /**
  * for Test email configuration
  * @autor Alvaro  <*****@*****.**>
  */
 public function testConnection($params)
 {
     G::LoadClass('net');
     G::LoadThirdParty('phpmailer', 'class.smtp');
     if ($_POST['typeTest'] == 'MAIL') {
         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;
         try {
             $resp = $this->sendTestMail();
         } catch (Exception $error) {
             $resp = new stdclass();
             $resp->status = false;
             $resp->msg = $error->getMessage();
         }
         $response = array('success' => $resp->status);
         if ($resp->status == false) {
             $response['msg'] = G::LoadTranslation('ID_SENDMAIL_NOT_INSTALLED');
         }
         echo G::json_encode($response);
         die;
     }
     $step = $_POST['step'];
     $server = $_POST['server'];
     $user = $_POST['user'];
     $passwd = $_POST['passwd'];
     $passwdHide = $_POST['passwdHide'];
     if (trim($passwdHide) != '') {
         $passwd = $passwdHide;
         $passwdHide = '';
     }
     $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['passwd'] = $passwd;
     $port = $_POST['port'];
     $auth_required = $_POST['req_auth'];
     $UseSecureCon = $_POST['UseSecureCon'];
     $SendaTestMail = $_POST['SendaTestMail'];
     $Mailto = $_POST['eMailto'];
     $SMTPSecure = $_POST['UseSecureCon'];
     $Server = new NET($server);
     $smtp = new SMTP();
     $timeout = 10;
     $hostinfo = array();
     $srv = $_POST['server'];
     switch ($step) {
         case 1:
             $this->success = $Server->getErrno() == 0;
             $this->msg = $this->result ? 'success' : $Server->error;
             break;
         case 2:
             $Server->scannPort($port);
             $this->success = $Server->getErrno() == 0;
             //'Successfull'.$smtp->status;
             $this->msg = $this->result ? '' : $Server->error;
             break;
         case 3:
             //try to connect to host
             if (preg_match('/^(.+):([0-9]+)$/', $srv, $hostinfo)) {
                 $server = $hostinfo[1];
                 $port = $hostinfo[2];
             } else {
                 $host = $srv;
             }
             $tls = strtoupper($SMTPSecure) == 'tls';
             $ssl = strtoupper($SMTPSecure) == 'ssl';
             $this->success = $smtp->Connect(($ssl ? 'ssl://' : '') . $server, $port, $timeout);
             $this->msg = $this->result ? '' : $Server->error;
             break;
         case 4:
             //try login to host
             if ($auth_required == 'true') {
                 try {
                     if (preg_match('/^(.+):([0-9]+)$/', $srv, $hostinfo)) {
                         $server = $hostinfo[1];
                         $port = $hostinfo[2];
                     } else {
                         $server = $srv;
                     }
                     if (strtoupper($UseSecureCon) == 'TLS') {
                         $tls = 'tls';
                     }
                     if (strtoupper($UseSecureCon) == 'SSL') {
                         $tls = 'ssl';
                     }
                     $tls = strtoupper($UseSecureCon) == 'tls';
                     $ssl = strtoupper($UseSecureCon) == 'ssl';
                     $server = $_POST['server'];
                     if (strtoupper($UseSecureCon) == 'SSL') {
                         $resp = $smtp->Connect('ssl://' . $server, $port, $timeout);
                     } else {
                         $resp = $smtp->Connect($server, $port, $timeout);
                     }
                     if ($resp) {
                         $hello = $_SERVER['SERVER_NAME'];
                         $smtp->Hello($hello);
                         if (strtoupper($UseSecureCon) == 'TLS') {
                             $smtp->Hello($hello);
                         }
                         if ($smtp->Authenticate($user, $passwd)) {
                             $this->success = true;
                         } else {
                             $this->success = false;
                             $this->msg = $smtp->error['error'];
                         }
                     } else {
                         $this->success = false;
                         $this->msg = $smtp->error['error'];
                     }
                 } catch (Exception $e) {
                     $this->success = false;
                     $this->msg = $e->getMessage();
                 }
             } else {
                 $this->success = true;
                 $this->msg = 'No authentication required!';
             }
             break;
         case 5:
             if ($SendaTestMail == 'true') {
                 try {
                     $_POST['FROM_NAME'] = 'Process Maker O.S. [Test mail]';
                     $_POST['FROM_EMAIL'] = $user;
                     $_POST['MESS_ENGINE'] = 'PHPMAILER';
                     $_POST['MESS_SERVER'] = $server;
                     $_POST['MESS_PORT'] = $port;
                     $_POST['MESS_ACCOUNT'] = $user;
                     $_POST['MESS_PASSWORD'] = $passwd;
                     $_POST['TO'] = $Mailto;
                     if ($auth_required == 'true') {
                         $_POST['SMTPAuth'] = true;
                     } else {
                         $_POST['SMTPAuth'] = false;
                     }
                     if (strtolower($_POST["UseSecureCon"]) != "no") {
                         $_POST["SMTPSecure"] = $_POST["UseSecureCon"];
                     }
                     if ($_POST['UseSecureCon'] == 'ssl') {
                         $_POST['MESS_SERVER'] = 'ssl://' . $_POST['MESS_SERVER'];
                     }
                     $resp = $this->sendTestMail();
                     if ($resp->status == '1') {
                         $this->success = true;
                     } else {
                         $this->success = false;
                         $this->msg = $smtp->error['error'];
                     }
                 } catch (Exception $e) {
                     $this->success = false;
                     $this->msg = $e->getMessage();
                 }
             } else {
                 $this->success = true;
                 $this->msg = 'jump this step';
             }
             break;
     }
 }
예제 #5
0
             $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 {
                 $smtpError = $smtp->getError();
                 print FAILED . ',' . $smtpError['error'];
                 // print (FAILED . ',' . $smtp->error['error']) ;
             }
         } else {
             $smtpError = $smtp->getError();
             print FAILED . ',' . $smtpError['error'];
             // print (FAILED . ',' . $smtp->error['error']) ;
         }
     } catch (Exception $e) {
         print FAILED . ',' . $e->getMessage();
     }
 } else {
예제 #6
0
 /**
  * Sends mail via SMTP using PhpSMTP (Author:
  * Chris Ryan).  Returns bool.  Returns false if there is a
  * bad MAIL FROM, RCPT, or DATA input.
  * @private
  * @returns bool
  */
 function smtp_send($header, $body)
 {
     // Include SMTP class code, but not twice
     include_once "class.smtp.php";
     // Load code only if asked
     $smtp = new SMTP();
     $smtp->do_debug = $this->SMTPDebug;
     // Try to connect to all SMTP servers
     $hosts = explode(";", $this->Host);
     //$this -> Curent_SMTP_Server = $this -> Curent_SMTP_Server + $this -> nb_try;
     if ($this->Debug_Roll) {
         echo "<br>amount of HostName :" . count($hosts) . "<br><br>";
     }
     if ($this->Debug_Roll) {
         echo "<br>Curent_SMTP_Server : " . $this->Curent_SMTP_Server;
     }
     $this->Curent_SMTP_Server = ($this->Curent_SMTP_Server + 1) % count($hosts);
     if ($this->Debug_Roll) {
         echo "<br><br>Curent_SMTP_Server : " . $this->Curent_SMTP_Server . "<br>";
     }
     if ($this->Debug_Roll) {
         print_r($hosts);
     }
     if (count($hosts) > 1) {
         for ($i = 0; $i < $this->Curent_SMTP_Server; $i++) {
             $the_shift = array_shift($hosts);
             array_push($hosts, $the_shift);
         }
     }
     if ($this->Debug_Roll) {
         echo "<br>";
     }
     if ($this->Debug_Roll) {
         print_r($hosts);
     }
     $index = 0;
     $connection = false;
     $smtp_from = "";
     $bad_rcpt = array();
     $e = "";
     // Retry while there is no connection
     while ($this->nb_try < count($hosts) && $connection == false) {
         $this->nb_try++;
         if (strstr($hosts[$index], ":")) {
             list($host, $port) = explode(":", $hosts[$index]);
         } else {
             $host = $hosts[$index];
             $port = $this->Port;
         }
         if ($this->Debug_Roll) {
             echo "<br>  --> Host_USED: {$host} Port_USED: {$port} --->";
         }
         if ($smtp->Connect($host, $port, $this->Timeout)) {
             $connection = true;
             if ($this->Debug_Roll) {
                 echo "<br>OK<br>";
             }
         } else {
             //printf("<br><b> %s </b> :: host could not connect<br>", $hosts[$index]); //debug only
             if ($this->Debug_Roll) {
                 echo "<br>NO<br>";
             }
             $this->Curent_SMTP_Server = $this->Curent_SMTP_Server + 1;
         }
         $index++;
     }
     if (!$connection) {
         //echo "SMTP Error: could not connect to SMTP host server(s) ::: $host";
         $this->error_handler("SMTP Error: could not connect to SMTP host server(s)");
         return false;
     }
     // Must perform HELO before authentication
     $smtp->Hello($this->Helo);
     // If user requests SMTP authentication
     if ($this->SMTPAuth) {
         if (!$smtp->Authenticate($this->Username, $this->Password)) {
             if ($this->Debug_Roll) {
                 echo "<br> SMTP Error: Could not authenticate ({$this->Username}, {$this->Password})";
             }
             $this->error_handler("SMTP Error: Could not authenticate ({$this->Username}, {$this->Password})");
             //echo "<br>SMTP Error: Could not authenticate";
             return false;
         }
     }
     if ($this->Sender == "") {
         $smtp_from = $this->From;
     } else {
         $smtp_from = $this->Sender;
     }
     if (!$smtp->Mail(sprintf("<%s>", $smtp_from))) {
         $e = sprintf("SMTP Error: From address [%s] failed", $smtp_from);
         if ($this->Debug_Roll) {
             echo "<br> {$e}";
         }
         $this->error_handler($e);
         return false;
     }
     // Attempt to send attach all recipients
     for ($i = 0; $i < count($this->to); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->to[$i][0]))) {
             if ($smtp->code_error != 550) {
                 //Relaying denied
                 $bad_rcpt[] = $this->to[$i][0];
             } else {
                 if ($this->Debug_Roll) {
                     echo "<br><br> Relaying denied !!!";
                 }
                 if ($this->Debug_Roll) {
                     echo "<br>  --> Host_USED: {$host} Port_USED: {$port} --->";
                 }
                 if ($this->Debug_Roll) {
                     echo "<br>Curent_SMTP_Server : " . $this->Curent_SMTP_Server;
                 }
                 if ($this->Debug_Roll) {
                     echo "<br> NB TRY : " . $this->nb_try . "<br>";
                 }
                 if ($this->Debug_Roll) {
                     print_r($hosts);
                 }
                 $this->Recup_code_error = $smtp->code_error;
                 return false;
             }
         }
     }
     for ($i = 0; $i < count($this->cc); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->cc[$i][0]))) {
             $bad_rcpt[] = $this->cc[$i][0];
         }
     }
     for ($i = 0; $i < count($this->bcc); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->bcc[$i][0]))) {
             $bad_rcpt[] = $this->bcc[$i][0];
         }
     }
     // Create error message
     if (count($bad_rcpt) > 0) {
         for ($i = 0; $i < count($bad_rcpt); $i++) {
             if ($i != 0) {
                 $e .= ", ";
             }
             $e .= $bad_rcpt[$i];
         }
         $e = sprintf("SMTP Error: The following recipients failed [%s]", $e);
         $this->error_handler($e);
         if ($this->Debug_Roll) {
             echo "<br>{$e}";
         }
         return false;
     }
     if (!$smtp->Data(sprintf("%s%s", $header, $body))) {
         $this->error_handler("SMTP Error: Data not accepted");
         if ($this->Debug_Roll) {
             echo "<br>SMTP Error: Data not accepted";
         }
         return false;
     }
     $smtp->Quit();
     if ($this->Debug_Roll) {
         echo "<br> SUCCESS !!!";
     }
     return true;
 }
예제 #7
0
 public function send($para = array(), $single = false, $priority = 3, $extHeader = "")
 {
     if ($this->from == '') {
         $this->from = ini_get('sendmail_from');
     }
     $this->addHeader("Return-Path", $this->from);
     $mail_list = array_merge($this->to, $this->cc, $this->bcc);
     if ($single == false) {
         if (count($this->to) > 0) {
             $this->addHeader("To", implode(', ', $this->formatEmail($this->to)));
         }
         if (count($this->cc) > 0) {
             $this->addHeader("Cc", implode(', ', $this->formatEmail($this->cc)));
         }
         if (count($this->bcc) > 0) {
             $this->addHeader("Bcc", implode(', ', $this->formatEmail($this->bcc)));
         }
     }
     $this->addHeader("From", $this->from);
     if (count($this->reply) > 0) {
         $this->addHeader("Reply-To", implode(', ', $this->formatEmail($this->reply)));
     }
     $this->addHeader("Subject", $this->subject);
     $this->addHeader("Message-ID", sprintf("<%s@%s>", md5(uniqid(time())), $_SERVER["HTTP_HOST"]));
     if (!preg_match("/[1-5]/", $priority)) {
         $priority = 3;
     }
     $this->addHeader("X-Priority", $priority);
     $this->addHeader("X-Mailer", "MyStep_CMS");
     $this->addHeader("MIME-Version", "1.0");
     $mail_content = implode("\r\n", $this->headers) . "\r\n";
     if (!empty($extHeader)) {
         $mail_content .= $extHeader . "\r\n";
     }
     $mail_content .= $this->buildMail();
     $info = "";
     if (!empty($para['mode'])) {
         require "class.smtp.php";
         $smtp = new SMTP();
         if (!$smtp->Connect(($para['mode'] == "ssl" || $para['mode'] == "ssl/tls" ? "ssl://" : "") . $para['host'], $para['port'], 10)) {
             $this->Error("Cannot connect to the mail server!");
             return false;
         }
         if (!$smtp->Hello($_SERVER["HTTP_HOST"])) {
             $this->Error("Cannot send messege to the mail server!");
             return false;
         }
         if ($para['mode'] == "tls" || $para['mode'] == "ssl/tls") {
             if (!$smtp->StartTLS()) {
                 $this->Error("TLS error!");
                 return false;
             }
             $smtp->Hello($_SERVER["HTTP_HOST"]);
         }
         if (isset($para['user'])) {
             if (!$smtp->Authenticate($para['user'], $para['password'])) {
                 $this->Error("Authenticate Failed!");
                 return false;
             }
         }
         if (!$smtp->Mail(ini_get('sendmail_from'))) {
             $this->Error("Bad sender email");
             return false;
         }
         for ($i = 0, $m = count($mail_list); $i < $m; $i++) {
             if ($smtp->Recipient($mail_list[$i][0])) {
                 $info = " sended!";
             } else {
                 $info = " error!";
             }
             if ($this->log_fp) {
                 fwrite($this->log_fp, $mail_list[$i][0] . $info . "\n");
             }
         }
         if (!$smtp->Data($mail_content)) {
             $this->Error("Mail send Failed!");
             return false;
         }
         $smtp->Reset();
         if ($smtp->Connected()) {
             $smtp->Quit();
             $smtp->Close();
         }
     } else {
         for ($i = 0, $m = count($mail_list); $i < $m; $i++) {
             if (!@mail(formatEmail($mail_list[$i]), $this->subject, "", $mail_content)) {
                 $info = " sended!";
             } else {
                 $info = " error!";
             }
             if ($this->log_fp) {
                 fwrite($this->log_fp, $mail_list[$i][0] . $info . "\n");
             }
         }
     }
     if ($this->log_fp) {
         fclose($this->log_fp);
     }
     return true;
 }
예제 #8
0
 /**
  * Test connection by step
  *
  * @param array $arrayData Data
  * @param int   $step      Step
  *
  * return array Return array with result of test connection by step
  */
 public function testConnectionByStep(array $arrayData, $step = 0)
 {
     try {
         \G::LoadClass("net");
         \G::LoadThirdParty("phpmailer", "class.smtp");
         //MAIL
         if ($arrayData["MESS_ENGINE"] == "MAIL") {
             $arrayDataMail = array();
             $eregMail = "/^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*@[0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\\.[0-9a-zA-Z]{2,3}\$/";
             $arrayDataMail["FROM_EMAIL"] = $arrayData["MESS_FROM_MAIL"] != "" && preg_match($eregMail, $arrayData["MESS_FROM_MAIL"]) ? $arrayData["MESS_FROM_MAIL"] : "";
             $arrayDataMail["FROM_NAME"] = $arrayData["MESS_FROM_NAME"] != "" ? $arrayData["MESS_FROM_NAME"] : \G::LoadTranslation("ID_MESS_TEST_BODY");
             $arrayDataMail["MESS_ENGINE"] = "MAIL";
             $arrayDataMail["MESS_SERVER"] = "localhost";
             $arrayDataMail["MESS_PORT"] = 25;
             $arrayDataMail["MESS_ACCOUNT"] = $arrayData["MAIL_TO"];
             $arrayDataMail["MESS_PASSWORD"] = "";
             $arrayDataMail["TO"] = $arrayData["MAIL_TO"];
             $arrayDataMail["MESS_RAUTH"] = true;
             $arrayTestMailResult = array();
             try {
                 $arrayTestMailResult = $this->sendTestMail($arrayDataMail);
             } catch (Exception $e) {
                 $arrayTestMailResult["status"] = false;
                 $arrayTestMailResult["message"] = $e->getMessage();
             }
             $arrayResult = array("result" => $arrayTestMailResult["status"], "message" => "");
             if ($arrayTestMailResult["status"] == false) {
                 $arrayResult["message"] = \G::LoadTranslation("ID_SENDMAIL_NOT_INSTALLED");
             }
             //Return
             return $arrayResult;
         }
         //PHPMAILER
         $server = $arrayData["MESS_SERVER"];
         $user = $arrayData["MESS_ACCOUNT"];
         $passwd = $arrayData["MESS_PASSWORD"];
         $fromMail = $arrayData["MESS_FROM_MAIL"];
         $passwdHide = $arrayData["MESS_PASSWORD"];
         if (trim($passwdHide) != "") {
             $passwd = $passwdHide;
             $passwdHide = "";
         }
         $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);
             }
         }
         $arrayData["MESS_PASSWORD"] = $passwd;
         $port = (int) $arrayData["MESS_PORT"];
         $auth_required = (int) $arrayData["MESS_RAUTH"];
         $useSecureCon = $arrayData["SMTPSECURE"];
         $sendTestMail = (int) $arrayData["MESS_TRY_SEND_INMEDIATLY"];
         $mailTo = $arrayData["MAIL_TO"];
         $smtpSecure = $arrayData["SMTPSECURE"];
         $serverNet = new \NET($server);
         $smtp = new \SMTP();
         $timeout = 10;
         $hostinfo = array();
         $srv = $arrayData["MESS_SERVER"];
         $arrayResult = array();
         switch ($step) {
             case 1:
                 $arrayResult["result"] = $serverNet->getErrno() == 0;
                 $arrayResult["message"] = $serverNet->error;
                 break;
             case 2:
                 $serverNet->scannPort($port);
                 $arrayResult["result"] = $serverNet->getErrno() == 0;
                 $arrayResult["message"] = $serverNet->error;
                 break;
             case 3:
                 //Try to connect to host
                 if (preg_match("/^(.+):([0-9]+)\$/", $srv, $hostinfo)) {
                     $server = $hostinfo[1];
                     $port = $hostinfo[2];
                 } else {
                     $host = $srv;
                 }
                 $tls = strtoupper($smtpSecure) == "tls";
                 $ssl = strtoupper($smtpSecure) == "ssl";
                 $arrayResult["result"] = $smtp->Connect(($ssl ? "ssl://" : "") . $server, $port, $timeout);
                 $arrayResult["message"] = $serverNet->error;
                 break;
             case 4:
                 //Try login to host
                 if ($auth_required == 1) {
                     try {
                         if (preg_match("/^(.+):([0-9]+)\$/", $srv, $hostinfo)) {
                             $server = $hostinfo[1];
                             $port = $hostinfo[2];
                         } else {
                             $server = $srv;
                         }
                         if (strtoupper($useSecureCon) == "TLS") {
                             $tls = "tls";
                         }
                         if (strtoupper($useSecureCon) == "SSL") {
                             $tls = "ssl";
                         }
                         $tls = strtoupper($useSecureCon) == "tls";
                         $ssl = strtoupper($useSecureCon) == "ssl";
                         $server = $arrayData["MESS_SERVER"];
                         if (strtoupper($useSecureCon) == "SSL") {
                             $resp = $smtp->Connect("ssl://" . $server, $port, $timeout);
                         } else {
                             $resp = $smtp->Connect($server, $port, $timeout);
                         }
                         if ($resp) {
                             $hello = $_SERVER["SERVER_NAME"];
                             $smtp->Hello($hello);
                             if (strtoupper($useSecureCon) == "TLS") {
                                 $smtp->Hello($hello);
                             }
                             if ($smtp->Authenticate($user, $passwd)) {
                                 $arrayResult["result"] = true;
                             } else {
                                 if (strtoupper($useSecureCon) == "TLS") {
                                     $arrayResult["result"] = true;
                                 } else {
                                     $arrayResult["result"] = false;
                                     $smtpError = $smtp->getError();
                                     $arrayResult["message"] = $smtpError["error"];
                                 }
                             }
                         } else {
                             $arrayResult["result"] = false;
                             $smtpError = $smtp->getError();
                             $arrayResult["message"] = $smtpError["error"];
                         }
                     } catch (Exception $e) {
                         $arrayResult["result"] = false;
                         $arrayResult["message"] = $e->getMessage();
                     }
                 } else {
                     $arrayResult["result"] = true;
                     $arrayResult["message"] = "No authentication required!";
                 }
                 break;
             case 5:
                 if ($sendTestMail == 1) {
                     try {
                         $arrayDataPhpMailer = array();
                         $eregMail = "/^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*@[0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\\.[0-9a-zA-Z]{2,3}\$/";
                         $arrayDataPhpMailer["FROM_EMAIL"] = $fromMail != "" && preg_match($eregMail, $fromMail) ? $fromMail : "";
                         $arrayDataPhpMailer["FROM_NAME"] = $arrayData["MESS_FROM_NAME"] != "" ? $arrayData["MESS_FROM_NAME"] : \G::LoadTranslation("ID_MESS_TEST_BODY");
                         $arrayDataPhpMailer["MESS_ENGINE"] = "PHPMAILER";
                         $arrayDataPhpMailer["MESS_SERVER"] = $server;
                         $arrayDataPhpMailer["MESS_PORT"] = $port;
                         $arrayDataPhpMailer["MESS_ACCOUNT"] = $user;
                         $arrayDataPhpMailer["MESS_PASSWORD"] = $passwd;
                         $arrayDataPhpMailer["TO"] = $mailTo;
                         if ($auth_required == 1) {
                             $arrayDataPhpMailer["MESS_RAUTH"] = true;
                         } else {
                             $arrayDataPhpMailer["MESS_RAUTH"] = false;
                         }
                         if (strtolower($arrayData["SMTPSECURE"]) != "no") {
                             $arrayDataPhpMailer["SMTPSecure"] = $arrayData["SMTPSECURE"];
                         }
                         $arrayTestMailResult = $this->sendTestMail($arrayDataPhpMailer);
                         if ($arrayTestMailResult["status"] . "" == "1") {
                             $arrayResult["result"] = true;
                         } else {
                             $arrayResult["result"] = false;
                             $smtpError = $smtp->getError();
                             $arrayResult["message"] = $smtpError["error"];
                         }
                     } catch (Exception $e) {
                         $arrayResult["result"] = false;
                         $arrayResult["message"] = $e->getMessage();
                     }
                 } else {
                     $arrayResult["result"] = true;
                     $arrayResult["message"] = "Jump this step";
                 }
                 break;
         }
         if (!isset($arrayResult["message"])) {
             $arrayResult["message"] = "";
         }
         //Return
         return $arrayResult;
     } catch (\Exception $e) {
         $arrayResult = array();
         $arrayResult["result"] = false;
         $arrayResult["message"] = $e->getMessage();
         //Return
         return $arrayResult;
     }
 }
예제 #9
0
파일: sendmail.php 프로젝트: nopuls/dzcp
 function smtp_send($header, $body)
 {
     $smtp = new SMTP();
     $smtp->do_debug = $this->SMTPDebug;
     $hosts = explode(";", $this->Host);
     $index = 0;
     $connection = false;
     $smtp_from = "";
     $bad_rcpt = array();
     $e = "";
     while ($index < count($hosts) && $connection == false) {
         if (strstr($hosts[$index], ":")) {
             list($host, $port) = explode(":", $hosts[$index]);
         } else {
             $host = $hosts[$index];
             $port = $this->Port;
         }
         if ($smtp->Connect($host, $port, $this->Timeout)) {
             $connection = true;
         }
         $index++;
     }
     if (!$connection) {
         $this->error_handler("SMTP Error: could not connect to SMTP host server(s)");
         return false;
     }
     $smtp->Hello($this->Helo);
     if ($this->SMTPAuth) {
         if (!$smtp->Authenticate($this->Username, $this->Password)) {
             $this->error_handler("SMTP Error: Could not authenticate");
             return false;
         }
     }
     if ($this->Sender == "") {
         $smtp_from = $this->From;
     } else {
         $smtp_from = $this->Sender;
     }
     if (!$smtp->Mail(sprintf("<%s>", $smtp_from))) {
         $e = sprintf("SMTP Error: From address [%s] failed", $smtp_from);
         $this->error_handler($e);
         return false;
     }
     for ($i = 0; $i < count($this->to); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->to[$i][0]))) {
             $bad_rcpt[] = $this->to[$i][0];
         }
     }
     for ($i = 0; $i < count($this->cc); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->cc[$i][0]))) {
             $bad_rcpt[] = $this->cc[$i][0];
         }
     }
     for ($i = 0; $i < count($this->bcc); $i++) {
         if (!$smtp->Recipient(sprintf("<%s>", $this->bcc[$i][0]))) {
             $bad_rcpt[] = $this->bcc[$i][0];
         }
     }
     if (count($bad_rcpt) > 0) {
         for ($i = 0; $i < count($bad_rcpt); $i++) {
             if ($i != 0) {
                 $e .= ", ";
             }
             $e .= $bad_rcpt[$i];
         }
         $e = sprintf("SMTP Error: The following recipients failed [%s]", $e);
         $this->error_handler($e);
         return false;
     }
     if (!$smtp->Data(sprintf("%s%s", $header, $body))) {
         $this->error_handler("SMTP Error: Data not accepted");
         return false;
     }
     $smtp->Quit();
     return true;
 }