Функция mail() вызывает sendmail, который должен быть настроен. Обычно это почтовый сервер, у которого есть локальная очередь и возможно настройки передачи сообщений другому серверу(релей с авторизацией).
И это довольно разумно, если удаленный почтовый сервер не доступен, то письмо будет жить в локальной очереди и ждать когда сервер сможет принять письмо. А отличие от phpmail и подобных вариант с локальной очередью на локальным релее выглядит довольно просто во всех отношениях. В противном случае вы либо будете терять письма, если smtp сервер не доступен, либо писать кодик про очереди, а тут уже привет kafka, gearman, rabbitmq, redis, nemcached и другие костыли :) тем временем простой mail() + postfix поднимается за пару команд.