Skip to content
Snippets Groups Projects
process_email_stack.php 5.13 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                                          */
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        /**********************************************************************/
        case 'LOAD_EMAILS' :
    
            $query = "SELECT * FROM " . _NOTIF_EMAIL_STACK_TABLE_NAME
                . " WHERE exec_date is NULL";
    
    Florian Azizian's avatar
    Florian Azizian committed
            $stmt = Bt_doQuery($GLOBALS['db'], $query, array());
            $totalEmailsToProcess = $stmt->rowCount();
    
            $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();
    
    Florian Azizian's avatar
    Florian Azizian committed
            while ($emailRecordset = $stmt->fetchObject()) {
    
                $GLOBALS['emails'][] = $emailRecordset;
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            }
    
            $state = 'SEND_AN_EMAIL';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            break;
    
            
        /**********************************************************************/
        /*                          SEND_AN_EMAIL                                 */
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        /* Load parameters and send an e-mail                                    */
        /**********************************************************************/
        case 'SEND_AN_EMAIL' :
    
            if($currentEmail < $totalEmailsToProcess) {
                $email = $GLOBALS['emails'][$currentEmail];
                $GLOBALS['mailer'] = new htmlMimeMail();
                $GLOBALS['mailer']->setSMTPParams(
                    $host = (string)$mailerParams->smtp_host, 
                    $port = (string)$mailerParams->smtp_port,
                    $helo = (string)$mailerParams->domains,
    
                    $auth = filter_var($mailerParams->smtp_auth, FILTER_VALIDATE_BOOLEAN),
    
                    $user = (string)$mailerParams->smtp_user,
                    $pass = (string)$mailerParams->smtp_password
                    );
                $GLOBALS['logger']->write("Sending e-mail to : " . $email->recipient, 'INFO');
    
                //--> Set the return path
                $GLOBALS['mailer']->setReturnPath($email->sender);
    
                $GLOBALS['mailer']->setFrom($email->sender);
                $GLOBALS['logger']->write("Subject : " . $email->subject, 'INFO');
                $GLOBALS['mailer']->setSubject($email->subject);
    
                $GLOBALS['mailer']->setHtml($email->html_body);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $GLOBALS['mailer']->setHtml(str_replace('#and#', '&', $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) {
                        if(is_file($attachment)) {
                        $ext = strrchr($attachment, '.');
    
                        $name = str_pad(($num + 1), 4, '0', STR_PAD_LEFT) . $ext;
    
                        $ctype = '';
                        switch($ext) {
                            case '.pdf':
                                $ctype = 'application/pdf';
                                break;
                        }
                        $file_content = $GLOBALS['mailer']->getFile($attachment);
                        $GLOBALS['mailer']->addAttachment($file_content, $name, $ctype); 
                        }
                    }
                }
                $return = $GLOBALS['mailer']->send(array($email->recipient), (string)$mailerParams->type);
    
                // if($return == 1) {
                if( ($return == 1 && ((string)$mailerParams->type == "smtp" || (string)$mailerParams->type == "mail" )) || ($return == 0 && (string)$mailerParams->type == "sendmail")) {
    
                    $exec_result = 'SENT';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    //$GLOBALS['logger']->write("Errors when sending message through SMTP :" . implode(', ', $GLOBALS['mailer']->errors), 'ERROR');
    
                    $GLOBALS['logger']->write("Errors when sending message through SMTP :" . $GLOBALS['mailer']->errors[0], 'ERROR', 108);
    
                    $exec_result = 'FAILED';
    
                }   
                $query = "UPDATE " . _NOTIF_EMAIL_STACK_TABLE_NAME 
    
    Florian Azizian's avatar
    Florian Azizian committed
                    . " SET exec_date = CURRENT_TIMESTAMP, exec_result = ? "
                    . " WHERE email_stack_sid = ?";
                Bt_doQuery($GLOBALS['db'], $query, array($exec_result, $email->email_stack_sid));
    
                $currentEmail++;
                $state = 'SEND_AN_EMAIL';
            } else {
                $state = 'END';
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            break;
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    }
    
    $GLOBALS['logger']->write('End of process', 'INFO');
    Bt_logInDataBase(
        $totalEmailsToProcess, 0, 'process without error'
    );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    //unlink($GLOBALS['lckFile']);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    exit($GLOBALS['exitCode']);