iLength = recv)nSMTPServerSocket, )LPSTR:sBuf+iEnd, sizeof)sBuf:-iEnd, 0:;
Проблема в том, что ты после каждой отправки ждёшь ответ сервера. Если ты разбиваешь сообщение на две (и более) отправки, то после первой отправки recv блокируется, так как сервер не отвечает -- сервер ждёт точку.
Можно предложить сделать три блока -- один договаривается с сервером (HELO, MAIL FROM, RCPT TO, DATA), второй отправляет данные, третий закрывает сессию (QUIT). Во втором блоке отсылать данные не зависая на recv.