In PowerMTA v4.5 and later versions messages can now be scheduled for delivery. This may be very useful for instances when it takes a long time to build a campaign or if there is a need to have a campaign go out very quickly (e.g. flash sales); therefore, the campaign needs to be in the queue and ready for delivery at the start of the event. The feature allows for scheduling multiple delivery windows.
The use of scheduled delivery in PowerMTA requires the addition of an x-schedule header to the email prior to injection into PowerMTA.
The format of the header is:
x-schedule: <start time - 1>/<end time - 1>, <start time - 2>/<end time -2>
Here is an example:
x-schedule: 2016-12-29 17:01:00 / 2016-12-29 17:30:00, 2016-12-30 17:01:00 / 2016-12-30 17:30:00
In the above example message, delivery will be started at 5:01pm (PowerMTA server time) on Dec 29, 2016. The delivery attempts will stop at 5:30pm Dec 29, 2016. Delivery attempts will resume on Dec 30, 2016 at 5:01pm, and if not delivered will bounce out of queue on Dec 30, 2016 at 5:30pm.
As many delivery windows as needed are allowed, as long as the headers are folded so each line is not longer than 1000 characters.
The bounce-after does not apply to recipients scheduled for delivery with the x-schedule header. The schedule overrides the defined bounce-after and the message is bounced when there are no more schedules to try. In addition, if the queue is in retry mode when the messages are injected, the message delivery will not start at the window start time, but rather message delivery attempts will start when the queue comes out of retry mode.
For strict adherence to the schedule start time for large campaigns (e.g. flash sales), it is required to set the same jobID for all recipients of the given campaign. For best results, customers should ideally use the same schedule for all the recipients in a job, and not mix scheduled and unscheduled recipients in a job. Messages with the combination of Scheduled Delivery Control and a jobID will use the start time defined by the first message for the job injected into the queue.
For example, if the first recipient in the queue for jobID 123 has a start time of 12pm, and the second recipient injected into the queue for the same jobID has a start time of 11am, the 12pm start time will be used for both recipients. Likewise, if the first recipient in the queue for jobID 123 has a start time of 11am, and the second recipient injected into the queue for the same jobID has a start time of 12pm, the 11am start time will be used for both recipients.