Event -> Title When
Title -> <anything>
When -> TimeSpecifier When
TimeSpecifier -> "at" Time
TimeSpecifier -> "in" RelativeTime
TimeSpecifier -> "on" Date
...
Then you use semantics stuff to get the parser to return some expression that you can use, say a Python call: event(title=<title>, at=<time>, on=<date>).
My overall suggestion would be to go with that (you could even tell users to press the "forward" button then replace "fw" with one of three commands). Then you can go with my suggestion of normalising caps, punctuation and even stemming to the first few letters to as to make it as forgiving as possible. e.g., FOL would even match a typo like Fololw-up ;-)
That way, it could expect all subject lines in the form:
with date being optional perhaps. A standard regex or even just a split() would be fine here. If there's an error at any point, a standard help bounce would be good (think the --help text you get when you misuse a UNIX command).
I really don't think it's unreasonable to expect users to get the command bit right, so the problem really is reduced to getting the date bit parsed correctly for which I've seen two suggestions here already.
p.s. One possible future thing could be to make extensions for things like Thunderbird that actually gives a "Todo", "Remind" and "Follow-up" buttons alongside the "Reply" and "Forward" buttons ;-)