| 
<?phpdeclare(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);
 |