We are currently experiencing some issues with transactional emails.
Due to an increased complaint rate (people marking our emails as spam) we are being put in the naughty corner by our provider.
Below is what I wrote to them:
Dear AWS team,
Thank you for reaching out. We take email deliverability and sender reputation seriously and so we are glad you have brought this to our attention.
What emails to we send
FreeSewing (freesewing.eu) is an open-source platform for sewing patterns. We send two types of emails:
- Purely transactional emails — primarily sign-up links for new accounts, sign-in links using a passwordless authentication flow, and the occasional password reset. We do not send any promotional emails
- Newsletter - We send a newsletter once every 3 months to subscribers. This is of course opt-in and includes an unsubscribe link
We have setup two different configuration sets for this purpose.
Given that the increased complaint rate is a recent issue, and that our latest newsletter dates from the 1st of January 2026, we can exclusively focus on transactional email here.
What caused the increased complaint rate?
Looking at the last 3 months of historic data, we’ve had a consistently low complaint rate until around the start of March - more or less a week ago - when the complaint rate started rising.
The only change on our side that coincides with that timing is that last weekend we migrated our backend code into a container. But I cannot for the life of me imagine how that would have an impact.
Apart from that, we’ve seen a surge of new user accounts, but that also long predates the last week. The only thing that is fairly recent is that we’ve seen a surge of Chinese users signing up, after getting some mentions on Chinese social media.
The most straight-forward explanation is people signing up email addresses that do not belong to them, whether by accident, or for some adversarial purpose that eludes me at this time.
To futher investigate, we would like to request a sample of the email addresses that generated complaints, as suggested in your notification. This would help us confirm the root cause and refine our response.
What changes have we made?
In the mean time, we have taken the following steps:
- Account-level suppression list: Already enabled. Any address that bounces or complains is automatically suppressed from future sends.
- DMARC: We have added a DMARC record (p=none with aggregate and forensic reporting) to our domain. This was previously missing and is now in place.
- Signup flow rate limiting: We have added rate limiting to our backend systems for all endpoints
- Email content: Our sign-in emails already include a “Why did I get this?” link and a physical address. We are considering how to further rephrase the content for recipients who did not request the email, directing them to ignore or delete it rather than marking it as spam.
Furthermore, we have embarked on a mission to increase observability of our backend systems so we can more accurately detect abuse or problematic behaviour.
As an open source project that has seen enourmous growth in the last 6 months, we are admittedly somewhat overwhelmed by our own popularity here, but we’re working on it.
How do these changes prevent recurrence?
We are not sending SPAM. We never have and never will.
We also have a track record of having a good reputation. What we’re dealing with now is an unforeseen and unexpected increase in our complaint rate.
We have that by gaining insight in the type of complaints, we can take steps to resolve the root cause.
Unfortunately, we can not simply promise you that from now on we’ll be good and stop sending spam, because we never did that to begin with.
As such, we trust that we will continue to rely on SES for email delivery while we work to get back to our historic complaint rate.
Please do let us know if you need any further information, and we would appreciate the complaint sample at your earliest convenience.
Kind regards,
Joost De Cock
FreeSewing Maintainer
We hope to resolve this matter ASAP, in the meanwhile, please forgive us for the inconvenience.