imap_client with get_emails
This commit is contained in:
parent
5149869952
commit
a3f5c35406
27
src/imap_client.php
Normal file
27
src/imap_client.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user