James van Riemsdyk and Nazem Kadri also scored for the Maple Leafs (9-4-0) who have won three of their last four to take over sole possession of first place in the Atlantic Division, moving ahead of the Tampa Bay Lightning.
James Reimer stopped 43 shots for his 11th career shutout.
Richard Bachman stopped 22 shots for the Oilers (3-9-2), who have now lost four straight.
Edmonton outshot Toronto 43-25.
Toronto started the scoring just over a minute into the game on their first shot of the contest. Kadri made a nice play to hook a pass to a hard-charging Kessel on his way to the net and he was able to fake out Oilers goalie Bachman with a quick move to score his eight goal of the season.
Edmonton had its chances in the fast-paced first period. Most notably on a drop pass from Nail Yakupov that defender Nick Schultz shot wide of an empty net. The Oilers outshot the Maple Leafs 14-12, with Reimer making all the stops through 20 minutes.
Bachman was able to keep it a one-goal game early in the second on a big glove save on Mason Raymond, but couldn't do it again a minute later as Kessel dished a two-on-one pass off to van Riemsdyk, and he chipped it into the net.
Toronto went up 3-0 with 11 minutes left in the second period as Bachman lost track of a deflected shot that went behind the net and Kessel displayed his skill by barely pulling the puck over the goal line before putting it in the roof of the cage for his second goal of the night.
The Maple Leafs added to their lead six minutes into the third period as Morgan Rielly finished off a tic-tac-toe passing play by rifling a puck off of Kadri and in.
Kadri also had two assists in the game.
The Maple Leafs are right back at it in Calgary on Wednesday to play the Flames. The Oilers remain home to face the Detroit Red Wings on Saturday.
Notes: It was the second and final of two meetings this season. The Maple Leafs beat the Oilers 6-5 in overtime on Oct. 12 in the previous meeting as Joffrey Lupul scored with under a minute left to force the extra period before Dave Bolland scored the winner… Lupul drew back into the Toronto lineup after missing the last two games with a foot injury… Out for the Leafs were scratched defenceman John-Michael Liles and forward Troy Bodie and injured players included forwards Nikolai Kulemin (ankle), Tyler Bozak (lower body) and defenceman Mark Fraser (knee)… Oilers forward David Perron was a late scratch with an illness. The Oilers remained without injured players Steve MacIntyre (knee), Corey Potter (back), Ryan Hamilton (knee), Jesse Joensuu (back), Ryan Smyth (groin) and Taylor Hall (knee)… The Leafs came into the game having been outshot in nine straight games and in 10 of their first 12 match-ups this season… Oilers centre Sam Gagner made his return to the Edmonton lineup after missing 13 games due to a broken jaw suffered in the pre-season after taking a since Zack Kassian stick to the face. Gagner wore a full face shield in his return… Richard Bachman got his second career start in the Edmonton net after being called up from Oklahoma City with starter Devan Dubnyk suffering an ankle injury. Bachman made 47 of 48 stops in a 2-1 overtime loss to the L.A. Kings on Sunday.