{"record":{"id":"db5340b8bd88b9b2","repo":"quarkusio/quarkus","slug":"must-provide-the-signing-domain-identifier-sdid","errorCode":null,"errorMessage":"Must provide the Signing Domain Identifier (sdid).","messagePattern":"Must provide the Signing Domain Identifier \\(sdid\\)\\.","errorType":"exception","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/mailer/runtime/src/main/java/io/quarkus/mailer/runtime/Mailers.java","lineNumber":173,"sourceCode":"        }\n        // Do not create a shared instance, as we want separated connection pool for each SMTP servers.\n        return clientBuilder.build();\n    }\n\n    private CredentialsProvider findCredentialsProvider(String mailerName, String beanName) {\n        try {\n            return CredentialsProviderFinder.find(beanName);\n        } catch (Exception e) {\n            throw new ConfigurationException(\"Unable to find credentials provider for the mailer \" + mailerName + \".\", e);\n        }\n    }\n\n    private io.vertx.ext.mail.DKIMSignOptions toVertxDkimSignOptions(DkimSignOptionsConfig optionsConfig) {\n        DKIMSignOptions vertxDkimOptions = new io.vertx.ext.mail.DKIMSignOptions();\n\n        String sdid = optionsConfig.sdid()\n                .orElseThrow(() -> {\n                    throw new ConfigurationException(\"Must provide the Signing Domain Identifier (sdid).\");\n                });\n        vertxDkimOptions.setSdid(sdid);\n\n        String selector = optionsConfig.selector()\n                .orElseThrow(() -> {\n                    throw new ConfigurationException(\"Must provide the selector.\");\n                });\n        vertxDkimOptions.setSelector(selector);\n\n        if (optionsConfig.auid().isPresent()) {\n            vertxDkimOptions.setAuid(optionsConfig.auid().get());\n        }\n\n        if (optionsConfig.bodyLimit().isPresent()) {\n            int bodyLimit = optionsConfig.bodyLimit().getAsInt();\n            vertxDkimOptions.setBodyLimit(bodyLimit);\n        }\n","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/mailer/runtime/src/main/java/io/quarkus/mailer/runtime/Mailers.java#L155-L191","documentation":"When DKIM signing is configured for a mailer, Mailers converts DkimSignOptionsConfig into Vert.x DKIMSignOptions. The Signing Domain Identifier (sdid) is mandatory for DKIM; if config lacks it, toVertxDkimSignOptions throws this ConfigurationException during mailer configuration.","triggerScenarios":"quarkus.mailer.dkim.sdid (or per-mailer quarkus.mailer.<name>.dkim.sdid) is absent while any other dkim.* property is set, triggering DKIM setup at mailer config build time.","commonSituations":"Configuring dkim.selector, dkim.private-key, etc. but forgetting sdid; YAML/properties nesting mistake putting sdid outside the dkim block; copying DKIM config between named mailers and dropping the sdid line.","solutions":["Add the signing domain: quarkus.mailer.dkim.sdid=example.com (the domain that published the DKIM public key).","If DKIM is not intended, remove all quarkus.mailer.dkim.* properties so DKIM setup is skipped entirely.","Check config file indentation/structure so sdid really sits inside the dkim map."],"exampleFix":"// before\nquarkus.mailer.dkim.selector=s1\nquarkus.mailer.dkim.private-key=classpath:dkim.pem\n\n// after\nquarkus.mailer.dkim.sdid=example.com\nquarkus.mailer.dkim.selector=s1\nquarkus.mailer.dkim.private-key=classpath:dkim.pem","handlingStrategy":"validation","validationCode":"if (ConfigProvider.getConfig().getOptionalValue(\"quarkus.mailer.dkim.selector\", String.class).isPresent()\n        && ConfigProvider.getConfig().getOptionalValue(\"quarkus.mailer.dkim.sdid\", String.class).isEmpty()) {\n    throw new IllegalStateException(\"dkim configured but quarkus.mailer.dkim.sdid is missing\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    mailer.send(mail).await().indefinitely();\n} catch (ConfigurationException e) {\n    if (e.getMessage().contains(\"sdid\")) {\n        LOG.error(\"Set quarkus.mailer.dkim.sdid to your signing domain\", e);\n    }\n    throw e;\n}","preventionTips":["Always set dkim.sdid and dkim.selector together as a pair","Validate mailer config in a startup observer for every profile","Keep DKIM settings in one shared config fragment to avoid partial copies"],"tags":["quarkus","mailer","dkim","configuration","startup"],"backgroundTag":"missing-required-config-property","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}