Yes, it is advisable to send a separate message to each user. Also it is better to smear sent in time. Usually create a send queue(e.g. in a database) and eventually devastate it, sending letters. There are also ready-made solutions like phplist
. And, you can use external services, mailings, for example WebAsyst
PS neither phplist nor WebAsyst I personally have not used, so feedback on their work can not give. Personally, I always implement this functionality via a queue in the database.