В iRedMail Pro есть API для управления почтовыми ящиками. Мы же рассмотрим процесс создания почтового ящика с помощью своего скрипта в бесплатной версии почтового сервера. В статье будет описан случай, когда учетные записи для почты хранятся в СУБД (MariaDB).
Мы рассмотрим отдельно SQL-запрос для создания почтового ящика в базе данных, а после — скрипт на php, из которого можно будет сделать свой мини API.
По умолчанию, почтовые ящики iRedMail хранятся в базе данных vmail, таблице mailbox. Чтобы создать новый, нужно просто выполнить SQL-запрос на вставку новой записи. В самой таблице более 50 полей, но нам нужно заполнить всего 6:
Остальные поля можно не указывать — значения для них по умолчанию нас, вполне, устроят.
И так, чтобы получить хэш для пароля нового почтового ящика в командной строке на сервере iRedmail выполняем команду:
doveadm pw -s ‘ssha512’ -p ‘password123’
* где doveadm — административная утилита dovecot, которая устанавливается вместе с iredmail; ssha512 — указание алгоритма шифрования; password123 — наш пароль.
В результате выполнения команды мы получим что-то на подобие:
{SSHA512}iNX3KgDLYVvA+nQKlJf4GUVOTLwiyxYpBoAD1NBs1CK0rIG4XVbPXWWeN5lRrMXljQD16s9q9ny+EO8iX7SpnbH/+K0=
Это и будет хэш пароля, который мы будем использовать для запроса.
И так, синтаксис самого запроса SQL выглядит так:
INSERT INTO mailbox (`username`, `password`, `language`, `maildir`, `domain`, `created`) VALUES (‘<username>’, ‘<password>’, ‘<language>’, ‘<maildir>’, ‘<domain>’, ‘<created>’);
Пример запроса:
INSERT INTO mailbox (`username`, `password`, `language`, `maildir`, `domain`, `created`) VALUES (‘[email protected]’, ‘{SSHA512}iNX3KgDLYVvA+nQKlJf4GUVOTLwiyxYpBoAD1NBs1CK0rIG4XVbPXWWeN5lRrMXljQD16s9q9ny+EO8iX7SpnbH/+K0=’, ‘ru_RU’, ‘admins24.com/t/e/s/testmaster-2020.02.25.22.52.53/’, ‘admins24.com’, ‘2020-02-25 22:53:50’);
* в данном запросе мы добавим почтовый ящик [email protected] с паролем password123 (хэш мы генерировали выше), по умолчанию для пользователя будет использоваться русский язык. Обратите внимание на каталог для почты admins24.com/t/e/s/testmaster-2020.02.25.22.52.53 — как и говорилось выше, его путь собран из домена, первых 3-х букв в имени пользователя, а также даты и времени создания почтового ящика.
Данный запрос можно выполнить в phpmyadmin или командной консоли mysql — для подключения к ней на почтовом сервере вводим:
mysql -uroot -p
… и вводим пароль пользователя root от СУБД. После подключаемся к базе vmail:
> use vmail
Можно выполнять запросы.
После можно проверить работоспособность почтовых ящиков с помощью roundcube или другого почтового клиента.
Разобравшись с процессом создания записи в базе данных, создадим скрипт, который будет проверять нет ли уже такой учетной записи и сложность ее пароля. Разобьем процесс на подготовку базы данных и написание самого скрипта.
Для того, чтобы максимально обезопасить работу с данными, мы создадим отдельного пользователя в MariaDB / MySQL, который будет иметь доступ на чтение и запись только в таблицу mailbox.
На сервере заходим в командную оболочку SQL:
Создаем пользователя, от которого будет вестись работа с таблицей mailbox:
> GRANT SELECT, UPDATE, INSERT ON vmail.mailbox TO ‘apiuser’@’localhost’ IDENTIFIED BY ‘123password!’;
* в данном примере мы создаем пользователя apiuser, который сможет подключиться к базе только с локального сервера (предполагается, что скрипт будет работать на сервере iRedMail). Пароль пользователя будет 123password!, а доступ ограничен только на запросы SELECT, UPDATE, INSERT и только на таблицу mailbox базы vmail.
Подробнее процесс создания пользователя в СУБД на базе MySQL описан в инструкции Создание пользователей MySQL/MariaDB и предоставление прав доступа.
После настройки привилегий, можно приступить к написанию самого скрипта.
И так, сам скрипт будет выглядеть так:
Описание скрипта:
Полученный нами скрипт нужно скопировать на веб-сервер — мы получим возможность отправлять на него запросы POST, что позволит говорить о создании примитивного API по созданию почтовых учетных записей на сервере iRedMail.
Для запуска написанного нами скрипта нужно отправить POST запрос на http-сервер. Пример скрипта на PHP, который это делает:
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies