The model is very simple. Each list has one administrator and multiple members. The administrator need to register an account and supply a password. Normal members don't need accounts.

  1. You request to create a moderator account, with an email address and self-set password. The API will send a verification mail to the address with a random verification token. The account is now in 'pending' state.

  2. You verify your moderator account with the address and the token received. The state of the account changes from 'pending' to 'verified'.

  3. You create a mailing list using a verified moderator account email address and password. The account's email address becomes 'administrator' of the list. The list is created and functional immediately.

  4. You can check basic list info and subscribers.

  5. You can subscribe to a created list by specifying the list name and a email address. The email address used in this process does not need to be a verified moderator account, which is only required in the create-list process. The API will send a verification mail to the address with a random token. The membership is now in 'pending' state.

  6. You can then verify the subscription by supplying list name, email address and the random token received. The membership state will change from 'pending' to 'verified'.

  7. You can unsubscribe an email address from a list. List administrator cannot be unsubscribed.

  8. You can post a new message to a list, using a list member's address. The message will be sent to all list members, including the administrator.

  9. You can also send an email to <<list_name>>@listservecowboy.com, where list_name is the name of a created list. The message will be handed out to all list members too.

Messages received by SES in step 9 above will go through a Lambda recipient checker, and store the message to an S3 bucket.

The bucket will detect uploads, check the sender address, and call the message poster (same as in step 8) to store message to a second bucket.

The second bucket will detect uploads and run the Lambda message dispatcher, which generates one message for each list member, and put them to a third bucket.

The third bucket will detect uploads and call the Lambda message sender for each recipient, which use SES to do its job.

Logs are visible in CloudWatch Logs, for each Lambda function used. API Gateway logging has not been enabled.