Bulk Email Send Procedure
Procedure: one-time sends to lists that ACL did not collect
This procedure applies when we send email from the ACL Amazon SES account to a list of addresses that ACL did not collect through membership sign-up or renewal (e.g. a list from an affiliated journal, a workshop, or a partner organization). Follow every step. Do not skip steps because a send is urgent.
1. Decide who sends
If the list owner can send the message through their own system, ask them to do so. Use the ACL SES account only if the list owner cannot send it.
2. Prepare the list
Make sure the list is a plain text file with one address per line (e.g. incoming-list.txt).
3. Remove suppressed and bounced addresses
Export the SES account-level suppression list:
aws sesv2 list-suppressed-destinations \ --region us-east-1 \ --query 'SuppressedDestinationSummaries[].EmailAddress' \ --output text | tr '\t' '\n' > ses-suppressed.txt
Combine it with our internal bounce list, and remove all of these addresses from the incoming list:
tr 'A-Z' 'a-z' < incoming-list.txt | sort -u > incoming-sorted.txt cat ses-suppressed.txt acl-bounces.txt | tr 'A-Z' 'a-z' | sort -u > exclude.txt comm -23 incoming-sorted.txt exclude.txt > send-list.txt wc -l incoming-sorted.txt send-list.txt
Record the two counts from wc -l in the send log (step 7).
4. Split the list into batches
Each batch must contain no more than 1 address from send-list.txt for every 20 messages that we send to our member lists during the same period. This follows the AWS recommendation in "Never send to old addresses, but what if you have to?" (AWS Messaging Blog).
split -l 200 send-list.txt batch-
Change 200 to a batch size that obeys the 1-in-20 rule for our current sending volume.
5. Send one batch at a time
- Send one batch.
- Wait at least 24 hours.
- Run the weekly bounce script and remove every bounced or complaining address from the remaining batches.
- Check the SES reputation metrics page in the console.
- Send the next batch only if the bounce rate is below 2% and the complaint rate is below 0.1%.
6. Stop conditions
Stop the send immediately if one of these occurs:
- The
ses-bounce-rate-2pctorses-complaint-rate-0.1pctCloudWatch alarm sends an alert. - More than 5% of the addresses in one batch hard bounce.
Do not continue until the CIO reviews the remaining list. If the list has too many bad addresses, return it to the list owner and ask them to send the remaining messages.
7. Log the send
For each one-time send, record these items on this page:
- Date, purpose, and list owner
- Number of addresses received and number sent after filtering
- Number of batches
- Number of hard bounces and complaints