PHP не имеет ограничений, и вы можете делать то, что говорите, и выполнять его в тесном цикле.
В Linux это sendmail или клон sendmail. Если он начинает перегружаться, он должен начать ставить в очередь ваши письма и доставлять их, когда это возможно. Для Windows у вас есть сокетное соединение, и я полагаю, что почтовый сервер может начать отказывать в соединениях, если он перегружен.
Если вы не торопитесь отправлять их все, рассмотрите спящий режим (2) между каждым вызовом mail (). Если все прошло гладко, попробуйте sleep (1) в следующий раз. Затем включите (500000) в следующий раз и т. Д. (ОБНОВЛЕНИЕ: следуя совету Мэтта, поместите set_time_limit (10) внутри цикла, чтобы избежать нехватки процессорного времени.)
Если вы хотите, чтобы они были разосланы еще быстрее, вы можете использовать несколько локальных реле. (В Windows вы могли бы справиться с этим, установив параметр SMTP php.ini; в Linux вы бы использовали одну из библиотек, которая отправляет электронную почту через сокет.) Или рассмотрите профессиональную службу рассылки почты, где они позаботятся обо всех этих проблемах для вас.
РЕДАКТИРОВАТЬ Только что увидел ваш комментарий о запуске его с вашего Mac. Я предположил ситуацию с сервером, с реальным почтовым сервером с глобальным IP. Если ваш Mac находится за брандмауэром, вы, скорее всего, настроены на пересылку всей электронной почты на ваш почтовый сервер интернет-провайдера. Ваш Интернет-провайдер может очень расстроиться из-за получения 4000 электронных писем от вас за короткий период времени. (Например, они могут предположить, что ваша машина была взломана вирусом, и отключить вас.)
Кроме того, на виртуальном хостинге согласие не рассылать много писем часто является частью контракта. Так что будьте осторожны и там.