it is not possible to do this with standard EE function. So you need make a new add-on - module with action which you can run by cron. Every time when cron will be run, you can get unread PM for last 24 using next query:
SELECT md.message_id as message_id, md.message_date as message_date, md.message_subject as subject, md.message_body as message, mc.recipient_id as recipient_id, m.email as email, m.screen_name as name
FROM exp_message_data as md
LEFT JOIN exp_message_copies as mc ON md.message_id = mc.message_id
LEFT JOIN exp_members AS m ON m.member_id = mc.recipient_id
WHERE mc.message_read = 'n' AND md.message_date > UNIX_TIMESTAMP(NOW() - INTERVAL 24 HOUR)
This query give us enough info to send message. After that send email by ee email function or send it to Mandrill/Postmark/SendGrid/PostageApp(you can also just use plugins like Escort to route emails to third-party transactional email services).
Approximate time of developing - 2-3h.
p.s. you also need to disable option ("Notify me via email when someone sends me a private message") in Member Profile Templates > Email Preferences Form or replace it with select Send email immediately / Once per 24h.