SMTP has built in load balancing using DNS, in a round robin fashion. This works quite well for most purposes. If that's not sufficient for you, you will have to create your own custom set up which is not an easy task. So unless you really need it I'd stick with what is available and widely used.
I am assuming your email servers (MTA) are on the same domain (say example.org), in that case create an MX record for each separate MTA, with the same priority. Using same priority ensures each server is tried in a round robin fashion, otherwise the one with the highest priority (lower number) is always tried first (in the case of MTAs that aren't broken, spammers love to hit the server with lowest priority thinking it may be a lower spec "fallback" server):
example.org. IN MX 10 mx1.example.org.
example.org. IN MX 10 mx2.example.org.
example.org. IN MX 10 mx3.example.org.
example.org. IN MX 10 mx4.example.org.
Of course make sure each mx* can be resolved:
example.org. IN A 192.168.2.1
mx1 IN A 192.168.2.2
mx2 IN A 192.168.2.3
mx3 IN A 192.168.2.4
mx4 IN A 192.168.2.5
If you want to also use DNS to "load balance" MTAs for your users to send out email you can configure DNS in this way. Let's call your outgoing server smtp.example.org and tell your users to submit email to it. I put "load balance" in quotes because this won't avoid connecting to a server that's down the way MTAs deal with it using MX records. In this case the user has to retry one or more times to hit a working server.
smtp IN A 192.168.2.2
smtp IN A 192.168.2.3
smtp IN A 192.168.2.4
smtp IN A 192.168.2.5
This is a crude solution because depending on the user's system and setup they may keep trying to hit just one IP. But at least it's not "down for everyone" and you can always direct them to a working server. In addition if a server is permanently down you can remove it from the DNS and once cached that should prevent your users from hitting it. In this case haproxy may not be such a bad solution.