Можно конечно инди, но функции SMTP сами по себе элементарны. Это что касается отправки сообщений. А вот приём и хранение это уже другое. Если я не ошибаюсь с помощью NMPOP3 можно: соединиться с сервером, послать аунтификационную информацию на сервер, получить информацию о почтовом ящике (колличество писем, размер), получить письма с сервера, удалить письма.
Его настраивают как обычный сетевой компонент.
К примеру:
NMPOP31.Connect;
NMPOP31.GetMailMessage(1);
Edit1.Text:=NMPOP31.MailMessage.Subject;
Memo1.Lines:=NMPOP31.MailMessage.Body;
NMPOP31.Disconnect;
Просмотр всех писем на почтовом сервере возможно через цикл.
После этого надо письмо где-то хранить локально. Я бы взял БД, но не PARADOX, а то мало кому охота потом восстанавливать письма. Может что-то посложнее. С помощью SQL используя LIKE можно организовать динамический поиск по БД с отображением результата как Outlook Express for Vista. Вот и вся задача.