Mail being sent is a tied to player saving which happens on zone changes and logging among other things. I believe this is for server performance reasons.
As for the request read, is the RequestReadMail() call just failing to generate an EVENT_MAIL_READABLE? That function has three cases that don't generate an event:
- Player is not in the mail interaction
- There is no inbox entry for that mail id
- The mail has already been requested
It could also fail on no server response or if the server response is for a mail that is not part of the inbox.
You can use GetInteractionType for the mail interaction check. The others ones you can't presently know about. I can add a result as a return from the function to determine if the request was sent to the server.