Here is a precise answer based on the documentation.
Use rcpt_domain in your expressions - you have it right. Both aggregateSendFrequency and failureSendFrequency expose rcpt_domain (via MtaRcptToVariable and MtaRcptDomainVariable respectively), which is exactly the variable to match against your own domain.
Here is how to configure each field to suppress reporting when the report recipient is your own domain:
Aggregate - aggregateSendFrequency (disables sending):
{
"if": "rcpt_domain = 'yourdomain.example'",
"then": "disable",
"else": "daily"
}
The valid values are hourly, daily, weekly, or disable to disable reporting entirely.
Failure - failureSendFrequency (sets rate to effectively never send):
This field controls a rate limit (e.g. [1, 1d] means 1 per day). To suppress it, use disable if supported, or you can set an extremely low rate. However, the cleaner option for aggregate is using disable. For failure reports, the docs indicate the accepted format is a rate like [1, 1d] - there is no disable keyword documented for this field specifically.
A practical approach for the failure report side would be to set the rate to something like [0, 1d] (0 per day) for your own domain - but this is not explicitly confirmed in the docs. For the most reliable suppression, disable on aggregateSendFrequency is clearly documented.
Both fields are configured under Settings > MTA > Reports > DMARC in the WebUI.
Key point: For aggregateSendFrequency, rcpt_domain is available and disable is a documented value. For failureSendFrequency, the same rcpt_domain variable is available but only rate values like [1, 1d] are shown in the docs - the behavior of disable there is not confirmed.
Reference docs: DmarcReportSettings and MtaRcptToVariable.
This is an automated reply from the Stalwart Help Bot. Other community members may follow up if this answer is incomplete or wrong.