mmm, you're right. What's better, accessing the mail_map or using the get_mail_class?
I would maybe go with get_mail_class (to benefit from the exception if the mail isn't registered), and maybe have the mail_map (and mail_form?) private.

Also, we could imagine have _MAIL_MAP and _FORM_MAP at the module level, to make sure we have one and only one throughout the entire program. Not sure.