Winger Vincent Clerc scored a hat-trick of tries as France left it late to see off Canada in their World Cup Pool A match at a rain-soaked Napier.
Clerc scored first but Canada hit back through Ryan Smith as the underdogs took a brief lead at McLean Park.
Three Morgan Parra penalties put France 19-10 ahead at half-time and Damien Traille and Clerc each scored two tries after the break to seal the win.
France face New Zealand next week in the pivotal Pool A match.
Afterwards, France coach Marc Lievremont said: "We won the bonus point and that was important for the players.
"Of course the match was not perfect and I got a bit annoyed but globally speaking I'm very happy."
France had comfortably won their three most recent encounters against the Canadians, but it was not until the final three minutes of the first half, with the score locked at 10-10, that they started to exert any control.
Parra slotted a hat-trick of kicks in those final minutes as referee Craig Joubert heavily penalised the Canadians.
Canada captain Pat Riordan said: "I'm so proud of the way we played. If nothing else we showed ourselves we can live with the top teams.
"The guys are heartbroken right now and I think that shows the expectations we have of ourselves."
France: Traille, Clerc, Marty, Mermoz, Rougerie, Trinh-Duc, Parra, Poux, Servat, Ducalcon, Pape, Millo-Chluski, Ouedraogo, Bonnaire, Picamoles.
Replacements: Medard for Rougerie (72), Yachvili for Trinh-Duc (69), Barcella for Poux (18), Guirado for Servat (53), Harinordoquy for Ouedraogo (75).
Not Used: Pierre, Estebanez.
Canada: Pritchard, Hearn, van der Merwe, Smith, P. Mackenzie, Monro, Fairhurst, Buydens, Riordan, Marshall, Sinclair, Cudmore, Kleeberger, O'Toole, Carpenter.
Replacements: Trainor for van der Merwe (63), Dala for Fairhurst (62), Hotson for Cudmore (60).
Not Used: Hamilton, Franklin, White, Hirayama.