Moehler (5-5) allowed two runs and five hits while striking out four for his fifth win in six decisions.
The Marlins, winners of 17 of their last 23, are on their longest winning streak since a nine-game run Aug. 27-Sept. 8, 2004. Florida also improved to 13-4 all-time against Toronto.
Blue Jays rookie Casey Janssen (5-5) had his worst performance in 11 starts this season, allowing seven runs, 11 hits in just three-plus innings.
Toronto lost its fifth straight interleague game and ninth in the last 10 against NL opponents.
Florida sent nine batters to the plate in a four-run third to take a 5-2 lead. Jeremy Hermida and Miguel Olivo each hit bases-loaded singles and Moehler also had an RBI single. It was his second career hit and second RBI.
Mike Jacobs hit a two-run homer into the right-field stands off Janssen in the fourth to stretch Florida's lead to 7-2.
Florida added a run in the seventh when Dan Uggla was hit by a pitch from Francisco Rosario with the bases loaded.
The Marlins took a 1-0 lead in the first on Miguel Cabrera's RBI single.
The Blue Jays went ahead 2-1 with a two-out rally in the third. Alex Rios walked, Frank Catalanotto followed with a single and both scored on Vernon Wells' double down the left-field line.
Moehler made his first start against Toronto since June 21, 2000, when he was with Detroit. ... Marlins SS Hanley Ramirez is hitless in his last 28 at-bats. ... Jacobs has hit in 11 of the last 12 games. ... Bengie Molina went 0-for-4 to snap a career-high 15-game hit streak. ... Janssen made his first interleague start