Bulk Email Send Procedure

From Admin Wiki
Jump to navigation Jump to search

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

  1. Send one batch.
  2. Wait at least 24 hours.
  3. Run the weekly bounce script and remove every bounced or complaining address from the remaining batches.
  4. Check the SES reputation metrics page in the console.
  5. 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-2pct or ses-complaint-rate-0.1pct CloudWatch 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