With this tie firmly in the balance, it was Roma who began brightly and could have broken the deadlock inside the opening five minutes when Lorenzo Pellegrini sent a diving header over the bar from Zeki Celik’s lofted pass.
Pellegrini then teed up Eldor Shomurodov for a header wide, and it only seemed a matter of time before the Giallorossi struck first.
However, Porto had other ideas, as Samu moved Porto into a 2-1 aggregate lead in emphatic fashion.
Claudio Ranieri was left to rue a goalkeeping blunder by Mile Svilar, who redeemed himself for conceding possession by denying Stephen Eustaquio, but Fabio Vieira reacted to the loose ball and after seeing his first shot blocked by Gianluca Mancini, he nodded the rebound towards Samu to fire home an unstoppable overhead kick.
The visitors’ joy was short-lived in what was a pulsating first half, as Paulo Dybala restored parity with a delightful dinked finish over Diogo Costa following some superb link-up play with Shomurodov in an opportunity engineered by Manu Kone's tenacity in midfield.
Kone was involved in Roma’s second goal too, teeing up Dybala to fire an excellent left-footed strike past Costa at his near post to give the Giallorossi a 3-2 aggregate advantage at half-time.
Martín Anselmi’s men went a man down just six minutes into the second half when referee Francois Letexier was called over to the pitchside monitor to review an altercation between Eustaquio and Leandro Paredes.
Eustaquio was shown a straight red card for taking a swipe towards the Argentina international, who dramatically fell to the turf clutching his face.
Shomurodov looked to hammer home Roma’s superiority but agonisingly blazed a close-range attempt over the bar before having an effort ruled out for offside moments later.
Evan Ndicka was perhaps fortunate not to be sent off himself and level the match with 10 players apiece, as he clearly infringed Samu before the Spain international’s strike cannoned off the post.
Any hopes of a Porto comeback were effectively diminished when Niccolo Pisilli clinically converted Angelino’s cross to seal a place in Friday’s draw, where they will play either Athletic Club or Lazio, though Porto had the last word when Devyne Rensch turned a Goncalo Borges cross into his own net deep into stoppage time.