]> git.mxchange.org Git - friendica-addons.git/blobdiff - phpmailer/phpmailer.php
Dateien nach "invidious/lang/C" hochladen
[friendica-addons.git] / phpmailer / phpmailer.php
index 89cbfb65f7bf86a621aa634b2835d73d3de01510..4c12709d0eaaf7c92d8648ec09215b3ee4ac0485 100644 (file)
 <?php
-
-ini_set('display_errors', 1);
-ini_set('display_startup_errors', 1);
-error_reporting(E_ALL);
-
 /**
  * Name: PHP Mailer SMTP
  * Description: Connects to a SMTP server based on the config
- * Version: 0.1
- * Author: Marcus Mueller <http://mat.exon.name>
+ * Version: 0.2
+ * Author: Marcus Mueller
+ * Maintainer: Hypolite Petovan <hypolite@friendica.mrpetovan.com>
  */
 
 use Friendica\App;
-use Friendica\Core\Addon;
+use Friendica\Core\Hook;
+use Friendica\DI;
+use Friendica\Object\EMail\IEmail;
+use Friendica\Core\Config\Util\ConfigFileManager;
 use PHPMailer\PHPMailer\PHPMailer;
 use PHPMailer\PHPMailer\Exception;
 
-function phpmailer_install()
-{
-       Addon::registerHook(
-               'emailer_send_prepare',
-               'addon/phpmailer/phpmailer.php',
-               'phpmailer_emailer_send_prepare'
-       );
-}
+require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
 
-function phpmailer_uninstall()
+function phpmailer_install()
 {
-       Addon::unregisterHook(
-               'emailer_send_prepare',
-               'addon/phpmailer/phpmailer.php',
-               'phpmailer_emailer_send_prepare'
-       );
+       Hook::register('load_config'         , __FILE__, 'phpmailer_load_config');
+       Hook::register('emailer_send_prepare', __FILE__, 'phpmailer_emailer_send_prepare', 5);
 }
 
-function phpmailer_module()
+function phpmailer_load_config(ConfigFileManager $loader)
 {
+       DI::app()->getConfigCache()->load($loader->loadAddonConfig('phpmailer'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC);
 }
 
 /**
- * @param App $a
- * @param array $b
+ * @param IEmail $email
  */
-function phpmailer_emailer_send_prepare(App $a, array &$b)
+function phpmailer_emailer_send_prepare(IEmail &$email)
 {
-       require_once __DIR__ . '/phpmailer/src/PHPMailer.php';
-       require_once __DIR__ . '/phpmailer/src/SMTP.php';
-       require_once __DIR__ . '/phpmailer/src/Exception.php';
-
        // Passing `true` enables exceptions
-       $mail = new PHPMailer(true);
+       $mailer = new PHPMailer(true);
        try {
-               if (!empty($a->config['system']['smtp']) && (bool)$a->config['system']['smtp'] === true) {
+               // Setup encoding.
+               $mailer->CharSet  = 'UTF-8';
+               $mailer->Encoding = 'base64';
+
+               if (DI::config()->get('phpmailer', 'smtp')) {
                        // Set mailer to use SMTP
-                       $mail->isSMTP();
-                       /*
-                       // Enable verbose debug output
-                       $mail->SMTPDebug = 2;
-                       */
+                       $mailer->isSMTP();
+
                        // Specify main and backup SMTP servers
-                       $mail->Host = $a->config['system']['smtp_server'];
-                       $mail->Port = $a->config['system']['smtp_port'];
+                       $mailer->Host = DI::config()->get('phpmailer', 'smtp_server');
+                       $mailer->Port = DI::config()->get('phpmailer', 'smtp_port');
 
-                       /*
-                       if (!empty($a->config['system']['smtp_secure']) && (bool)$a->config['system']['smtp_secure'] !== '') {
-                               $mail->SMTPSecure = $a->config['system']['smtp_secure'];
-                               $mail->Port = $a->config['system']['smtp_port_s'];
+                       if (DI::config()->get('system', 'smtp_secure') && DI::config()->get('phpmailer', 'smtp_port_s')) {
+                               $mailer->SMTPSecure = DI::config()->get('phpmailer', 'smtp_secure');
+                               $mailer->Port       = DI::config()->get('phpmailer', 'smtp_port_s');
                        }
-                       */
 
-                       if (!empty($a->config['system']['smtp_username']) && !empty($a->config['system']['smtp_password'])) {
-                               $mail->SMTPAuth = true;
-                               $mail->Username = $a->config['system']['smtp_username'];
-                               $mail->Password = $a->config['system']['smtp_password'];
+                       if (DI::config()->get('phpmailer', 'smtp_username') && DI::config()->get('phpmailer', 'smtp_password')) {
+                               $mailer->SMTPAuth = true;
+                               $mailer->Username = DI::config()->get('phpmailer', 'smtp_username');
+                               $mailer->Password = DI::config()->get('phpmailer', 'smtp_password');
                        }
 
-                       if (!empty($a->config['system']['smtp_from']) && !empty($a->config['system']['smtp_domain'])) {
-                               $mail->setFrom($a->config['system']['smtp_from'], $a->config['sitename']);
+                       if (DI::config()->get('phpmailer', 'smtp_from')) {
+                               $mailer->setFrom(DI::config()->get('phpmailer', 'smtp_from'), $email->getFromName());
                        }
+               } else {
+                       $mailer->setFrom($email->getFromAddress(), $email->getFromName());
                }
 
                // subject
-               $mail->Subject = $b['messageSubject'];
+               $mailer->Subject = $email->getSubject();
 
-               // add text
-               $mail->AltBody = $b['textVersion'];
+               if (!empty($email->getToAddress())) {
+                       $mailer->addAddress($email->getToAddress());
+               }
 
                // html version
-               if (!empty($b['htmlVersion'])) {
-                       $mail->isHTML(true);
-                       $mail->Body = $b['htmlVersion'];
+               if (!empty($email->getMessage())) {
+                       $mailer->isHTML(true);
+                       $mailer->Body    = $email->getMessage();
+                       $mailer->AltBody = $email->getMessage(true);
+               } else {
+                       // add text
+                       $mailer->Body = $email->getMessage(true);
+               }
+
+               if (!empty($email->getReplyTo())) {
+                       $mailer->addReplyTo($email->getReplyTo(), $email->getFromName());
                }
 
-               /*
                // additional headers
-               if (!empty($b['additionalMailHeader'])) {
-                       $mail->addCustomHeader($b['additionalMailHeader']);
+               if (!empty($email->getAdditionalMailHeader())) {
+                       foreach ($email->getAdditionalMailHeader() as $name => $values) {
+                               // Set the "Message-ID" header for PHP-Mailer directly
+                               if (strtolower($name) === 'message-id') {
+                                       // implode all values to one entry, because there's only one value possible
+                                       $mailer->MessageID = trim(implode("", $values));
+                               } else {
+                                       $mailer->addCustomHeader(trim($name), trim(implode("\n", $values)));
+                               }
+                       }
                }
-               */
 
-               $mail->send();
+               if ($mailer->send()) {
+                       $email = null;
+               }
        } catch (Exception $e) {
-               echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
-               die();
+               DI::logger()->error('PHPMailer error', ['email' => $email, 'ErrorInfo' => $mailer->ErrorInfo, 'exception' => $e]);
        }
 }