package db import "time" type Domain struct { ID int64 DomainName string IsActive bool CreatedAt time.Time VerificationToken string IsVerified bool VerifiedAt *time.Time // MFAExempt overrides [Auth] enforce_mailbox_mfa off for every mailbox under this // domain, regardless of that mailbox's own MFAExempt. MFAExempt bool } type Sender struct { ID int64 Email string PasswordHash string DomainID int64 CanSendAsDomain bool IsActive bool CreatedAt time.Time StoreMessageContent bool } // CanSendAs mirrors Sender.can_send_as in models.py. func (s Sender) CanSendAs(fromAddress string) bool { if equalFold(fromAddress, s.Email) { return true } if !s.CanSendAsDomain { return false } senderDomain := domainPart(s.Email) fromDomain := domainPart(fromAddress) return senderDomain != "" && senderDomain == fromDomain } type WhitelistedIP struct { ID int64 IPAddress string DomainID int64 IsActive bool CreatedAt time.Time StoreMessageContent bool } type EmailLog struct { ID int64 MessageID string Timestamp time.Time PeerIP string MailFrom string ToAddress string CcAddresses string BccAddresses string Subject string EmailHeaders string MessageBody string Status string DKIMSigned bool Username string CreatedAt time.Time } type EmailRecipientLog struct { ID int64 EmailLogID int64 Recipient string RecipientType string Status string ErrorCode string ErrorMessage string ServerResponse string } type AuthLog struct { ID int64 AuthType string Identifier string IPAddress string Success bool Message string CreatedAt time.Time } type DKIMKey struct { ID int64 DomainID int64 Selector string PrivateKey string PublicKey string IsActive bool CreatedAt time.Time ReplacedAt *time.Time } type CustomHeader struct { ID int64 DomainID int64 HeaderName string HeaderValue string IsActive bool CreatedAt time.Time } type EmailAttachment struct { ID int64 EmailLogID int64 Filename string ContentType string FilePath string Size int64 UploadedAt time.Time }