Yes! hook_cron is a good approach. Of course, you also will have to set up the server cron, which will trigger the Drupal one. Or at least that's the cleanest solution.
Here you can read how to configure cron.
If you don't use an OS cron to trigger, the following use case may appear.
You set the Drupal cron to run each day at 00:00.
But nobody is browsing the site at 00:00. The next user will come at 6:54 in the morning. By the request the cron will know: oh.. it's 6:54, I should have run the cron at 00:00, so I will run it now.
If the subscribed modules have heavy processes on going, the request for the user could be slow. There is your module, which sending emails (not a big deal) but also the Drupal garbage collector (temporary files, abounded fields etc..) may run by this time.
If this is the first extra cron hook of your site: don't mind it. It won't change much.