Mantém a imagem (logo / banner) da assinatura de e‑mail do Outlook de todos os usuários sempre atualizada apenas trocando um único arquivo em um compartilhamento de rede.
Este utilitário em .NET automatiza a atualização da imagem usada na assinatura padrão do Outlook (cliente desktop). Ele:
- Detecta a assinatura padrão registrada no Windows (varre múltiplas versões do Office).
- Localiza o arquivo HTML da assinatura em
%AppData%/Microsoft/Signatures. - Substitui o atributo
srcdo primeiro<img>pelo caminho UNC configurado. - Ajusta o
filelist.xml(quando existe) para garantir que referências à imagem (image001.jpg) apontem para o novo recurso. - Permite override de configuração via linha de comando (útil em scripts corporativos / GPO).
Ideal para cenários onde a equipe de marketing troca periodicamente um banner de campanha sem precisar distribuir manualmente novas assinaturas para todos os colaboradores.
| Componente | Responsabilidade |
|---|---|
Program |
Monta DI (injeção de dependências) e dispara o processo. |
ISignatureService / SignatureService |
Orquestra o fluxo completo de atualização. |
IOutlookSignatureProvider / OutlookSignatureRegistryProvider |
Lê do Registro do Windows qual é a assinatura padrão (procura em várias versões do Office). |
IHtmlSignatureConfigurator / HtmlSignatureConfigurator |
Carrega e modifica o arquivo .htm da assinatura (troca o src da imagem). |
IXmlSignatureConfigurator / XmlSignatureConfigurator |
Atualiza o filelist.xml dentro da pasta *_arquivos quando presente. |
appsettings.json |
Armazena a configuração SignatureSettings:NewImagePath. |
| Linha de comando | Pode sobrescrever qualquer chave de configuração (ex.: --SignatureSettings:NewImagePath=...). |
Fluxo simplificado:
[Registry] -> Nome da assinatura -> [%AppData%/Microsoft/Signatures]
|--> Atualiza assinatura.htm (img src)
|--> Atualiza *_arquivos/filelist.xml (HRef)
- Windows (necessário para acesso ao Registro e estrutura de assinaturas do Outlook).
- Outlook instalado e pelo menos uma assinatura criada.
- .NET SDK 9.0 ou superior (para compilar/rodar).
- Permissão de leitura no Registro do usuário (
HKCU). - Permissão de escrita em
%AppData%/Microsoft/Signatures. - Caminho UNC acessível para a imagem (ex.:
//servidor/marketing/assinatura/banner.jpg).
Arquivo appsettings.json padrão:
{
"SignatureSettings": {
"NewImagePath": "//127.0.0.1/outlook_files/novo_ass_email.jpg"
}
}Sobrescrever via linha de comando (exemplo):
dotnet run -- --SignatureSettings:NewImagePath=//fileserver/public/assinaturas/campanha_natal.jpgTambém é possível empacotar o binário e executar com um atalho de logon / GPO apontando o argumento desejado.
Clonar e executar:
git clone <url-do-repositorio>
cd AtualizaAssinaturaOutlook
dotnet build
dotnet runPublicar (para distribuir um executável self-contained — opcional):
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true --self-contained trueO executável ficará em: bin/Release/net9.0/win-x64/publish/.
| Componente | Suporte | Observação |
|---|---|---|
| Outlook 2016/365 (16.0) | ✅ | Alvo principal/testado |
| Outlook 2013 (15.0) | Pode funcionar; não testado recentemente | |
| Outlook 2010 ou anterior | ❌ | Fora de escopo |
| Windows (x64) | ✅ | Requer acesso ao Registro HKCU |
| Linux / macOS | ❌ | Depende de Outlook Windows e Registro |
- Varredura de versões do Office:
16.0,15.0,14.0,13.0,12.0. - Tenta chave
HKCU\Software\Microsoft\Office\<ver>\Common\MailSettings(NewSignature). - Fallback: percorre perfis em
...\Outlook\Profiles. - Localiza
AssinaturaNome.htm. - Atualiza
<img src="..."></img>. - Ajusta
filelist.xmlsubstituindo referências (quando existir). - Registra mensagens no console.
- Necessita que uma assinatura já exista (não cria estrutura do zero).
- Só altera o primeiro elemento
<img>encontrado (simplificação deliberada). - Não replica a imagem localmente; depende do caminho UNC estar acessível quando o Outlook renderiza.
- Não personaliza dados dinâmicos (nome/cargo) – foco apenas na imagem/bandeira.
filelist.xmlfora do padrão (namespaces diferentes) pode exigir ajustes futuros.
- Garanta que o caminho UNC use permissões somente leitura para usuários finais.
- Se houver autenticação por credenciais, monte previamente a sessão (script de logon).
- Para resiliência, pode-se futuramente copiar a imagem para
%AppData%e referenciar localmente (não implementado).
| Situação | Ação |
|---|---|
| Assinatura não encontrada | Processo é abortado com aviso. |
Arquivo .htm ausente |
Lança FileNotFoundException. |
filelist.xml inexistente |
Ignora silenciosamente a etapa XML. |
| Caminho da imagem vazio | Lança ArgumentException. |
| Ambiente não Windows | Lança PlatformNotSupportedException. |
- Verificar se a imagem aparece em novo e-mail no Outlook.
- Abrir o
.htmatualizado em um navegador para inspecionar o<img src>final. - Confirmar que o caminho UNC é alcançável pelo usuário (testar via Explorer).
- Publicar binário em pasta compartilhada.
- Criar Script PowerShell de logon que execute o utilitário com o parâmetro atualizado.
- Marketing altera somente o arquivo de imagem no compartilhamento.
- Usuários recebem a nova imagem no próximo logon / próxima execução programada (Task Scheduler).
Exemplo de tarefa agendada (PowerShell linha de comando simplificada):
Start-Process "C:\CorpTools\AtualizaAssinaturaOutlook.exe" --SignatureSettings:NewImagePath=//intranet/branding/banner_atual.jpg -WindowStyle HiddenUma abordagem via add-in (VSTO ou Web Add-in) adicionaria complexidade de deployment, atualização e possíveis prompts de segurança. Este utilitário atua só no sistema de arquivos e Registro de usuário, reduzindo atrito operacional e evitando dependência da API de composição do Outlook.
| Problema | Possível Causa | Solução |
|---|---|---|
| Assinatura não muda | Nome incorreto detectado ou cache do Outlook | Fechar e reabrir Outlook; validar nome em %AppData%/Microsoft/Signatures. |
| Imagem quebrada | Caminho UNC inacessível | Testar acesso via Explorer; checar permissões de rede. |
Não encontra <img> |
Template da assinatura sem imagem inicial | Inserir manualmente uma imagem inicial e rodar novamente. |
| XML não altera | Estrutura fora do padrão | Verificar conteúdo de filelist.xml e namespaces; adaptar código se necessário. |
| Erro de plataforma | Rodando fora do Windows | Executar somente em máquinas Windows com Outlook. |
- Suporte a múltiplas imagens / variantes por departamento.
- Template base de assinatura com placeholders (nome / cargo).
- Logs estruturados (Serilog) + nível configurável.
- Testes unitários (mocks de Registry e FileSystem).
- Validação de reachability da imagem antes de aplicar.
- Modo "dry-run" (mostra o que seria alterado).
- Geração opcional de assinatura alternativa para respostas.
- Faça um fork.
- Crie uma branch:
feat/minha-ideia. - Commit:
git commit -m "feat: adiciona X". - Abra um Pull Request descrevendo a motivação.
Sugestões de melhorias são bem-vindas.
Licenciado sob a MIT License.
Este projeto modifica arquivos de assinatura do usuário. Recomenda-se testar em ambiente de homologação antes de adoção ampla.
Abra uma issue com dúvidas ou ideias.