| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540 |
- <?php
- // PLUGIN INFORMATION
- $GLOBALS['plugins'][]['PHP Mailer'] = array( // Plugin Name
- 'name' => 'PHP Mailer', // Plugin Name
- 'author' => 'PHP Mailer', // Who wrote the plugin
- 'category' => 'Mail', // One to Two Word Description
- 'link' => 'https://github.com/PHPMailer/PHPMailer', // Link to plugin info
- 'license' => 'personal,business', // License Type use , for multiple
- 'idPrefix' => 'PHPMAILER', // html element id prefix
- 'configPrefix' => 'PHPMAILER', // config file prefix for array items without the hyphen
- 'version' => '1.0.0', // SemVer of plugin
- 'image' => 'api/plugins/php-mailer/logo.png', // 1:1 non transparent image for plugin
- 'settings' => true, // does plugin need a settings modal?
- 'bind' => true, // use default bind to make settings page - true or false
- 'api' => 'api/v2/plugins/php-mailer/settings', // api route for settings page
- 'homepage' => false // Is plugin for use on homepage? true or false
- );
- class PhpMailer extends Organizr
- {
- public function _phpMailerPluginGetEmails()
- {
- $type = null;
- if ($this->config['authBackend']) {
- if ($this->config['authBackend'] == 'plex') {
- $type = 'plex';
- }
- }
- if ($type == 'plex') {
- $emails = array_merge($this->userList('plex')['both'], $this->_phpMailerPluginGetOrgUsers());
- } elseif ($type == 'emby') {
- $emails = $this->_phpMailerPluginGetOrgUsers();
- } else {
- $emails = $this->_phpMailerPluginGetOrgUsers();
- }
- return $emails;
- }
-
- public function _phpMailerPluginGetOrgUsers()
- {
- $return = null;
- $result = $this->getAllUsers(true);
- if (is_array($result) || is_object($result)) {
- foreach ($result['users'] as $k => $v) {
- $return[$v['username']] = $v['email'];
- }
- return ($return) ?? false;
- }
- }
-
- public function _phpMailerPluginGetTemplates()
- {
- foreach (glob(dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'php-mailer' . DIRECTORY_SEPARATOR . 'misc' . DIRECTORY_SEPARATOR . 'emailTemplates' . DIRECTORY_SEPARATOR . "*.php") as $filename) {
- $templates[] = array(
- 'name' => preg_replace('/\\.[^.\\s]{3,4}$/', '', basename($filename)),
- 'value' => preg_replace('/\\.[^.\\s]{3,4}$/', '', basename($filename))
- );
- }
- return $templates;
- }
-
- public function _phpMailerPluginEmailTemplate($emailTemplate)
- {
- $variables = [
- '{user}' => $emailTemplate['user'],
- '{domain}' => $this->getServerPath(true),
- '{password}' => $emailTemplate['password'],
- '{inviteCode}' => $emailTemplate['inviteCode'],
- '{fullDomain}' => $this->getServerPath(true),
- '{title}' => $this->config['title'],
- ];
- $emailTemplate['body'] = strtr($emailTemplate['body'], $variables);
- $emailTemplate['subject'] = strtr($emailTemplate['subject'], $variables);
- return $emailTemplate;
- }
-
- public function _phpMailerPluginBuildEmail($email)
- {
- /** @noinspection PhpUnusedLocalVariableInspection */
- $subject = (isset($email['subject'])) ? $email['subject'] : 'Message from Server';
- $body = (isset($email['body'])) ? $email['body'] : 'Message Error Occurred';
- $type = (isset($email['type'])) ? $email['type'] : 'No Type';
- switch ($type) {
- case 'invite':
- $extra = 'invite';
- break;
- case 'reset':
- $extra = 'reset';
- break;
- default:
- $extra = null;
- break;
- }
- include('misc/emailTemplates/' . $this->config['PHPMAILER-template'] . '.php');
- return $email;
- }
-
- public function _phpMailerPluginAdminSendEmail($array)
- {
- if ($this->config['PHPMAILER-enabled']) {
- $emailTemplate = array(
- 'type' => 'admin',
- 'body' => $array['body'],
- 'subject' => $array['subject'],
- 'user' => null,
- 'password' => null,
- 'inviteCode' => null,
- );
- $emailTemplate = $this->_phpMailerPluginEmailTemplate($emailTemplate);
- $sendEmail = array(
- 'bcc' => $array['bcc'],
- 'subject' => $emailTemplate['subject'],
- 'body' => $this->_phpMailerPluginBuildEmail($emailTemplate),
- );
- $response = $this->_phpMailerPluginSendEmail($sendEmail);
- if ($response == true) {
- $msg = ($this->config['PHPMAILER-debugTesting']) ? $this->config['phpmOriginalDebug'] : 'Email sent';
- $this->setAPIResponse('success', $msg, 200);
- } else {
- $this->setAPIResponse('error', $response, 409);
- return false;
- }
- return true;
- } else {
- $this->setAPIResponse('error', 'PHP-Mailer is not enabled', 409);
- return false;
- }
- return false;
- }
-
- public function _phpMailerPluginGetDebug($str, $level)
- {
- $this->config['phpmOriginalDebug'] = $this->config['phpmOriginalDebug'] . $str;
- return $this->config['phpmOriginalDebug'];
- }
-
- public function _phpMailerPluginSendTestEmail()
- {
- $emailTemplate = array(
- 'type' => 'test',
- 'body' => 'This is just a test email.',
- 'subject' => 'Test E-Mail',
- 'user' => null,
- 'password' => null,
- 'inviteCode' => null,
- );
- $emailTemplate = $this->_phpMailerPluginEmailTemplate($emailTemplate);
- $this->config['phpmOriginalDebug'] = '|||DEBUG|||';
- try {
- $mail = new PHPMailer\PHPMailer\PHPMailer(true);
- $mail->SMTPDebug = 2;
- $mail->isSMTP();
- $mail->Debugoutput = function ($str, $level) {
- $this->_phpMailerPluginGetDebug($str, $level);
- };
- $mail->Host = $this->config['PHPMAILER-smtpHost'];
- $mail->Port = $this->config['PHPMAILER-smtpHostPort'];
- if ($this->config['PHPMAILER-smtpHostType'] !== 'n/a') {
- $mail->SMTPSecure = $this->config['PHPMAILER-smtpHostType'];
- }
- $mail->SMTPAuth = $this->config['PHPMAILER-smtpHostAuth'];
- $mail->Username = $this->config['PHPMAILER-smtpHostUsername'];
- $mail->Password = $this->decrypt($this->config['PHPMAILER-smtpHostPassword']);
- $mail->SMTPOptions = array(
- 'ssl' => [
- 'verify_peer' => $this->config['PHPMAILER-verifyCert'],
- 'verify_depth' => 3,
- 'allow_self_signed' => true,
- 'peer_name' => $this->config['PHPMAILER-smtpHost'],
- 'cafile' => $this->getCert(),
- ],
- );
- $mail->setFrom($this->config['PHPMAILER-smtpHostSenderEmail'], $this->config['PHPMAILER-smtpHostSenderName']);
- $mail->addReplyTo($this->config['PHPMAILER-smtpHostSenderEmail'], $this->config['PHPMAILER-smtpHostSenderName']);
- $mail->isHTML(true);
- $mail->addAddress($this->user['email'], $this->user['username']);
- $mail->Subject = $emailTemplate['subject'];
- $mail->Body = $this->_phpMailerPluginBuildEmail($emailTemplate);
- $mail->send();
- $this->writeLog('success', 'Mail Function - E-Mail Test Sent', $this->user['username']);
- $msg = ($this->config['PHPMAILER-debugTesting']) ? $this->config['phpmOriginalDebug'] : 'Email sent';
- $this->setAPIResponse('success', $msg, 200);
- return true;
- } catch (PHPMailer\PHPMailer\Exception $e) {
- $this->writeLog('error', 'Mail Function - E-Mail Test Failed[' . $mail->ErrorInfo . ']', $this->user['username']);
- $this->setAPIResponse('error', $e->getMessage(), 500);
- return false;
- }
- return false;
- }
-
- public function _phpMailerPluginSendEmail($emailInfo)
- {
- $to = isset($emailInfo['to']) ? $emailInfo['to'] : null;
- $cc = isset($emailInfo['cc']) ? $emailInfo['cc'] : null;
- $bcc = isset($emailInfo['bcc']) ? $emailInfo['bcc'] : null;
- $subject = isset($emailInfo['subject']) ? $emailInfo['subject'] : null;
- $body = isset($emailInfo['body']) ? $emailInfo['body'] : null;
- $username = isset($emailInfo['user']) ? $emailInfo['user'] : 'Organizr User';
- try {
- $mail = new PHPMailer\PHPMailer\PHPMailer(true);
- $mail->isSMTP();
- //$mail->SMTPDebug = 3;
- $mail->Host = $this->config['PHPMAILER-smtpHost'];
- $mail->Port = $this->config['PHPMAILER-smtpHostPort'];
- if ($this->config['PHPMAILER-smtpHostType'] !== 'n/a') {
- $mail->SMTPSecure = $this->config['PHPMAILER-smtpHostType'];
- }
- $mail->SMTPAuth = $this->config['PHPMAILER-smtpHostAuth'];
- $mail->Username = $this->config['PHPMAILER-smtpHostUsername'];
- $mail->Password = $this->decrypt($this->config['PHPMAILER-smtpHostPassword']);
- $mail->SMTPOptions = array(
- 'ssl' => [
- 'verify_peer' => $this->config['PHPMAILER-verifyCert'],
- 'verify_depth' => 3,
- 'allow_self_signed' => true,
- 'peer_name' => $this->config['PHPMAILER-smtpHost'],
- 'cafile' => $this->getCert(),
- ],
- );
- $mail->setFrom($this->config['PHPMAILER-smtpHostSenderEmail'], $this->config['PHPMAILER-smtpHostSenderName']);
- $mail->addReplyTo($this->config['PHPMAILER-smtpHostSenderEmail'], $this->config['PHPMAILER-smtpHostSenderName']);
- $mail->isHTML(true);
- if ($to) {
- $mail->addAddress($to, $username);
- }
- if ($cc) {
- $mail->addCC($cc);
- }
- if ($bcc) {
- if (strpos($bcc, ',') === false) {
- $mail->addBCC($bcc);
- } else {
- $allEmails = explode(",", $bcc);
- foreach ($allEmails as $gotEmail) {
- $mail->addBCC($gotEmail);
- }
- }
- }
- $mail->Subject = $subject;
- $mail->Body = $body;
- $mail->send();
- return true;
- } catch (PHPMailer\PHPMailer\Exception $e) {
- $this->writeLog('error', 'Mail Function - E-Mail Test Failed[' . $mail->ErrorInfo . ']', $this->user['username']);
- return $e->errorMessage();
- }
- }
-
- /* GET PHPMAILER SETTINGS */
- public function _phpMailerPluginGetSettings()
- {
- return array(
- 'Host' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-smtpHost',
- 'label' => 'SMTP Host',
- 'value' => $this->config['PHPMAILER-smtpHost']
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-smtpHostPort',
- 'label' => 'SMTP Port',
- 'value' => $this->config['PHPMAILER-smtpHostPort']
- )
- ),
- 'Authentication' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-smtpHostUsername',
- 'label' => 'Username',
- 'value' => $this->config['PHPMAILER-smtpHostUsername']
- ),
- array(
- 'type' => 'password',
- 'name' => 'PHPMAILER-smtpHostPassword',
- 'label' => 'Password',
- 'value' => $this->config['PHPMAILER-smtpHostPassword']
- ),
- array(
- 'type' => 'switch',
- 'name' => 'PHPMAILER-smtpHostAuth',
- 'label' => 'Authentication',
- 'value' => $this->config['PHPMAILER-smtpHostAuth']
- ),
- array(
- 'type' => 'select',
- 'name' => 'PHPMAILER-smtpHostType',
- 'label' => 'Authentication Type',
- 'value' => $this->config['PHPMAILER-smtpHostType'],
- 'options' => array(
- array(
- 'name' => 'tls',
- 'value' => 'tls'
- ),
- array(
- 'name' => 'ssl',
- 'value' => 'ssl'
- ),
- array(
- 'name' => 'off',
- 'value' => 'n/a'
- )
- )
- ),
- array(
- 'type' => 'switch',
- 'name' => 'PHPMAILER-verifyCert',
- 'label' => 'Verify Certificate',
- 'value' => $this->config['PHPMAILER-verifyCert']
- ),
- ),
- 'Sender Information' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-smtpHostSenderName',
- 'label' => 'Sender Name',
- 'value' => $this->config['PHPMAILER-smtpHostSenderName']
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-smtpHostSenderEmail',
- 'label' => 'Sender Email',
- 'value' => $this->config['PHPMAILER-smtpHostSenderEmail'],
- 'placeholder' => 'i.e. same as username'
- )
- ),
- 'Test & Options' => array(
- array(
- 'type' => 'button',
- 'label' => 'Send Test',
- 'class' => 'phpmSendTestEmail',
- 'icon' => 'fa fa-paper-plane',
- 'text' => 'Send'
- ),
- array(
- 'type' => 'switch',
- 'name' => 'PHPMAILER-debugTesting',
- 'label' => 'Enable Debug Output on Email Test',
- 'value' => $this->config['PHPMAILER-debugTesting'],
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-domain',
- 'label' => 'Domain Link Override',
- 'value' => $this->config['PHPMAILER-domain'],
- 'placeholder' => 'https://domain.com/',
- ),
- array(
- 'type' => 'select',
- 'name' => 'PHPMAILER-template',
- 'label' => 'Theme',
- 'value' => $this->config['PHPMAILER-template'],
- 'options' => $this->_phpMailerPluginGetTemplates()
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-logo',
- 'label' => 'WAN Logo URL',
- 'value' => $this->config['PHPMAILER-logo'],
- 'placeholder' => 'Full URL',
- ),
- array(
- 'type' => 'switch',
- 'name' => 'PHPMAILER-emailTemplateRegisterUserEnabled',
- 'label' => 'Send Welcome E-Mail',
- 'value' => $this->config['PHPMAILER-emailTemplateRegisterUserEnabled'],
- ),
- ),
- 'Templates' => array(
- array(
- 'type' => 'accordion',
- 'label' => 'Edit Template',
- 'id' => 'customEmailTemplates',
- 'override' => 12,
- 'options' => array(
- array(
- 'id' => 'PHPMAILER-emailTemplateRegisterUserForm',
- 'header' => 'New Registration',
- 'body' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateRegisterUserSubject',
- 'smallLabel' => 'Subject',
- 'value' => $this->config['PHPMAILER-emailTemplateRegisterUserSubject'],
- ),
- array(
- 'type' => 'textbox',
- 'name' => 'PHPMAILER-emailTemplateRegisterUser',
- 'smallLabel' => 'Body',
- 'value' => $this->config['PHPMAILER-emailTemplateRegisterUser'],
- 'attr' => 'rows="10"',
- )
- )
- ),
- array(
- 'id' => 'PHPMAILER-emailTemplateResetPasswordForm',
- 'header' => 'Reset Password',
- 'body' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateResetSubject',
- 'smallLabel' => 'Subject',
- 'value' => $this->config['PHPMAILER-emailTemplateResetSubject'],
- ),
- array(
- 'type' => 'textbox',
- 'name' => 'PHPMAILER-emailTemplateReset',
- 'smallLabel' => 'Body',
- 'value' => $this->config['PHPMAILER-emailTemplateReset'],
- 'attr' => 'rows="10"',
- )
- )
- ),
- array(
- 'id' => 'PHPMAILER-emailTemplateInviteUserForm',
- 'header' => 'Invite User',
- 'body' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateInviteUserSubject',
- 'smallLabel' => 'Subject',
- 'value' => $this->config['PHPMAILER-emailTemplateInviteUserSubject'],
- ),
- array(
- 'type' => 'textbox',
- 'name' => 'PHPMAILER-emailTemplateInviteUser',
- 'smallLabel' => 'Body',
- 'value' => $this->config['PHPMAILER-emailTemplateInviteUser'],
- 'attr' => 'rows="10"',
- )
- )
- ),
- array(
- 'id' => 'PHPMAILER-emailTemplateCustom-include-OneForm',
- 'header' => $this->config['PHPMAILER-emailTemplateCustom-include-OneName'],
- 'body' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-OneName',
- 'smallLabel' => 'Name',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-OneName'],
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-OneSubject',
- 'smallLabel' => 'Subject',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-OneSubject'],
- ),
- array(
- 'type' => 'textbox',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-One',
- 'smallLabel' => 'Body',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-One'],
- 'attr' => 'rows="10"',
- )
- )
- ),
- array(
- 'id' => 'PHPMAILER-emailTemplateCustom-include-TwoForm',
- 'header' => $this->config['PHPMAILER-emailTemplateCustom-include-TwoName'],
- 'body' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-TwoName',
- 'smallLabel' => 'Name',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-TwoName'],
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-TwoSubject',
- 'smallLabel' => 'Subject',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-TwoSubject'],
- ),
- array(
- 'type' => 'textbox',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-Two',
- 'smallLabel' => 'Body',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-Two'],
- 'attr' => 'rows="10"',
- )
- )
- ),
- array(
- 'id' => 'PHPMAILER-emailTemplateCustom-include-ThreeForm',
- 'header' => $this->config['PHPMAILER-emailTemplateCustom-include-ThreeName'],
- 'body' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-ThreeName',
- 'smallLabel' => 'Name',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-ThreeName'],
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-ThreeSubject',
- 'smallLabel' => 'Subject',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-ThreeSubject'],
- ),
- array(
- 'type' => 'textbox',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-Three',
- 'smallLabel' => 'Body',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-Three'],
- 'attr' => 'rows="10"',
- )
- )
- ),
- array(
- 'id' => 'PHPMAILER-emailTemplateCustom-include-FourForm',
- 'header' => $this->config['PHPMAILER-emailTemplateCustom-include-FourName'],
- 'body' => array(
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-FourName',
- 'smallLabel' => 'Name',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-FourName'],
- ),
- array(
- 'type' => 'input',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-FourSubject',
- 'smallLabel' => 'Subject',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-FourSubject'],
- ),
- array(
- 'type' => 'textbox',
- 'name' => 'PHPMAILER-emailTemplateCustom-include-Four',
- 'smallLabel' => 'Body',
- 'value' => $this->config['PHPMAILER-emailTemplateCustom-include-Four'],
- 'attr' => 'rows="10"',
- )
- )
- ),
- )
- )
- )
- );
- }
- }
|