package checker import ( "time" sdk "git.happydns.org/checker-sdk-go/checker" ) // Version is reported in CheckerDefinition.Version. Overridden at build time // by main / plugin. var Version = "built-in" func (p *smtpProvider) Definition() *sdk.CheckerDefinition { return &sdk.CheckerDefinition{ ID: "smtp", Name: "Inbound SMTP (MX posture)", Version: Version, Availability: sdk.CheckerAvailability{ ApplyToService: true, LimitToServices: []string{"svcs.MXs"}, }, HasHTMLReport: true, ObservationKeys: []sdk.ObservationKey{ObservationKeySMTP}, Options: sdk.CheckerOptionsDocumentation{ RunOpts: []sdk.CheckerOptionDocumentation{ { Id: "domain", Type: "string", Label: "Domain", AutoFill: sdk.AutoFillDomainName, Required: true, }, { Id: "timeout", Type: "number", Label: "Per-endpoint timeout (seconds)", Default: 12, }, { Id: "helo_name", Type: "string", Label: "EHLO hostname", Placeholder: "mx-checker.happydomain.org", Default: "mx-checker.happydomain.org", Description: "The hostname announced in EHLO/HELO. Use a name that resolves and has a valid PTR; some large providers tarpit or reject probes from unresolvable EHLO names.", }, { Id: "test_null_sender", Type: "bool", Label: "Probe null sender (MAIL FROM:<>)", Default: true, Description: "RFC 5321 mandates that bounces with an empty envelope sender are accepted; servers that reject <> cannot receive DSNs.", }, { Id: "test_postmaster", Type: "bool", Label: "Probe RCPT TO:", Default: true, Description: "RFC 5321 ยง 4.5.1 requires every host to accept mail for . The probe stops at RCPT, no DATA is transmitted.", }, { Id: "test_open_relay", Type: "bool", Label: "Probe open-relay posture", Default: true, Description: "Attempts MAIL FROM: RCPT TO:. A 2xx on a recipient outside the tested domain indicates an open relay. The probe stops at RCPT; no DATA is transmitted.", }, { Id: "test_probe_address", Type: "string", Label: "Open-relay probe recipient", Placeholder: "postmaster@example.com", Default: "postmaster@example.com", Description: "Recipient used for the open-relay probe. Must be a mailbox outside the tested domain.", }, }, }, Rules: Rules(), Interval: &sdk.CheckIntervalSpec{ Min: 5 * time.Minute, Max: 7 * 24 * time.Hour, Default: 6 * time.Hour, }, } }