Hi,
I remember you asking something about programming exits just few weeks ago, and I need to give you the same answer: Forget the programming exit. First of all, from my point of view, they are hardly never required. They just makes simple things more difficult. This is especially true, if you are a WF beginner. Programming exists are not a "basic" building block of a workflow. It is better if you forget that they even exists, and return to them once you have build at least few workflows.
To your question: Just create a method & task that gets the data that you need in the email body. Use this task and create a new activity step before your email sending step. Now you have the data in the workflow container, and you can use them in your email sending step.
Your step (or is it task?) keeps asking terminating event: You most probably need to change the task settings in PFTC. Choose the "synchronous object method" and "background processing". This way it does not need any terminating events and it gets executed automatically in the background. (But don't use the programming exit - just use the task for getting the data for the email.)
Also, please follow Mike's guidance. It's better to learn the basics with some simple tutorial. Also, if you can take a look into some existing workflow template that is in use in your system, try to study it (=the template AND the workflow log).
Regards,
Karri