Você precisa aguardar uma resposta ao verbo DATA antes de enviar os dados reais do SMTP. Dessa forma, se o servidor rejeitar o MAIL, o (s) RCPT (s) ou o DATA, você poderá sair da transação antes de bombear os corpos de mensagens potencialmente grandes no canal.
O uso de pipelining não permite lançar tudo no pipe sem se preocupar com isso, você ainda precisa verificar as respostas SMTP e há regras sobre quais verbos devem ser os últimos em um conjunto que é enviado juntos, etc. RFC com pipelining faz um bom trabalho explicando isso