нужно, чтобы на сервере был sendmail демон ( qmail ). Он будет обрабатывать очередь. php.net/manual/en/function.mail.php ищите на странице 'queue', там есть несолько идей.
сделайте error_reporting(E_ALL|E_STRICT); и увидите ворнинг который ожидаете. Не вижу бага в упор. Как Вам там и написали, Ваш код выглядит странно. Если сделать E_STRICT репортинг то PHP Вам сообщит об этом. Если Вы об этом не хотите слышать — дело Ваше, но тогда легко запутаться.
Есть граница, за которой весь код счетает данные безопасными. При пересечении границы данные нужно фильтровать. Конкретно c сессиями в PHP может случится то, что решив хранить их в базе получите инъекцию.