ttadej
Thank you very much for the suggestion.
Initially we were hoping to use message's teaser where available, but since it does not get exposed, the rest were attempts to work around this limitation.
About indexOf method
What I understood from Velocity documentation, it's able to run basic Java methods. At least in theory, it should be possible to find the index using indexOf method on specific string.
For example if we have the string like this (should be passed from post to service that makes and send emails):
<p>Another test</p>
Then, when we run indexOf method on it like:
.indexOf("test")
.indexOf("</p>")
We get index of 11 for string "test", that's correct. It starts at 11th position in our example string.
When we look for closing </p> tag, it returns not found (-1). The same happens if we look for opening <p> tag.
About max-height
It might work, but unfortunately it's not reliable as it still might cut part of the post creating bad user experience.