private async Task HandleData() { await SendLine("354 OK, send"); _connection.SetTimeout(_configuration.DataCommandTimeout); using (var target = new MemoryStreamWithFileBacking(DataTransferMemoryBufferMaxSize, _configuration.TempDirectory)) { var transmissionBuffer = new TransmissionBuffer(target); while (!transmissionBuffer.TransmissionEnded) { using (var maildata = await _connection.Read()) { maildata.Seek(0, SeekOrigin.Begin); transmissionBuffer.Append(maildata); } } transmissionBuffer.Flush(); var commandResult = await _commandHandler.HandleData(target); await SendCommandResult(commandResult); _state.HasMailFrom = false; _state.HasRcptTo = false; } }