<?php 
declare(strict_types=1); 
 
use Airship\Engine\State; 
use ParagonIE\GPGMailer\GPGMailer; 
 
/** 
 * Set up our email configuration 
 */ 
 
$email_closure = function() { 
    $state = State::instance(); 
 
    /** 
     * If this is defined elsewhere, respect it. 
     * Otherwise, just use the default (sendmail): 
     */ 
    if (empty($state->mailer)) { 
        if (empty($state->universal['email']['transport'])) { 
            // Sane default 
            $transport = new Zend\Mail\Transport\Sendmail(); 
        } else { 
            switch ($state->universal['email']['transport']) { 
                case 'SMTP': 
                    $transport = new \Zend\Mail\Transport\Smtp(); 
                    $transportConfig = [ 
                        'name' => 
                            $state->universal['email']['smtp']['name'], 
                        'host' => 
                            $state->universal['email']['smtp']['host'], 
                        'connection_class' => 
                            $state->universal['email']['smtp']['connection_class'] 
                    ]; 
 
                    if ($state->universal['email']['smtp']['connection_class'] !== 'smtp') { 
                        $transportConfig['connection_config'] = [ 
                            'username' => 
                                $state->universal['email']['smtp']['username'], 
                            'password' => 
                                $state->universal['email']['smtp']['password'] 
                        ]; 
                    } 
                     
                    if (!empty($state->universal['email']['smtp']['disable_tls'])) { 
                        $transportConfig['connection_config']['port'] = !empty($state->universal['email']['smtp']['port']) 
                            ? $state->universal['email']['smtp']['port'] 
                            : 25; 
                    } else { 
                        $transportConfig['connection_config']['ssl'] = 'tls'; 
                        $transportConfig['port'] = !empty($state->universal['email']['smtp']['port']) 
                            ? $state->universal['email']['smtp']['port'] 
                            : 587; 
                    } 
                    $transport->setOptions( 
                        new \Zend\Mail\Transport\SmtpOptions($transportConfig) 
                    ); 
                    break; 
 
                case 'File': 
                    $transport = new Zend\Mail\Transport\File(); 
                    /** @noinspection PhpUnusedParameterInspection */ 
                    $transport->setOptions( 
                        new \Zend\Mail\Transport\FileOptions([ 
                            'path' => 
                                !empty($state->universal['email']['file']['path']) 
                                    ? $state->universal['email']['file']['path'] 
                                    : ROOT . '/files/email', 
                            'callback' => 
                                function (Zend\Mail\Transport\File $t): string { 
                                    return \implode( 
                                        '_', 
                                        [ 
                                            'Message', 
                                            \date('YmdHis'), 
                                            \Airship\uniqueId(12) . '.txt' 
                                        ] 
                                    ); 
                                } 
                        ]) 
                    ); 
                    break; 
 
                case 'Sendmail': 
                    if (!empty($state->universal['email']['sendmail']['parameters'])) { 
                        $transport = new Zend\Mail\Transport\Sendmail( 
                            $state->universal['email']['sendmail']['parameters'] 
                        ); 
                    } else { 
                        $transport = new Zend\Mail\Transport\Sendmail(); 
                    } 
                    break; 
 
                default: 
                    throw new Exception( 
                        \trk( 
                            'errors.email.invalid_transport', 
                            \print_r($state->universal['email']['transport'], true) 
                        ) 
                    ); 
            } 
        } 
        $state->mailer = $transport; 
    } 
 
    // Now that our mailer is set up, let's make sure GPGMailer is too. 
    $gpgMailer = new GPGMailer( 
        $state->mailer, 
        [ 
            'homedir' => 
                ROOT . '/files' 
        ] 
    ); 
    $state->gpgMailer = $gpgMailer; 
}; 
$email_closure(); 
unset($email_closure);
 
 |