Простенький скрипт для просмотра локальной почты php Apache

В этой статье хочу немного рассказать о том, как я сделал локальный скрипт на PHP с помощью которого можно выполнять обработку почтовых сообщений моих локальных тестовых сайтов.
В результате у меня получился локальный домен, в котором я могу получить конкретное сообщение по адресу http://mail/18 - это будет сообщение номер 18 и получить список сообщений по адресу http://mail/list.
Далее приведу пример своего Г**** кода в котором все смешано, но обработка выполняется так как нужно:
<html>
    <head>
        <meta charset="utf-8">
        <title>Просмотр сообщения</title>
    </head>
    <body style="background: #ccc">
        <?php
        $f = isset($_GET['id']) ? $_GET['id'] : null;
        $rootDir = '/var/mail/sendmail/new';
        $standartPath = $rootDir . '/letter_';
        ?>
        <h1
            style="margin-top: 30px;
                   color: blue;
                   text-align: center">
            Самопальный почтовый клиент online
        </h1>
        <h4 style="text-align: center;">
            <a href="/list">Список сообщений</a>
        </h4>
        <div
            style="border: solid 1px #999;
                   padding: 30px;
                   width: 900px;
                   margin: 20px auto;
                   background: #fff;
                   border-radius: 10px;">
            <?php
            if ($f === 'list') {
                $files = getList($rootDir);
                uasort($files, function($a, $b) {
                    $lA = preg_replace("/[^0-9]/", '', $a['name']);
                    $lB = preg_replace("/[^0-9]/", '', $b['name']);
                    return $lA > $lB;
                });
            ?>
            <table
                style="width: 100%;border: solid 1px #ccc">
                <thead>
                    <tr style="font-weight: bolder">
                        <td style="text-align: center">Номер</td>
                        <td>Название</td>
                        <td>Дата изменения</td>
                    </tr>
                </thead>
                <tbody>
                    <?php $padding = 10 ?>
                    <?php foreach ($files as $file) : ?>
                        <tr>
                            <?php $link = preg_replace("/[^0-9]/", '', $file['name']); ?>
                            <td style="padding: <?= $padding ?>px;text-align: center">
                                <?= $link ?>
                            </td>
                            <td style="padding: <?= $padding ?>px;border: solid 1px #ccc;">
                                <a href="/<?= $link ?>">
                                    <?= $file['name']; ?>
                                </a>
                            </td>
                            <td style="padding: <?= $padding ?>px">
                                <?= $file['time']; ?>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
            <?php
            } elseif ($f) {
                $file = file_get_contents($standartPath . $f . '.eml');
                echo quoted_printable_decode($file);
            } else {
                echo 'id of file required!';
            }
            function getList($path) {
                $files = array();
                global $rootDir;
                if ($dir = opendir($path))  {
                    while (false !== ($file = readdir($dir))) {
                        if (
                            $file == "."
                                  || $file == ".."
                                           || (is_dir($path . "/" . $file))
                        ) continue;
                        $files[] = [
                            'name' => $file,
                            'time' => date('Y-m-d H:i:s', filemtime($rootDir . '/' . $file))
                        ];
                        $i++;
                    }
                    closedir($dir);
                }
                return $files;
            }
            ?>
        </div>
    </body>
Далее останется только забросить в директорию со скриптом файл .htaccess с таким содержимым:
RewriteEngine On
      RewriteRule ^([0-9a-z]+)$ index.php?id=$1 [L]
      RewriteRule ^([0-9a-z]+)/$ index.php?id=$1 [L]
И настроить виртуальных хост mail в вашей системе.Вот например таким способом.
Надеюсь кому-нибудь пригодится этот небольшой и не очень красивый скрипт... С помощью которого можно посмотреть тестовый сообщения из нужной вам папки.
PS. О перенаправлении сообщений в папку можно почитать вот здесь.

Комментарии

Популярные сообщения из этого блога

Установка утилиты yandex disk для ubuntu

Отправка пост запроса AngularJS