iptables-restore failing to load my rules

It's because that file is not in the expected format. You should add your rules manually the first time, then use iptables-save to get a file in the expected format.

However it's quite simple to "mimic" the format that iptables-restore expects.

Add a line with just *filter at the top of the file.

Add a line with just COMMIT at the bottom.

So you end up looking like this:

*filter    

# Allows SMTP access
-A INPUT -p tcp --dport 25 -j ACCEPT

# Allows pop and pops connections 
-A INPUT -p tcp --dport 110 -j ACCEPT
-A INPUT -p tcp --dport 995 -j ACCEPT

# Allows imap and imaps connections 
-A INPUT -p tcp --dport 143 -j ACCEPT
-A INPUT -p tcp --dport 993 -j ACCEPT

COMMIT

There's a few other snippets it should have too but that should make it work. After doing this, you can use iptables-save >filename to get the fully correctly formatted save file into filename.

Note that if you do use iptables-save your comments in the file will be lost (it will replace the entire file with its own similar formatted one).