It's embarrassingly primitive, we export all existing subscribers into csv from our CRM, I load it into pandas dataframe and send using simple for loop + gmail api calls. I run it with "caffeinate" terminal command and use time.sleep() to time the sending for the morning as I tend to wake up pretty late. Other times when I'm travelling I just push updated csv into google cloud vm and let it run there.
A more advanced setup would be sqlite + keeping timestamps, message and thread ids for future work e.g. analytics on responses.
A more advanced setup would be sqlite + keeping timestamps, message and thread ids for future work e.g. analytics on responses.
You can track opens using GA tracking pixel.