A administração da caixa de correio toma a direita, e três pontos finais recebem uma sessão
O MailboxController não tinha qualquer direito. GESTÃO EMAIL ACCOUNTS existiu apenas como um checkDiretamente no navegador e View EMAIL ACCOUNTS foi referenciad...
Cada ponto de contacto toma o verbo que o nomeia
ContactRestController verificou cuidadosamente a propriedade — orgOf, userOf, assevereBookIsMine, assertGroupIsMine, e 404 em vez de 403 para que o id de outra ...
Colocar uma chamada de volta em um calendário que o membro pode realmente ver
As chamadas não estavam a chegar ao calendário. Este serviço escolheu o alvo calendário por conta — findPrimaryByUser — e um usuário é global enquanto um membro...
Parar envelopes reivindicando uma resposta de consentimento ninguém pediu
remoteImagesAllowed foi um booleano primitivo, e apenas os três terminais que obter uma mensagem inteira sempre atribui-la. A listagem da pasta não — respondend...
Fazer lembretes de eventos notificar alguém
Três falhas, um sintoma. Os membros relataram que as notificações de calendário não trabalho, e todas as três razões estavam deste lado. Lembranças nunca foram...
Grave todas as três bandeiras do IMAP, e diga por que o índice ainda não pode servir uma lista
A migração foi executada, então is respondered existe e SearchIndexService agora escreve é ao lado de is read e is starred. O índice registou dois dos três band...
Não ler ou escrever é respondido antes de sua coluna existir
Segue a mudança bibliotecária compartilhada desmapeando o campo. Nada no destacamento O caminho agora toca uma coluna que o KamoInitializer ainda não criou. A ...
Pare de vazar uma conexão IMAP IDLE em cada reconexão do navegador
Interromper o tópico IDLE não pode terminar um IDLE: está estacionado num bloqueio socket lido que só vê a bandeira uma vez que a leitura retorna por conta próp...
A metade fonte de 1b3553f, que cometeu apenas seus testes
1b3553f encenado seus dois novos arquivos de teste e nada mais, então ele pousou afirmando um pasta nullableManager.set Bandeiras que ainda não existiam e não p...
Parar que uma bandeira IMAP sem nome seja sobrescrita
As bandeiras do IMAP são independentes, então "marcar esta leitura" não deve dizer nada sobre a estrela. EmailImapService.setFlags sempre tomou Booleans nullabl...
Parar o envio de uma credencial compartilhada como padrão de configuração
A senha compartilhada da plataforma foi criada como o retorno para DB PASSWORD e MINIO ROOT PASSWORD, então ele viveu neste repo e na imagem construída, bem com...
Retire a chamada da sessão, não da sequência de consultas
GET /api/calendar/calendars tomou userId como parâmetro de solicitação, então mudando um número no URL leu os calendários de qualquer pessoa — e porque os calen...
Fazer com que o MKCOL crie um livro que possa ser armazenado
mkCol construiu um ContactBook que não transporta nem uma organização nem um proprietário e retornou 201 independentemente, então criando um livro de endereços ...
SQL somente para barataDB que o PostgreSQL rejeita
BarataDB soletra o tipo de texto STRING; PostgreSQL e YugabyteDB usam TEXTO. 25 moldes através de consultas nativas ainda emitiam CAST(x AS STRING) e ::STRING, ...
Escopo livros de endereços para o membro que os possui
Os contactos foram explorados apenas pela organização. listBooks(orgId) foi findByOrganizaçãoId(orgId), e a consulta de lista de contatos aberta ONDE c.contactB...
Publique IDs de linha como strings — um novo livro 404'd no momento em que você o selecionou
O BarataDB unique rowid() produz ids de 64 bits. Um real de contact books é 120008191268096758; JSON.parse do JavaScript roda qualquer coisa passada Número. MAX...
Gravar os tamanhos das mensagens em vez de escrever zero
SearchIndexService writed sizeBytes = 0 para cada mensagem indexada, sob o comentário "Não disponível no envelope". Ela estava disponível — a busca O perfil sim...
Restaurar os arquivos 2b23346 deixado cair, e responder a um envio superdimensionado com 413
2b23346 foi cometido através de um índice privado que nunca foi semeado do HEAD, assim sua árvore manteve apenas os três arquivos encenados nele e o commit dele...
Pare de fechar cada envio a 1MB, para que uma imagem colada possa realmente sair
A composição com uma imagem colada falhou com um "Falha em enviar email". A compositor inlines a pasta no corpo HTML como uma base64 dados URI, que monta na par...
Parar Hibernate manipulando os moldes "::" no SQL nativo
O analisador de perguntas nativas de Hibernate trata "::" como um cólon escapado e avança um single ":". BarataDB recebida ****************************:texto[]...
Continue tentando novamente o consumidor de NATS durável do indexador após uma implantação
Um implante de rolamento sobrepõe pods e o de saída ainda mantém o durável consumidor, então o pod de entrada se liga ao "email-metadata-indexer" falha com [SUB...
Adaptar os indexadores de metadados às colunas tipo array
Segue a mudança kamo-shared-library que mapeia conversas/pesquisa index colunas de array como String[]/UUID[] em vez de List<T>, que foi o que parou todas as me...
Limite o índice da pasta em massa e pare- o na falha estrutural
Trabalho não comprometido de uma sessão concorrente, varrido para que a árvore esteja limpa. O índice de volume percorreu páginas com totalPaginas definidas pa...
Nunca combine uma pista com os endereços da empresa
Um lead cujo e-mail foi definido para noreply@kamocrm.com corresponde a cada mensagem que endereço já enviado — um registro de chumbo apareceu em toda a saída d...
Página a varredura de chumbo até que a janela esteja coberta
Uma única página fixa, silenciosamente perdida, sempre que uma caixa de correio levava mais do que páginaTamanho de mensagens entre ticks — um burst de newslett...
Respostas de endereço no Reply-To, e pare de vazar exceções SMTP para a UI
Uma resposta rápida a uma notificação KamoCRM falhou com `{"error":"Endereços Inválidos"}` verbatim na caixa de resposta. Essa string é o texto de Jakarta Mail ...
Parar de classificar uma raiz HTML multiparte/relacionada como um anexo
Cada e-mail transacional que enviamos com um logotipo org inlined chegou em nosso próprio /mensages visualizador com um assunto correto e um corpo completamente...
Digitalizar os repositórios MFA partilhados
O MfaEnrollmentService é um @Service na biblioteca compartilhada com kamo, então o wildcard @ComponentScan("com.kamo") nesta aplicação constrói-se isto ou não s...
Mesclar chave kamo duplicada que estoirou o EmailService
O novo módulo EmailService está no CrashLoopBackOff desde 16e8a05 — 22 reinicia, Nunca começou. Snakeyaml levanta DuplicateKeyException em um nível superior rep...
Endureça o download do kubectl contra a saída flácida [skip ci]
dl.k8s.io sobre a saída do corredor diminui intermitentemente no meio da transferência: curl: (56) OpenSSL SSL read: a descriptografia falhou ou o mac de regist...
Adicionar os endpoints do CampaignController REST em falta para /api/email/campaigns
O espaço de trabalho/editor GET/POST /api/email/campaigns etc., mas apenas O CampaignService (o @Service) já foi criado — nenhum @RestController o expôs, Então ...
Remover pedido de cancelamento ambíguoMatcher que estoirou a inicialização
EmailService monta dois servlets (MVC DispatcherServlet + Spring-WS MessageDispatcherServlet em /services/*), então uma requisição de texto nuaMatchers( "/api/e...
Parar a serialização do xoauth2 que quebrou o cache MailCredentials Redis
MailCredentials está em cache em Redis (GenericJackson2Json). A adição `isXoauth2()` boolean getter foi serializado como uma propriedade "xoauth2", mas não tem ...
Escopo KamoMail caixa de correio/domínio listando para os próprios domínios do org (fuga de ativos)
Segurança: **************** stream 'SELECT email from virtual users' (e ****************************************************************************************...
Persistir o provedor selecionado de OAuth no callback para que ele pare de reverter para KamoMail
Alternando uma org para Microsoft 365 (ou Google Workspace / Zoho) nunca ficou preso: o callback OAuth armazenava tokens e só inverteu o status em uma linha de ...
Resolver o logótipo de boas- vindas- e- mail da máquina de temas org, não o ápice
Logotipos de cabeçalho/footer em emails de sistema (bem-vindos/verificação) foram construídos como **************** um caminho de ápice que só existe no Kamo si...
Comparação secreta de tempo constante (oráculo de chegada)
Substituir String.equals com MessageDigest.isIqual para que a latência da resposta não possa Vazamento do X-Internal-Auth compartilhado byte-by-byte. Varredura ...
Devolver 422 (não 500) quando o membro não tiver caixa de correio
listFolders e outros terminais de leitura jogaram IlegalStateException de MailContext.toMailCredentials() quando um membro não tinha credenciais IMAP Providenci...
Não salvar NoReply transacional envia para uma pasta Enviada
NoReply é um endereço somente de envio sem caixa de correio, mas todas as transações enviar ainda uma tentativa de IMAP anexar à sua pasta Enviada, produzindo u...
A API da lista de caixas de correio devolve a forma de UI
GET /api/email/mailboxes devolveu a entidade bruta (fornecedorStatus, lastSyncedAt, sem contagem de membros). As definições da IU lêem... status era sempre inde...
Autorizar o acesso de correio baseado em privilégios para leitura + envio-como
solutionForMailbox só concedeu acesso através de uma atribuição direta do MemberMailbox, Então, as caixas de correio apareceram através de direitos jogaram NoSu...
Preservar o nome do ficheiro original e o tipo de conteúdo no download do anexo
O ****************es finais (ambos o pessoal e controladores de caixa de correio compartilhado) estavam emitindo Disposição de Conteúdo: anexo sem parâmetro do ...
Sincronize members.email quando a caixa de correio primária é atribuída, alterada ou removida
Quando uma caixa de correio foi atribuída a um membro em uma org KAMO MAIL, members.email nunca foi actualizado, fazendo com que o EmailCredentialService não re...
Mark-as-read for shared and member mailboxes
EmailController.setFlags now accepts an optional mailboxId query param and routes through resolveProviderWithMailbox so member-mailbox flags are set against the...
Lidar com IMAPInputStream no getMessage para evitar ClassCastException
JavaMail pode retornar um IMAPInputStream em vez de uma string decodificada de part.getContent() quando o conteúdo da mensagem não foi pré-fetched. A moldes dir...
Use getHasAttachments () para corresponder ao tipo de invólucro booleano
************* é um booleano (embrulhador), então Lombok gera getHasAttachments() não isHasAttachments(). Apenas este último existe para booleanos primitivos. Us...
Reset stale hasAttachments on sync and accumulate correctly
- Reset has_attachments=false at start of bulk sync so stale true values from old false-positive MIME detection are cleared before re-indexing - Accumulate ha...
Suporte a partir do cancelamento do endereço ao enviar
Adds FromAddressRequest to EmailSendRequest so the frontend can especifique Apelido/compartilhado/endereço da caixa de correio a enviar. SmtpOnlyProvider agora ...
Fix attachment parsing and hasAttachment false positives
Three fixes to EmailImapService: 1. toEnvelope: narrow multipart check to multipart/mixed only — plain HTML+text emails (multipart/alternative) no longer sh...
Add com.kamo.z.shared.commerce to EnableJpaRepositories scan
**************** (required by **************** in the shared library) lives under com.kamo.z.shared.commerce but was not included in the JPA repository scan, ca...
Como o que vês no transporte?
Cada uma dessas atualizações pousa automaticamente em seu espaço de trabalho. Comece grátis e veja crescer semana após semana.