Hey Guys,
It looks like program messages are working pretty much as intended. Yes turning off messaging in the advanced features tab does stop them sending emails. That is because they are treated as tasks/alerts which use the messaging system, it's not ideal and it's definitely not clear so I'll get a warning added there.
As for how program messaging works, I'll go over a few:
Enrolment:
So you enrol an individual or audience with a set completion. When you click save Totara will immediately send enrolment messages to everyone, or generate exceptions for them. The fun example however is a dynamic audience with a completion based off of first log in. So you have an audience of 5 users, 2 of which have logged in before, 3 of which have not. You click save and the 2 who have should get a welcome message, the three who havent are 'future enrolments' and aren't actually added untill they have logged in once and the programs hourly cron runs, but the message won't be sent till the daily cron runs. A sixth person who has enrolled before qualifies for this audience, they are also not enrolled untill the next programs daily cron run.
Unenrolment:
This should always occur when you click save.
Due:
Say you have given them 2 weeks to do the program, and set this to send when they have 1 week remaining. This will send on the programs daily cron that runs after the condition is met. So this could potentially lead to it being sent with 6.01 days remaining (worst case).
Overdue:
The same goes for overdue, imagining the same scenario with the message set to send when 1 week overdue it is possible in the worst case for it to send 7.99 days after the program is due.
If you want to make these send more often you can move the messaging function from daily to hourly in totara/program/cron.php ~line 124 "Program_cron_send_messages();"
Hope that helps, let me know if I've missed something or been unclear.
David