You may use other types of email servers like postfix, sendmail or exim. They may not be as efficient as qmail but they can be able to send many emails at a good rate. PHP just sends messages to the local queue of those programs. Then those programs handle their queue as soon as possible.
There is a sub-class specialized in using sendmail. Other mail server programs try to emulate sendmail, so they are compatible. Just use that sub-class in your PHP application to deliver messages to the local queue using PHP.
If you do not send spam, you should not be concerned with IP reputation. You just need to follow good practices to subscribe and unsubscribe users to those mailings.
You can check your IP or domain reputation in sites like SenderScore:
senderscore.org/
We run qmail mail server in the same server but we use several IP addresses to send regular newsletters and important email messages.
For critical messages, like those related with e-commerce notifications, we use a single Google GSuite account. It just costs $5 / month per account. We only use one account so far. We use a different domain for those critical messages. It does not guarantee that the user will always see the messages because that depends on how messages are delivered by the destination mail system, like Gmail or others.
In our newsletter mailing system we queue messages on database. Then a separate background process delivers those messages processing queued messages one by one.
We do that because some messages are sent to many users but each user receives a personalized message. So we only queue message templates and other details.
The background mailing process starts from a cron job and then it processes the template for each user that is retrieved from the database according to the type of newsletter.
The test_personalized_bulk_mail.php does more or less what I described above except that it is very simplistic as it uses arrays to queue messages.
We have a private solution that uses a process that is more efficient in terms memory. As you may be aware, PHP has memory usage limits, so you cannot keep large arrays in memory.
To handle bounces we make the Return-Path header option be set to virtual email address that is associated to a mailbox that you can access using a POP3 class that I also developed.
phpclasses.org/package/2-PHP-Access
...
A separate PHP script polls that POP3 mailbox and parses the email to extract the bouncing address using another class that I also developed.
phpclasses.org/package/10079-PHP-Pa
...
Once it extracts the bouncing email address the script that handles those bounces will flag the email address as bouncing, so no more newsletters are delivered.
You can try implementing all this by yourself, or if you prefer we can develop a custom solution for you. Just let me know if you are interested so we can give you a quote in time and money that it would cost. If you agree, then we can put it in contract and start the work.