Your clients should set up SPF information to allow your mail server to officially send on their domain's behalf. It's really easy: they add a DNS record to their domain that identifies your mail server and that's it. You don't need to do anything on your side, other than maybe write some documentation or a how-to about it. When emails are received by knowledgeable servers, they examine the SPF records on the domain the email claims to be from to decide whether the email is more trustworthy.

Even better would be using SPF and DKIM, but DKIM is more complicated: they add a more complex DNS record than SPF's, and you write code to support it (because it involves adding header to the email). At that point you should switch to an emailing library rather than using mail() directly.

Besides those, make sure your emails contain all the headers that a good email should: sender, paths, dates, metadata... I don't know of a list you could look at but I think you got the major ones already. (Could look at an email sent from Gmail or something to see what they include.)