Logstash syslog message, doesn't choose right if statement

Your messages start with <, so they are never going to match that pattern. Thus they will always match the first if.

I would suggest using dissect for the fixed prefix, then use grok for the rest of the line. See here for an example.

Note that if you do not set the overwrite option and your output field matches an existing field (e.g. [message]) then you will end up with that field being an array.

Note also that there are standard grok patterns that can be used to pick out an email address, and that recognizing an email address is a ridiculously complex problem if you need to support international addresses.