Если всерьез, то читаются данные из backend'a и на основании этого рассчитывается процент.
Например, надо отправить 10 мейлов, после отправки каждого пишется в лог, сколько отправлено, скрипт из аякса читает этот файл - например, там написано в данный момент "4", значит, отображается 40%. Через секунду проверяется еще раз, к этому времени уже, например, 7, значит, отображаем 70%.
А можно не мучаться и сделать фейковый индикатор - сначала что-то как бы грузится, потом доходит до 100% и картинка меняется, например, начинает, что-то крутиться. И пользователь доволен, т.к. у него создается ощущение процесса.