I know for a fact that it is possible to render the email context without sending it, using the
Messaging class' method
renderEmailTemplate. This is great for getting the message content rendered, but I'm talking about the message's subject only, not its content.
Use case is: create a case, and with it send an email to the customer (that way the email sent already has a thread Id, and Salesforce can act as an email server*). Customer wants the Case Subject field filled with the same string which is sent in the email template (tricky part here is that the subject can vary, since it is using a visualforce template).
Since I'll be using Apex anyway, I might just ask: would it be easier to create a piece of code on the case's trigger to fill this field?
* Yes, I know this isn't what cases are for.