'ct_auto_mail_hooks']; public function __construct( ILogger $logger, Config $config, IUserManager $userManager) { $this->logger = $logger; $this->config = $config; $this->userManager = $userManager; } public function register() { $this->userManager->listen( '\OC\User', 'postCreateUser',$this->createUserCB()); $this->userManager->listen( '\OC\User', 'preDelete', $this->deleteUserCB()); $this->userManager->listen( '\OC\User', 'postSetPassword', $this->updateEmailPasswordCB()); } private function createUserCB() { return function (\OC\User\User $user, string $password) { $newuser = array( 'email' => $user->getUID() . $this->config->getEmailAddressSuffix(), 'displayed_name' => $user->getDisplayName(), 'raw_password' => $password, 'quota_bytes' => $this->config->getEmailQuotaMB() * 1024 * 1024, 'enabled' => true, 'enable_imap' => true, 'spam_enable' => true, 'spam_mark_as_read' => true, 'spam_threshold' => 80 ); if($this->createEmailAccount($newuser)) { $this->logger->warning( "Automatically created mail account for uid " . $uid . " with e-mail address \"" . $newuser["email"] . " e-mail address suffix was \"". $email_suffix . "\"." , $this->logContext); } else { $this->logger->error( "Error creating mail account OR mail folders for uid " . $uid); } }; } private function deleteUserCB() { return function (\OC\User\User $user) { $email = $user->getUID() . $this->config->getEmailAddressSuffix(); if($this->deleteEmailAccount($email)) { $this->logger->warning("Deleted mail account: " . $email, $this->logContext); } else { $this->logger->error("Error deleting mail account" . $email); } }; } private function updateEmailPasswordCB() { return function (\OC\User\User $user, string $password) { $email = $user->getUID() . $this->config->getEmailAddressSuffix(); if($this->updateEmailPassword($email, $password)) { $this->logger->warning("Updated glesys password for account: " . $email, $this->logContext); } else { $this->logger->error("Error updating mail password for account" . $email); } }; } private function createImapFolders($user_data) { // $server = 'mail.glesys.se'; // $email = $user_data['email']; // $passw = $user_data['password']; // $folders = array('Sent', 'Drafts', 'Trash', 'Junk', 'Archive'); // $mbox = \imap_open("{" . $server . "}", $email, $passw, OP_HALFOPEN); // if(!$mbox){ // $message = "can't connect: " . \imap_last_error(); // $this->logger->error($message); // return false; // } // foreach ($folders as $folder) { // if (! @\imap_createmailbox( // $mbox, // \imap_utf7_encode("{".$server."}INBOX.".$folder))) { // $message = 'Error creating ' . $folder . ' folder: ' . // \imap_last_error(); // $this->logger->error($message); // } // } // \imap_close($mbox); // return true; } private function createEmailAccount($user_data) { // $keys = $this->config->getGlesysKeys(); // $fields = array( // 'emailaccount' => $user_data['email'], // 'password' => $user_data['password'], // 'quota' => $user_data['quota'] // ); // $query = http_build_query($fields); // $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL, // 'https://api.glesys.com/email/createaccount/'); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_POST, 1); // curl_setopt($ch, CURLOPT_USERPWD, $keys); // curl_setopt($ch, CURLOPT_POSTFIELDS, $query); // $result = curl_exec($ch); // if (curl_errno($ch)) { // $message = 'Error:' . curl_error($ch); // $this->logger->error($message); // return false; // } // curl_close($ch); // $xml = simplexml_load_string($result); // $code = $xml->status->code; // if ($code == 200) return $this->createImapFolders($user_data); // else $this->logger->warning( // "Error: non-200 status: " . $xml->status->text); // return false; } private function deleteEmailAccount($user_data) { // $ch = curl_init(); // $keys = $this->config->getGlesysKeys(); // curl_setopt($ch, CURLOPT_URL, 'https://api.glesys.com/email/delete/'); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_POSTFIELDS, "email=" . $user_data["email"]); // curl_setopt($ch, CURLOPT_POST, 1); // curl_setopt($ch, CURLOPT_USERPWD, $keys); // $result = curl_exec($ch); // if (curl_errno($ch)) { // $message = 'Error: ' . curl_error($ch); // $this->logger->error($message); // return false; // } // curl_close($ch); // return true; } private function updateEmailPassword($user_data) { // $keys = $this->config->getGlesysKeys(); // $fields = array( // 'emailaccount' => $user_data['email'], // 'password' => $user_data['password'] // ); // $query = http_build_query($fields); // $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL, // 'https://api.glesys.com/email/editaccount/'); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_POST, 1); // curl_setopt($ch, CURLOPT_USERPWD, $keys); // curl_setopt($ch, CURLOPT_POSTFIELDS, $query); // $result = curl_exec($ch); // if (curl_errno($ch)) { // $message = 'Error:' . curl_error($ch); // $this->logger->error($message); // return false; // } // curl_close($ch); // $xml = simplexml_load_string($result); // $code = $xml->status->code; // if ($code != 200){ // $this->logger->warning( // "Error: non-200 status: " . $xml->status->text); // return false; // } // return true; } }