PHP скрипт · 4 min read · Dec 30, 2025

Золотая рыбка, скрипт автописьма на PHP

Золотая рыбка, скрипт автописьма на PHP для настроек “Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail”

Версия 1.0
Автор: Фалко Тимме

Золотая рыбка — это довольно простой скрипт автописьма (написанный на PHP) для Postfix. Он состоит всего из одного PHP-файла, который можно запустить через cronjob. Он работает с нашими учебниками “Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail” (он не может быть использован для других настроек, особенно для настроек Postfix, которые не используют базу данных MySQL).

Я не даю никаких гарантий, что это будет работать для вас!

1 Предварительная заметка

Я предполагаю, что у вас уже есть рабочая настройка “Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail”, например:

  • Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (Debian Lenny)
  • Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (CentOS 5.3 x86_64)
  • Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (Fedora 10)
  • Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (Ubuntu 8.10)
  • Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (Mandriva 2009.0 i386)

2 Установка и использование Золотой рыбки

Сначала мы подключаемся к нашей базе данных MySQL и создаем дополнительную таблицу под названием autoresponder:

mysql -u root -p
USE mail;
CREATE TABLE `autoresponder` (  
`email` varchar(255) NOT NULL default '',  
`descname` varchar(255) default NULL,  
`from` date NOT NULL default '0000-00-00',  
`to` date NOT NULL default '0000-00-00',  
`message` text NOT NULL,  
`enabled` tinyint(4) NOT NULL default '0',  
`subject` varchar(255) NOT NULL default '',  
PRIMARY KEY (`email`),  
FULLTEXT KEY `message` (`message`)  
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
quit;

После этого мы загружаем последнюю версию золотой рыбки в /tmp и переименовываем скрипт PHP золотой рыбки в autoresponder.php:

cd /tmp  
wget http://remofritzsche.ch/goldfish/download/current.tar.gz  
tar xvfz current.tar.gz  
cd goldfish-002p1/  
mv goldfish-002-p1.php autoresponder.php

Затем мы открываем autoresponder.php и настраиваем раздел конфигурации. Убедитесь, что вы заполнили правильные данные базы данных (вы можете использовать существующего пользователя MySQL mail_admin); в строке $conf[‘q_mailbox_path’] убедитесь, что вы заменили имя таблицы view_users на users:

vi autoresponder.php

| [...] ###################################### # Конфигурация # ###################################### /* Общие */ $conf['cycle'] = 5 * 60; /* Логирование */ $conf['log_file_path'] = "/var/log/goldfish"; $conf['write_log'] = true; /* Информация о базе данных */ $conf['mysql_host'] = "localhost"; $conf['mysql_user'] = "mail_admin"; $conf['mysql_password'] = "mail_admin_password"; $conf['mysql_database'] = "mail"; /* Запросы к базе данных */ # Этот запрос должен вернуть путь (`path`) соответствующего # maildir-Mailbox с адресом электронной почты %m $conf['q_mailbox_path'] = "SELECT CONCAT('/home/vmail/', SUBSTRING_INDEX(email,'@',-1), '/', SUBSTRING_INDEX(email,'@',1), '/') as `path` FROM users WHERE `email` = '%m'"; # Этот запрос должен вернуть следующие поля из таблицы autoresponder: `from`, `to`, `email`, `message` где `enabled` = 2 $conf['q_forwardings'] = "SELECT * FROM `autoresponder` WHERE `enabled` = 1"; # Этот запрос должен отключить каждую запись автописьма, которая закончилась в прошлом $conf['q_disable_forwarding'] = "UPDATE `autoresponder` SET `enabled` = 0 WHERE `to` < CURDATE();"; # Этот запрос должен активировать каждую запись автописьма, которая начинается сегодня $conf['q_enable_forwarding'] = "UPDATE `autoresponder` SET `enabled` = 1 WHERE `from` = CURDATE();"; # Этот запрос должен вернуть сообщение записи автописьма, идентифицированной по электронной почте %m $conf['q_messages'] = "SELECT `message` FROM `autoresponder` WHERE `email` = '%m'"; # Этот запрос должен вернуть тему записи автописьма, идентифицированной по электронной почте %m $conf['q_subject'] = "SELECT `subject` FROM `autoresponder` WHERE `email` = '%m'"; [...] |

После этого мы перемещаем autoresponder.php в /usr/local/bin, делаем его владельцем пользователя и группы vmail и делаем его исполняемым:

mv autoresponder.php /usr/local/bin
chown vmail:vmail /usr/local/bin/autoresponder.php  
chmod 755 /usr/local/bin/autoresponder.php

Теперь мы создаем файл журнала /var/log/goldfish и делаем его владельцем пользователя и группы vmail:

touch /var/log/goldfish  
chown vmail:vmail /var/log/goldfish

Я хочу, чтобы autoresponder.php выполнялся каждые пять минут, поэтому я создаю для него cron job, который будет выполняться пользователем vmail:

crontab -u vmail -e

| */5 * * * * /usr/local/bin/autoresponder.php |

Вот и все! Теперь вы можете создавать автописьма в таблице autoresponder, например, с помощью phpMyAdmin или в командной строке, например, следующим образом:

mysql -u root -p
USE mail;
INSERT INTO `autoresponder` (`email`, `descname`, `from`, `to`, `message`, `enabled`, `subject`) VALUES('[email protected]', '[email protected] Автоответчик', '2009-06-08', '2009-06-12', 'Я буду отсутствовать на неделе с 8 июня с очень ограниченным доступом к электронной почте.
Я отвечу как можно скорее.
Спасибо!
Фалко', 1, 'Вне офиса');
quit;

Это создает автописьмо для адреса электронной почты [email protected], которое активно с 8 июня 2009 года по 12 июня 2009 года. Поскольку cron job автописьма выполняется только каждые пять минут, сообщение автописьма не будет отправлено немедленно, а в течение пяти минут после отправки электронного письма на адрес [email protected].

Вы должны увидеть что-то вроде этого в файле журнала /var/log/goldfish каждый раз, когда автописьмо отправляется с адреса [email protected]:

2009-06-08 07:00:01 Соединение с базой данных успешно установлено  
2009-06-08 07:00:01 База данных успешно выбрана  
2009-06-08 07:00:01 База данных успешно обновлена (отключенные записи)  
2009-06-08 07:00:01 База данных успешно обновлена (включенные записи)  
2009-06-08 07:00:01 Успешно получены директории maildir  
2009-06-08 07:00:01 Успешно получена тема [email protected]  
2009-06-08 07:00:01 Успешно получено сообщение [email protected]  
2009-06-08 07:00:02 --------- Конец выполнения ------------

3 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.