Well the RDF tables can just be accessed using SQL statements. I have found through setting up and using Stateman that the SQL piece isn't all that difficult and can be pretty useful. Chapter 3 of the Command and Function reference has more information on how to use SQL to access the tables. The CBR messages that we processed are broken down into 3 tables. One for the main message itself, one for the severity code and one for the action code. The main table then links to the severity code and action code. When the message rule fires it breaks down the message and determines what the message ID is and any other key pieces of information to identify it in the main table. Then it grabs the severity and action codes that are associated with it and grabs the information from the other two tables. Once all the information is gathered an e-mail is created and sent using either SMTP or JES2MAIL. This method works really well if you have multiple message ID's that you want to process with one rule or a single message ID that has many different forms of messages.
A solution to your MLWTO issue is to use the MSG.ENDLN AOF variable provided in MSG rules. The message rule is going to fire on each line of the MLWTO so each time it fires you store the message text in a global variable and use logic to check if it is an end line. If it is an end line then you can call a REXX and pass it the global variable stem. The REXX can then do whatever processing you need to do. I would suggest a temporary global variable of course and I would probably clean it up at the end of the REXX if it isn't need to be kept.