email.onComplained
The recipient marked a message as spam — stop emailing them.
Fires when the recipient reports a message as spam through their mail provider’s feedback loop. Treat it as a hard unsubscribe: keep sending after a complaint and your sender reputation pays for it.
hooks: {
email: {
onComplained: async (event) => {
await prisma.suppression.upsert({
where: { email: event.recipient },
create: { email: event.recipient, reason: "complaint" },
update: {},
});
},
},
},
Payload
emailDriver?string
EmailKit driver id that produced this event, attached by the EmailKit client.
stringschemaVersion?"1"
Schema version for forward-compat
"1"eventId?string
Unique event identifier for dedupe
stringmessageIdstring
Unique message identifier from the email provider
stringproviderId?string
Provider-specific message identifier (in addition to messageId). This is the provider's internal ID for this message, separate from the RFC Message-ID. Useful for provider-specific operations or tracking.
stringrecipientstring
Email address of the recipient (always available)
stringstatus| "sent"
| "delivered"
| "opened"
| "clicked"
| "bounced"
| "complained"
| "rejected"
Event status/type
| "sent"
| "delivered"
| "opened"
| "clicked"
| "bounced"
| "complained"
| "rejected"timestampDate
Timestamp when the event occurred
Datefrom?EmailAddress
Sender email address (available in sent/accepted events)
EmailAddressto?EmailAddress[]
Recipient email addresses (available in sent/accepted events)
EmailAddress[]subject?string
Email subject (available in sent/accepted events)
stringtags?EmailTag[]
Custom metadata/tags associated with the email
EmailTag[]metadata?Record<string, string>
Custom metadata key-value pairs
Record<string, string>campaignId?string
Campaign or tracking identifier
stringrecipientDomain?string
Domain of the recipient (e.g., "gmail.com")
stringserver?string
Receiving server information
stringraw?unknown
Provider-specific raw data (for debugging or advanced use cases)
unknownfeedbackType?string
Type of complaint (spam, abuse, etc.)
stringfeedback?string
Feedback loop message
stringsource?string
Complaint source (ESP, ISP, etc.)
string