Темы:
CREATE TABLE {$db_prefix}topics (
id_topic integer primary key,
is_sticky smallint NOT NULL default '0',
id_board smallint NOT NULL default '0',
id_first_msg int NOT NULL default '0',
id_last_msg int NOT NULL default '0',
id_member_started int NOT NULL default '0',
id_member_updated int NOT NULL default '0',
id_poll int NOT NULL default '0',
id_previous_board smallint NOT NULL default '0',
id_previous_topic int NOT NULL default '0',
num_replies int NOT NULL default '0',
num_views int NOT NULL default '0',
locked smallint NOT NULL default '0',
unapproved_posts smallint NOT NULL default '0',
approved smallint NOT NULL default '1'
);
Реализация может быть примерно такой:
1. вешаем триггер на сообщения и темы на insert и отбрасываем по триггеру записи-"события" на файловую систему. таким образом форум мы не затормозим.
(при этом пропускаем те записи, которые созданы тех. пользователем. см п.3)
2. по крону вешаем процесс например раз в минуту отбирает с файловой системы события и (новые темы и сообщения) и по SMTP, от имени технического пользователя подписанного на рассылку отправляет их в рассылку. При этом топик постится в рассылку как новое сообщение, сообщения форума - как ответы на первое сообщение (топик).
3.После чего тот-же процесс по IMAP считывает все непрочитанные сообщения из рассылки. По subject письма определяем topic. Если тему удалось найти - дописываем сообщение к теме. Если нет - создаем новую тему.
Все сообщения на форум постятся от имени технического пользователя, оригинального sender-а добавляем в текст сообщения. Из всего что приходит из рассылки, вырезаем весь html, оставляем только простой текст.
4. для простоты, видимо нужно будет отключить в этой теме редактирование/удаление сообщений на этом форуме/разделе, поскольку мы не сможем аналогичным образом отредактировать сообщения ушедшие в рассылку.
UPD. Структура таблиц взята из инсталяционного скрипта актуальной версии форума с сайта Simple Machines и от нашей версии теоретически может отличаться.