Skip to content
Snippets Groups Projects
process_email_stack.php 3.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    <?php
    
    /******************************************************************************/
    /* begin */
    // load the config and prepare to process
    include('load_process_email_stack.php');
    $state = 'LOAD_EMAILS';
    while ($state <> 'END') {
        if (isset($GLOBALS['logger'])) {
            $GLOBALS['logger']->write('STATE:' . $state, 'INFO');
        }
        switch ($state) {
    		
    	/**********************************************************************/
        /*                          LOAD_NOTIFS 							  */
        /* List the stack to proceed       									  */
        /**********************************************************************/
        case 'LOAD_EMAILS' :
    
    Cyril Vazquez's avatar
    Cyril Vazquez committed
    		$query = "SELECT * FROM " . _NOTIF_EMAIL_STACK_TABLE_NAME
    			. " WHERE exec_date is NULL";
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    		Bt_doQuery($GLOBALS['db'], $query);
    		$totalEmailsToProcess = $GLOBALS['db']->nb_result();
    		$currentEmail = 0;
    		if ($totalEmailsToProcess === 0) {
    			Bt_exitBatch(0, 'No e-mail to process');
            }
    		$GLOBALS['logger']->write($totalEmailsToProcess . ' e-mails to proceed.', 'INFO');
    		$GLOBALS['emails'] = array();
    		while ($emailRecordset = $GLOBALS['db']->fetch_object()) {
    			$GLOBALS['emails'][] = $emailRecordset;
    		}
    		$state = 'SEND_AN_EMAIL';
            break;
    		
    	/**********************************************************************/
        /*                          SEND_AN_EMAIL	 		          	          */
        /* Load parameters and send an e-mail                                    */
        /**********************************************************************/
        case 'SEND_AN_EMAIL' :
    		if($currentEmail < $totalEmailsToProcess) {
    			$email = $GLOBALS['emails'][$currentEmail];
    			$GLOBALS['mailer'] = new htmlMimeMail();
    
    Cyril Vazquez's avatar
    Cyril Vazquez committed
                if($mailerParams->smtp_auth === "true") $smtp_auth = true;
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    			$GLOBALS['mailer']->setSMTPParams(
    
    				$host = (string)$mailerParams->smtp_host, 
    				$port = (string)$mailerParams->smtp_port,
    				$helo = (string)$mailerParams->domains,
    
    Cyril Vazquez's avatar
    Cyril Vazquez committed
    				$auth = $smtp_auth,
    
    				$user = (string)$mailerParams->smtp_user,
    				$pass = (string)$mailerParams->smtp_password
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    				);
    			$GLOBALS['logger']->write("Sending e-mail to : " . $email->recipient, 'INFO');
    			$GLOBALS['mailer']->setFrom($email->sender);
    			$GLOBALS['logger']->write("Subject : " . $email->subject, 'INFO');
    			$GLOBALS['mailer']->setSubject($email->subject);
    			$GLOBALS['mailer']->setHtml($email->html_body);
    			$GLOBALS['mailer']->setTextCharset((string)$email->charset);
    			$GLOBALS['mailer']->setHtmlCharset((string)$email->charset);
    			$GLOBALS['mailer']->setHeadCharset((string)$email->charset);
    			
    			if($email->attachments != '') {
    				$attachments = explode(',', $email->attachments);
    
    				foreach($attachments as $num => $attachment) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    					if(is_file($attachment)) {
    					$ext = strrchr($attachment, '.');
    
                        $name = str_pad(($num + 1), 4, '0', STR_PAD_LEFT) . $ext;
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    					$ctype = '';
    					switch($ext) {
    						case '.pdf':
    							$ctype = 'application/pdf';
    							break;
    					}
    
    					$file_content = $GLOBALS['mailer']->getFile($attachment);
    					$GLOBALS['mailer']->addAttachment($file_content, $name, $ctype); 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    					}
    				}
    			}
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    			$return = $GLOBALS['mailer']->send(array($email->recipient), (string)$mailerParams->type);
    			if($return || $return == 0) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    				$exec_result = 'SENT';
    			} else {
    
    				$GLOBALS['logger']->write("Errors when sending message through SMTP :" . implode(', ', $GLOBALS['mailer']->errors), 'ERROR');
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    				$exec_result = 'FAILED';
    			}	
    
    Cyril Vazquez's avatar
    Cyril Vazquez committed
    			$query = "UPDATE " . _NOTIF_EMAIL_STACK_TABLE_NAME 
    				. " SET exec_date = " . $GLOBALS['db']->current_datetime()
    				. ", exec_result = '".$exec_result."' "
    
    				. " WHERE email_stack_sid = ".$email->email_stack_sid;
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    			Bt_doQuery($GLOBALS['db'], $query);
    			$currentEmail++;
    			$state = 'SEND_AN_EMAIL';
    		} else {
    			$state = 'END';
    		}
            break;
    	}
    }
    
    $GLOBALS['logger']->write('End of process', 'INFO');
    Bt_logInDataBase(
        $totalEmailsToProcess, 0, 'process without error'
    );
    $GLOBALS['db']->disconnect();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    //unlink($GLOBALS['lckFile']);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    exit($GLOBALS['exitCode']);