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