imap_client with get_emails

This commit is contained in:
Synox 2018-02-23 22:10:46 +01:00
parent 5149869952
commit a3f5c35406
3 changed files with 44 additions and 27 deletions

27
src/imap_client.php Normal file
View File

@ -0,0 +1,27 @@
<?php
class ImapClient {
/*PhpImap\Mailbox */
private $mailbox;
public function __construct($imapPath, $login, $password) {
$this->mailbox = new PhpImap\Mailbox($imapPath, $login, $password);
}
/**
* print all mails for the given $user.
* @param $user User
* @return array
*/
function get_emails(User $user): array {
// Search for mails with the recipient $address in TO or CC.
$mailsIdsTo = imap_sort($this->mailbox->getImapStream(), SORTARRIVAL, true, SE_UID, 'TO "' . $user->address . '"');
$mailsIdsCc = imap_sort($this->mailbox->getImapStream(), SORTARRIVAL, true, SE_UID, 'CC "' . $user->address . '"');
$mail_ids = array_merge($mailsIdsTo, $mailsIdsCc);
$emails = _load_emails($mail_ids, $user);
return $emails;
}
}

View File

@ -5,18 +5,23 @@ require_once '../../config.php';
# load php dependencies: # load php dependencies:
require_once './backend-libs/autoload.php'; require_once './backend-libs/autoload.php';
$mailbox = new PhpImap\Mailbox($config['imap']['url'],
$config['imap']['username'],
$config['imap']['password']);
require_once './user.php'; require_once './user.php';
require_once './autolink.php'; require_once './autolink.php';
require_once './pages.php'; require_once './pages.php';
require_once './router.php'; require_once './router.php';
require_once './imap_client.php';
$router = new Router($_SERVER['REQUEST_METHOD'], $_GET['action'] ?? NULL, $_GET, $_POST, $_SERVER['QUERY_STRING'], $config); $router = new Router($_SERVER['REQUEST_METHOD'], $_GET['action'] ?? NULL, $_GET, $_POST, $_SERVER['QUERY_STRING'], $config);
$page = $router->route(); $page = $router->route();
$page->invoke();
// TODO: remove $mailbox
$mailbox = new PhpImap\Mailbox($config['imap']['url'],
$config['imap']['username'],
$config['imap']['password']);
$imapClient = new ImapClient($config['imap']['url'], $config['imap']['username'], $config['imap']['password']);
$page->invoke($imapClient);
// delete after each request // delete after each request
delete_old_messages(); delete_old_messages();
@ -32,22 +37,7 @@ function error($status, $text) {
die(); die();
} }
/**
* print all mails for the given $user.
* @param $user User
* @return array
*/
function get_emails($user) {
global $mailbox;
// Search for mails with the recipient $address in TO or CC.
$mailsIdsTo = imap_sort($mailbox->getImapStream(), SORTARRIVAL, true, SE_UID, 'TO "' . $user->address . '"');
$mailsIdsCc = imap_sort($mailbox->getImapStream(), SORTARRIVAL, true, SE_UID, 'CC "' . $user->address . '"');
$mail_ids = array_merge($mailsIdsTo, $mailsIdsCc);
$emails = _load_emails($mail_ids, $user);
return $emails;
}
/** /**

View File

@ -2,7 +2,7 @@
abstract class Page { abstract class Page {
function invoke() { function invoke(ImapClient $imapClient) {
} }
function if_invalid_redirect_to_random(User $user, array $config_domains) { function if_invalid_redirect_to_random(User $user, array $config_domains) {
@ -22,7 +22,7 @@ class RedirectToAddressPage extends Page {
$this->domain = $domain; $this->domain = $domain;
} }
function invoke() { function invoke(ImapClient $imapClient) {
$user = User::parseUsernameAndDomain($this->username, $this->domain); $user = User::parseUsernameAndDomain($this->username, $this->domain);
header("location: ?" . $user->username . "@" . $user->domain); header("location: ?" . $user->username . "@" . $user->domain);
} }
@ -41,7 +41,7 @@ class DownloadEmailPage extends Page {
} }
function invoke() { function invoke(ImapClient $imapClient) {
$user = User::parseDomain($this->address); $user = User::parseDomain($this->address);
$this->if_invalid_redirect_to_random($user, $this->config_domains); $this->if_invalid_redirect_to_random($user, $this->config_domains);
@ -62,7 +62,7 @@ class DeleteEmailPage extends Page {
$this->config_domains = $config_domains; $this->config_domains = $config_domains;
} }
function invoke() { function invoke(ImapClient $imapClient) {
$user = User::parseDomain($this->address); $user = User::parseDomain($this->address);
$this->if_invalid_redirect_to_random($user, $this->config_domains); $this->if_invalid_redirect_to_random($user, $this->config_domains);
@ -79,7 +79,7 @@ class RedirectToRandomAddressPage extends Page {
$this->config_domains = $config_domains; $this->config_domains = $config_domains;
} }
function invoke() { function invoke(ImapClient $imapClient) {
redirect_to_random($this->config_domains); redirect_to_random($this->config_domains);
} }
@ -95,20 +95,20 @@ class DisplayEmailsPage extends Page {
} }
function invoke() { function invoke(ImapClient $imapClient) {
// print emails with html template // print emails with html template
$user = User::parseDomain($this->address); $user = User::parseDomain($this->address);
$this->if_invalid_redirect_to_random($user, $this->config['domains']); $this->if_invalid_redirect_to_random($user, $this->config['domains']);
global $emails; global $emails;
global $config; global $config;
$emails = get_emails($user); $emails = $imapClient->get_emails($user);
require "frontend.template.php"; require "frontend.template.php";
} }
} }
class InvalidRequestPage extends Page { class InvalidRequestPage extends Page {
function invoke() { function invoke(ImapClient $imapClient) {
error(400, "Bad Request"); error(400, "Bad Request");
} }
} }