<?php
// import PHPMailer
set_include_path (__DIR__);
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer.php';
require 'SMTP.php';
require 'Exception.php';

// global var for debug logging
$debugOutput = '';

function sendEmail($timeout, $hostname, $usePort, $useEncryption, $username, $password, $recipient, $replyTo, $body, $subject) {
    try {
        // instantiate PHPMailer instance (true = enable exceptions)
        $result = [];
        $mail = new PHPMailer(true);

        // server settings
        $mail->SMTPDebug = SMTP::DEBUG_SERVER; // enable verbose output
        $mail->Debugoutput = function($str){
            $GLOBALS['debugOutput'] .= "$str<br>";
        };
        $mail->Timeout = $timeout;
        $mail->isSMTP();
        $mail->Host = $hostname;
        $mail->SMTPAuth = true;
        $mail->Username = $username;
        $mail->Password = $password;
        // encryption setting
        if ($useEncryption === 'ssl'){
            $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
        } elseif ($useEncryption === 'starttls'){
            $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        }
        $mail->Port = $usePort;

        // recipients
        $mail->setFrom($replyTo);
        $mail->addAddress($recipient);
        $mail->addReplyTo($replyTo);

        // content
        $mail->Subject = $subject;
        //$mail->msgHTML($body);
        //$mail->isHtml(true);
        $mail->isHtml(false);
        $mail->Body = $body;

        // send message
        if (!$mail->send()) {
            $result = [
                'result' => false,
                'message' => $mail->ErrorInfo,
                'debug' => $GLOBALS['debugOutput']
            ];
        } else {
            $result = [
                'result' => true,
                'debug' => $GLOBALS['debugOutput']
            ];
        }
    } catch (Exception $e) {
        $result = [
            'result' => false,
            'errorMessage' => $e->getMessage(),
            'debug' => $GLOBALS['debugOutput']
        ];
    } finally {
        return $result;
    }
}
?>