Millwall gift-wrapped three precious points to Gillingham on an afternoon that saw Neil Harris' side slip to their first home League One defeat in seven games - and down to 11th in the table.
The Lions were already trailing to Dominic Samuel's 20th-minute goal when goalkeeper Jordan Archer was dismissed eight minutes later for a foul on Cody McDonald after a mix-up with team-mate Mark Beevers.
Bradley Dack smashed home the resulting penalty leaving Millwall trailing by two goals and a man short with over an hour still to play.
Neil Harris' charges really gave it a go after the break, but another defensive slip on 89 minutes let in Samuel, who slotted home his second of the game to condemn The Lions to defeat.
There was little festive cheer on offer to Lions fans in a bumper Den crowd of 12,032 and in the opening half, it was one of those games that if it could go wrong, it did go wrong.
Millwall looked lacking in cohesion and quality and were frustrated by a Gills side whose high-tempo approach made it difficult for the home side to get any real flow going in their play.
Instead it was Justin Edinburgh's side who quickly got the measure of their opponents and it took a superb eighth-minute interception by Beevers to nick the ball off the feet of Samuel as he prepared to shoot six yards out.
Three minutes later a free-kick by the visitors caused a few anxious moments in the Millwall defence as the ball ping-ponged about in the danger zone before it was eventually cleared.
Gills' striker Samuel was booked in the 14th minute for diving after going to ground theatrically in the penalty area, but just six minutes later the frontman was involved in the thick of the action once again, this time scoring the opening goal.
Beevers was penalised for a foul on the right flank for clipping Samuel's heels, and when Dack curled over the resulting free-kick, he ghosted in at the back post to head home.
Matters went from bad to worse eight minutes later when the disjointed Lions were the masters of their own downfall; Beevers and Archer both left the other to clear their lines, in nipped McDonald and Archer sent the Gills player sprawling as he tried to gather the ball.
Referee Darren Handley brandished a straight red card, Ed Upson made way for sub keeper David Forde whose first touch of the ball was to pick it out of the back of the net after Dack had smashed the spot-kick straight down the middle to put the visitors 2-0 ahead.
It could have been even worse for Millwall on the half-hour mark, but thankfully Forde was smart to react and made a vital block to deny Dack, who had burst through one-on-one with the keeper.
The half-time whistle could not come quick enough for boss Harris, who used the break as an opportunity to regroup and regalvanise his shell-shocked 10-men.
The second-half saw Shane Ferguson introduced for left-back Joe Martin, who had been booked along with Gillingham's Ryan Jackson following an altercation in first-half injury-time.
Millwall certainly showed great intensity in their attacking play, patiently working the ball from the back, trying not to lose possession and carve out openings to get a foothold back in the game.
Ferguson sent a 20-yard free-kick a whisker wide of the upright and then Aiden O'Brien did well to control Carlos Edwards' delivery before seeing Stuart Nelson save his initial shot and then Jackson clear the follow-up off the line as Harris' men tried to work up a head of steam.
You sensed that if only Millwall could have got one goal, another would follow as the home crowd really came into play.
The Den faithful were off their feet with 20 minutes remaining when Lee Gregory kept battling away and won possession in a central position in the penalty area, but his shot was expertly blocked by the keeper for another corner.
O'Brien also headed over from under the bar from another Edwards' cross, but hard as The Lions tried, they just could not get the lifeline of a goal that they needed.
Instead it was Gillingham who rubbed salt in the wounds when Samuel took advantage of an error by Byron Webster, slipped past Forde and stroked the ball into the empty net from a tight angle to put the result beyond doubt.
Archer, Edwards, J.Martin, Beevers (Onyedinma, 82mins), Webster, Upson, Saville, Williams, Gregory, Morison, O'Brien. Subs not used: L.Martin, Ferguson, Thompson, Abdou, Nelson.
J.Martin (45+4mins), Forde (83mins), Saville (90+2mins)
Gillingham: Nelson, Jackson (Osadebe, 69mins), Garmston, Egan, Hessenthaler, McDonald (Donnelly, 46mins), Samuel (Norris, 90+6mins), A.Morris, Dack, Wright, Oshilaja. Subs not used: G.Morris, Ehmer, Houghton, McGlashan.
Bookings: Samuel (14mins), Jackson (45+4mins)
Scorers: Samuel (20, 89mins), Dack (28mins, pen)
Ref: D. Handley
Att: 12,032 (away 1,607)