I know that in first look many users mark this question as duplicate, but after reading more than 10 question I did not get any satisfactory answer, almost all question has
Make sure all of the required headers are being set.
Check to see if there are any additional, optional headers that you should be setting.
Sending an HTML/multipart message with mismatched text/HTML sections is frowned upon by some filters.
Absolutely any mail that you send programmatically should have either a link or instructions on how to opt out. This is usually only enforced by human-curated blacklists and the abuse department at your ISP.
Make sure your SMTP server is not blacklisted or has a poor reputation.
Make sure your web server does not have a poor reputation. Some scanners include the reputation of every MTA in the chain.
Review the content of your messages before sending them. If anything in it could even roughly be construed as trying to sell something to someone, change it.
Sacrifice a small animal to the dark gods of email and hope against hope.
Check the headers of the messages marked as spam to see if the spam filtering system left any useful information about why it was blocked.
Ask the receiving server's admins why the message was blocked.
Accept that there is no, and never will be an "exact solution on this issue". Ever.