Do I have to publish spf for each of my smtp servers?
No. You should publish spf records for each and every domain you wish to protect from being used by spammers/virusses. If, for example, your domain is somedomain.tld and you furthermore have a subdomain www.somedomain.tld registered, you would publish for both somedomain.tld and www.subdomain.tld (the latter probably being set to “v=spf1 -all”). Note that you will have to publish for each and every A record, including any wildcard (*) or @ entries in your dns.