And calibre is using the email address as a relay, rather than sending the email itself and announcing the email address as the From: address?
Because what has solved the problem for everyone else, is making sure the server (Gmail/GMX/Hotmail/other) accepts the message, signs it to prove it came from them, and passes it on to Amazon.
Amazon wants to make sure emails from @domain.com actually have proof that they originated at @domain.com
Possibly, if calibre is not set up correctly...
Well, I assume your php script is also running on the personal server in question. As opposed to calibre which is presumably running on your local computer. (Feel free to correct me if you are actually using php on a local webserver.)
So it would have that mystical "internet trail" Amazon wants to see.