Noah Syndergaard started the nightcap for New York, returning to a major league mound for the first time in two years and completing his comeback from Tommy John surgery. He topped out at 96 mph and struck out his first two batters in a perfect inning, throwing nine of 10 pitches for strikes.
Lewin Díaz launched a two-run homer in the first game for the last-place Marlins, who dropped their sixth straight.
Stroman (10-13) allowed two runs and five hits over five effective innings in his 33rd start this year - most in the majors - after sitting out the pandemic-shortened 2020 season. That matched his career high set in 2017 with Toronto, and he could make one more in the season finale Sunday before becoming a free agent.
"It's extremely gratifying. I think it's just a testament to the work I put in," said Stroman, who also credited his personal trainer, his family and the Mets' staff.
"I'm looking forward to free agency, however it may play out."
The athletic right-hander won for the first time in six starts since an Aug. 22 victory at Dodger Stadium and even got his first career stolen base, the first for a Mets pitcher since Jacob deGrom in August 2017.
"I had a feeling he was going to go," Mets manager Luis Rojas said.
A smiling Stroman also had some fun with Marlins leadoff man Jazz Chisholm Jr., playfully carrying him piggyback-style after they crossed paths on a play at first base.
Seth Lugo struck out two in a 1-2-3 sixth and Edwin Díaz did the same in the seventh for his 31st save in 37 chances. New York took the opener of its 14th doubleheader this year - most by a big league team since the Mets played 19 and the Montreal Expos 15 in 1979, according to the Elias Sports Bureau.
Brandon Nimmo tripled on the third pitch from rookie opener Zach Thompson (2-7) and scored on Lindor's single.
Jonathan Villar added an RBI single in the third, and New York got another run when third baseman Eddy Alvarez committed his second error in two innings.
Lindor connected for his 19th homer in the sixth, a two-run shot off lefty Steven Okert.
"I think it's important for him to finish strong," Rojas said.
Mets catcher Tomás Nido threw out two runners trying to steal second.
New York, eliminated from playoff contention last weekend following a second-half swoon, had dropped 10 of 11 heading into its final home series of a disappointing season.
The single-admission doubleheader, with both games set for seven innings under pandemic rules, was scheduled to make up a Sept. 1 rainout at Citi Field.
Marlins: 1B Jesús Aguilar had season-ending arthroscopic surgery on his left knee in Miami and is expected to be ready for spring training. Aguilar batted .261 with 22 homers and 93 RBI in 131 games. He went on the injured list Sept. 8. ... RHP Pablo López (strained rotator cuff) was unable to throw live batting practice because of afternoon rain so he threw about 45-50 pitches in a bullpen, simulating innings with hitters standing in. He still hopes to pitch in a big league game before the season ends. ... SS Miguel Rojas (toe) sat out the opener but batted leadoff in the second game.
Mets: Rojas said deGrom won't pitch again this season. The two-time Cy Young Award winner has been sidelined since mid-July because of an elbow injury that's healed, according to the club.
He's been throwing bullpens recently, including a successful one Monday, with an eye toward a potential return this year. But with the Mets out of postseason contention, deGrom and the club agreed there's no sense in him starting a game even though he's healthy, Rojas explained.
Marlins: LHP Daniel Castano was added from Triple-A Jacksonville as the 29th man for the doubleheader. He entered in relief to start the second and permitted two runs - one earned - with three strikeouts in three innings. ... RHP Taylor Williams cleared waivers and elected free agency. He was designated for assignment last Wednesday.
Mets: Syndergaard was reinstated from the 60-day injured list to serve as the 29th man, and catcher Chance Sisco was designated for assignment.
Marlins: All-Star rookie Trevor Rogers (7-8, 2.67 ERA) was originally scheduled to start the opener but Miami pushed him back to the nightcap to make sure wet weather didn't force an abbreviated outing.
Mets: It was Syndergaard's first major league outing since Sept. 29, 2019. He made a pair of rehab appearances last week for Triple-A Syracuse, working a scoreless inning each time. He can become a free agent after the season.
Syndergaard and the Mets initially targeted a June return, but his rehab progression was slowed by a sore elbow that caused him to be shut down in late May for a while and then a positive test for COVID-19 in late August even though he is vaccinated.
Francisco Lindor drives in three as Mets beat Marlins
The Mets win Game 1 of their doubleheader vs. the Marlins thanks to Francisco Lindor's 19th HR of the season.