A foto de perfil nao viaja: nem o Gmail nem o Outlook leem uma imagem por utilizador do servidor de quem envia, e nao existe protocolo que o permita. O avatar que esses mostram vem dos contactos de quem recebe ou da conta Google ou Microsoft do remetente. O que eles leem e BIMI, que e por dominio. Fica implementado: validacao, alojamento e o registo. O validador reporta todas as violacoes de uma vez, e nao a primeira. Um receptor que recusa a marca nao explica nada -- simplesmente nao desenha -- por isso descobrir as regras uma viagem de cada vez seria a pior maneira possivel de aprender este formato. Sao verificados o baseProfile e a versao que os receptores procuram, o viewBox quadrado (uma marca nao quadrada e cortada de forma diferente por cada cliente), exactamente um title, e a ausencia de tudo o que seja activo ou externo: script, handlers de evento, links, imagens rasterizadas, animacoes e referencias para fora do documento. O registo so e publicado quando ha mesmo uma marca guardada. Um registo que aponta para um logotipo inexistente e pior do que nenhum, porque o receptor para de procurar assim que encontra um. O logotipo e servido aberto, porque quem o vai buscar sao os fornecedores de correio a avaliar uma mensagem e esses nunca terao sessao aqui. Fica escrito no README que o Gmail e o Outlook so desenham a marca com um VMC, e o painel avisa quando nao ha nenhum configurado. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
16 lines
655 B
SQL
16 lines
655 B
SQL
-- The BIMI logo a domain publishes, and the certificate that vouches for it.
|
|
--
|
|
-- One per domain, not per mailbox: BIMI is a brand indicator, and every
|
|
-- message from the domain carries the same mark.
|
|
--
|
|
-- The VMC is a URL rather than a file because it is issued by an external
|
|
-- authority and renewed on its own schedule; Gmail and Outlook only render the
|
|
-- logo when the record points at one.
|
|
CREATE TABLE IF NOT EXISTS domain_bimi (
|
|
domain_id UUID PRIMARY KEY REFERENCES domains(id) ON DELETE CASCADE,
|
|
svg BYTEA NOT NULL,
|
|
etag CHAR(64) NOT NULL,
|
|
vmc_url TEXT,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|