Chris Wilder’s men needed to win to give themselves a chance of leapfrogging either Sheffield United or Luton into the last two available positions.
But Alan Browne’s strike, Emil Riis Jakobsen’s double and Dael Fry’s own goal settled the contest in Preston’s favour, with Marcus Tavernier’s reply proving nothing more than a consolation for Middlesbrough, who had Paddy McNair sent off.
Even if Boro had managed to win they still would have missed out on a play-off spot, with fifth-placed Sheffield United beating champions Fulham 4-0 and sixth-placed Luton overcoming Reading 1-0 to seal their top-six position.
Wilder made one change to the side that beat Stoke 3-1, with centre-back McNair returning after illness to replace Lee Peltier, but Middlesbrough struggled to find any sort of rhythm in the early stages of the match.
Despite having little to play for, Preston looked livelier and the deadlock was broken by captain Browne in the 24th minute as he smashed the ball home on the half volley, having chested down Brad Potts’ cross inside the box.
The hosts had the ball in the net again around 10 minutes later with Daniel Johnson’s corner going straight in, only for referee Tim Robinson to rule it out for a foul on goalkeeper Luke Daniels.
They did not have to wait much longer to double their lead, however, as Fry inadvertently deflected the ball past Daniels after Riis Jakobsen’s attempted cross from inside the box.
The visitors had to battle to prevent the advantage from increasing further before the break, with Preston midfielder Ali McCann’s left-footed shot across goal sneaking past the post and a near-certain goal for Johnson being thwarted by a last-ditch tackle from Isaiah Jones.
Tempers boiled over just before half-time after a coming together between McNair and Sepp Van Den Berg, resulting in bookings for the two defenders as well as Daniels and Johnson.
The start of the second half brought renewed optimism for Middlesbrough with Tavernier heading in at the back post from Anfernee Dijksteel’s cross to half the deficit.
But any hopes of a comeback were soon dashed as Riis Jakobsen coolly lifted the ball over the onrushing Daniels, having been released by a clever pass from Cameron Archer.
More chances came and went at both ends but it was Preston who added extra gloss to the scoreline, with Riis Jakobsen scoring from the penalty spot after McNair was sent off for handball on the line to block Archer’s goal-bound effort.
Preston finish safely in mid-table and there was a special moment for defender Paul Huntington in the 80th minute as he made his 306th and final appearance for the club, coming off the bench to replace Bambo Diaby.