EmailServiceConfiguration
What it is
Configuration models and loader logic for wiring an EmailService with an email adapter (built-in SMTP or a custom adapter).
Public API
-
EmailAdapterSMTPConfiguration(Pydantic model)- Purpose: Validate SMTP adapter settings.
- Fields (defaults):
host: str = "localhost"port: int = 1025username: str | None = Nonepassword: str | None = Noneuse_tls: bool = Falseuse_ssl: bool = Falsetimeout: int = 10
- Behavior: forbids unknown fields (
extra="forbid").
-
EmailAdapterConfiguration(inheritsGenericLoader)- Purpose: Select and instantiate an
IEmailAdapter. - Fields:
adapter: Literal["smtp", "custom"]config: dict | None = None
- Methods:
validate_adapter(self) -> EmailAdapterConfiguration(Pydantic@model_validator(mode="after"))- Ensures
configis present whenadapteris not"custom". - Validates
configagainstEmailAdapterSMTPConfigurationwhenadapter == "smtp".
- Ensures
load(self) -> IEmailAdapter"smtp": imports and returnsSMTPAdapter(**config)."custom": delegates toGenericLoader.load().- Otherwise: raises
ValueError("Unknown adapter: ...").
- Purpose: Select and instantiate an
-
EmailServiceConfiguration(Pydantic model)- Purpose: Build an
EmailServiceinstance. - Fields:
email_adapter: EmailAdapterConfiguration
- Methods:
load(self) -> EmailService: returnsEmailService(adapter=self.email_adapter.load()).
- Purpose: Build an
Configuration/Dependencies
- Depends on:
pydantic(BaseModel,ConfigDict,model_validator)naas_abi_core.engine.engine_configuration.EngineConfiguration_GenericLoader.GenericLoader(used for custom adapter loading)naas_abi_core.engine.engine_configuration.utils.PydanticModelValidator.pydantic_model_validator(used for SMTP config validation)naas_abi_core.services.email.EmailService.EmailServicenaas_abi_core.services.email.EmailPorts.IEmailAdapternaas_abi_core.services.email.adapters.secondary.SMTPAdapter.SMTPAdapter(imported only whenadapter == "smtp")
Usage
from naas_abi_core.engine.engine_configuration.EngineConfiguration_EmailService import (
EmailServiceConfiguration,
)
cfg = EmailServiceConfiguration(
email_adapter={
"adapter": "smtp",
"config": {
"host": "localhost",
"port": 1025,
"use_tls": False,
"use_ssl": False,
"timeout": 10,
},
}
)
email_service = cfg.load()
Caveats
- For
adapter="smtp",configis required and must matchEmailAdapterSMTPConfiguration; extra keys are rejected. - For any
adapterother than"custom",configmust be provided. "custom"adapter resolution is delegated toGenericLoader.load(); the required shape ofconfigdepends onGenericLoaderand the custom adapter implementation.