Feedback loops: complaints from mailbox providers
When someone presses Report spam on mail from one of your users, providers that run a feedback loop send a report back (in the standard ARF format, RFC 5965). Mailocity reads those reports and acts on them:
- the complaint is recorded against the mailbox that sent the message;
- that mailbox can no longer mail the person who complained (they asked for no more of it);
- when a mailbox's complaints pass the platform's limit, its mail to other servers is paused until the platform operator resumes it. Mail within Mailocity keeps working.
The mailbox and its team's admins get an email when sending pauses.
How a complaint finds its sender
Every message that leaves for another server carries a header, X-Mailocity-Sender, naming the sending mailbox with a signature only this platform can make, under the message's DKIM signature. Providers send the message (or its headers) back inside the report, so the header says who sent it. A report about a message without a valid header (one we did not send, or a forged one) counts for nothing, and only reports that pass DMARC are read, so nobody can pause a mailbox with made-up complaints. The same complaint reported twice is counted once.
Many providers hide who complained. The complaint still counts towards the rate, but nobody can be suppressed for it.
Setting it up (platform operator)
- Choose the address providers send reports to, on a domain this server receives mail for, such as
fbl@mailo.city. If it is also a mailbox, it gets a copy of each report as well. - In the admin panel, Reports → Feedback loop settings (or
corpsuite feedback set address=fbl@mailo.city), enter the address and choose when sending pauses: above how many complaints per thousand recipients over 30 days (3, which is 0.3%, is the line large providers draw; 0 never pauses), once a mailbox mailed at least how many recipients outside (so one complaint about a first message does not pause anyone). - Join each provider's program, giving that address:
| Provider | Program | What you need |
|---|---|---|
| Yahoo, AOL, AT&T | Yahoo Complaint Feedback Loop | A Yahoo account; the DKIM signing domain (each hosted domain, or the platform's) |
| Microsoft (Outlook.com, Hotmail) | JMRP and SNDS | The outbound IP addresses; JMRP sends reports, SNDS shows reputation |
| Comcast | Comcast Feedback Loop | The outbound IP addresses |
| Fastmail, Zoho, Rackspace, others | Through Validity's Universal Feedback Loop or each provider's postmaster page | Varies |
| Gmail | No per-message reports; the Postmaster Tools dashboard shows the complaint rate per domain | Each hosted domain verified there |
Programs that sign up by DKIM domain need each hosted domain registered; those that sign up by IP need the outbound addresses.
Seeing complaints
- Platform operator: Reports in the admin panel shows every mailbox with complaints in the last 30 days (complaints, recipients mailed outside, the rate per thousand, whether sending is paused) and the latest complaints.
corpsuite complaints. - Team admins: the same for their team, on the team's page in the domain admin panel.
corpsuite complaints team TEAM. - A user's row shows sending paused; More → Suppressions lists the recipients who complained.
Resuming
Find out why people complained first: a compromised password (change it, check the sign-in history and sessions), a mailing to people who never asked for it, or a newsletter without an unsubscribe link. Then the platform operator chooses More → Resume sending on the user (or corpsuite mailbox resume-sending USER). Team admins cannot resume it themselves.
A suppressed recipient can be let back only by the operator (More → Suppressions, corpsuite mailbox suppression remove USER RECIPIENT), for example when they ask to hear from the sender again.
API
GET|PATCH /v1/feedback-settings, GET /v1/complaints, GET /v1/tenants/{tenantId}/complaints, GET /v1/tenants/{tenantId}/accounts/{accountId}/suppressions, DELETE .../suppressions/{recipient}, DELETE .../sending-pause. See api/openapi.yaml.