Registrare tutte e tre le bandiere IMAP e dire perché l'indice non può ancora servire una lista
La migrazione è in corso, così is answered esiste e SearchIndexService ora scrive accanto a is read e is starred. L'indice ha registrato due dei tre bandiere pe...
Non leggere o scrivere is answered prima che la sua colonna esista
Segue il cambiamento condiviso-librario smapping del campo. Niente nel schieramento percorso tocca ora una colonna che KamoInitializer non ha ancora creato. L'...
Smettere di perdere una connessione IDLE IMAP su ogni ricollegamento del browser
Interruzione del filo IDLE non può terminare un IDLE: è parcheggiato in un blocco presa letto che vede solo la bandiera una volta che il letto ritorna da solo, ...
La metà sorgente di 1b3553f, che ha commesso solo i suoi test
1b3553f ha messo in scena i suoi due nuovi file di prova e nient'altro, così è atterrato affermando un nullable FolderManager.set Bandiere che non esistevano an...
Fermare una bandiera IMAP senza nome dall'essere sovrascritta
Le bandiere IMAP sono indipendenti, quindi "segna questa lettura" non deve dire nulla sulla stella. EmailImapService.setFlags ha sempre preso nullable Booleans ...
Smettere di spedire una credenziali condivisa come predefinito config
La password condivisa della piattaforma è stata cotta come il fallback per DB PASSWORD e MINIO ROOT PASSWORD, così ha vissuto in questo repo e nell'immagine cos...
Prendere il chiamante dalla sessione, non dalla stringa di query
GET /api/calendar/calendars ha preso userId come parametro di richiesta, quindi cambiando un numero nell'URL legge i calendari di chiunque — e perché i calendar...
Rendere MKCOL creare un libro che può effettivamente essere memorizzato
mkCol ha costruito un ContactBook che non porta né un'organizzazione né un proprietario e restituito 201 indipendentemente, in modo da creare una rubrica da un ...
CockroachDB-solo SQL che PostgreSQL rifiuta
CockroachDB scrive il tipo di testo STRING; PostgreSQL e YugabyteDB usano TEXT. 25 getti attraverso query native stavano ancora emettendo CAST (x AS STRING) e :...
Libri di indirizzo Scope al membro che li possiede
I contatti sono stati oggetto di una sola organizzazione. listBooks(orgId) was findByOrganizationId(orgId), e la query della lista di contatto aperta DOVE c.con...
Pubblica ids riga come stringhe — un nuovo libro 404'd il momento in cui l'hai selezionato
CockroachDB Unique rowid() produce id a 64 bit. Un vero da contact books è 1200081912680906758; JSON.parse di JavaScript gira qualcosa oltre Numero. MAX SAFE IN...
Registra le dimensioni dei messaggi invece di scrivere zero
SearchIndexService ha scritto dimensioneBytes = 0 per ogni messaggio che ha mai indicizzato, sotto il commento "Non disponibile da busta". Era disponibile — il ...
Ripristinare i file 2b23346 caduto, e rispondere a un'invio oversize con 413
2b23346 è stato commesso attraverso un indice privato che non è mai stato seminato da HEAD, così il suo albero ha tenuto solo i tre file in scena in esso e il c...
Smettere di tappare ogni invio a 1MB, quindi un'immagine incollata può effettivamente uscire
Comporre con un'immagine incollata non è riuscito con un nudo "Failed to send email". The compositore inlinea la pasta nel corpo HTML come URI dati base64, che ...
Stop Hibernate mangling the ":" casts nel nativo SQL
Il parser nativo di Hibernate tratta "::" come colon evaso e inoltra un singolo ":". CockroachDB ricevuto *****************************************************...
Continuare a riprovare il consumatore NATS durevole dell'indicizzatore dopo una distribuzione
Un rotolamento distribuisce pod sovrapposti e quello in uscita mantiene ancora il durevole consumatore, così il pod in arrivo lega a "email-metadata-indexer" fa...
Adapt gli indicizzatori dei metadati alle colonne di tipo array
Segui il cambiamento di libreria kamo-shared che mappa conversazioni/search index colonne di array come String[]/UUUID[] piuttosto che List ogni messaggio indic...
Cuocere l'indice della cartella di massa e fermarlo su guasto strutturale
Lavoro non accettato da una sessione concomitante, spazzato in modo che l'albero è pulito. L'indice di massa ha camminato pagine con il totalePages impostato a...
Non corrispondere mai ad una pista contro gli indirizzi dell'azienda
Una guida la cui e-mail è stata impostata a noreply@kamocrm.com ha abbinato ogni messaggio che l'indirizzo aveva mai inviato — un record di piombo ha superato l...
Page the lead spazza fino a quando la finestra è coperta
Una singola pagina fissa silenziosamente persa posta quando una casella di posta ha preso più di pageSize messaggi tra zecche — un'esplosione di newsletter, una...
Risponde l'indirizzo a Reply-To, e smettere di perdere le eccezioni SMTP all'interfaccia utente
Una risposta rapida a una notifica KamoCRM non è riuscita con `{"error":"Indirizzi non validi"} reso verbatim nella casella di risposta. Quella stringa è la scr...
Smettere di classificare una radice HTML multipart/collegata come allegato
Ogni email transazionale che inviamo con un logo org in linea è arrivato nel nostro /messages spettatore con un soggetto corretto e un corpo completamente vuoto...
Scansione dei repository MFA condivisi
MfaEnrollmentService è un @Service in kamo-shared-library, quindi la wildcard @ComponentScan("com.kamo") in questa applicazione lo costruisce se questo servizio...
Unisci duplicato chiave kamo che crashlooped EmailService
Il nuovo pod EmailService è stato in CrashLoopBackOff dal 16e8a05 — 22 riparte, mai una volta iniziato. serpentyaml solleva DuplicateKeyException su un livello ...
Harden il kubectl download contro l'egresso sfacciato [skip ci]
dl.k8s.io sopra l'ingresso del corridore cade in modo intermittente metà del trasferimento: curl: (56) OpenSSL SSL read: decryption fail or bad record mac che f...
Aggiungi gli endpoint mancanti di CampaignController REST per /api/email/campaigns
Lo spazio di lavoro di posta elettronica di massa/editore chiama GET/POST /api/email/campagni ecc, ma solo Servizio di campagna (il @Service) è stato mai creato...
Rimuovere ambiguo richiesta di cancellazioneMatcher che crash di avvio
EmailService monta due servlets (MVC DispatcherServlet + Spring-WS MessageDispatcherServlet a /services/*), quindi una richiesta di stringa nudaMatchers( "/api/...
Smettere di serializzare il ricevitore calcolato xoauth2 che ha rotto la cache MailCredentials Redis
MailCredentials è memorizzato in Redis (GenericJackson2Json). Il aggiunto `isXoauth2()` boolean getter è stato serializzato come una proprietà "xoauth2" ma non ...
Scope KamoMail mailbox/domain che elenca i propri domini dell'org (perdita di cross-tenant)
E' un'email da virtual users. 'Nome SELECT DA virtual domains') senza og scoping, quindi mailbox/domain importato EVERY org's KamoMail mailboxes in the caller's...
Persist selezionato OAuth provider su callback in modo da smette di tornare a KamoMail
Passare un org a Microsoft 365 (o Google Workspace / Zoho) non è mai bloccato: il callback OAuth memorizzato gettoni e solo capovolto stato su una riga del forn...
Risolvere il logo e-mail di benvenuto dall'host tema org, non l'apice
I loghi dell'intestazione/footer nelle e-mail di sistema (welcome/verification) sono stati costruiti come Un percorso di apice che esiste solo sul Kamo sito di ...
Confronto costante dell'età interna (oracolo di timing)
Sostituire String.equals con MessageDigest.isEqual risposta quindi la latenza non può fallire il X-Internal-Auth condiviso byte-byte. La spazzata su tutta la fl...
Ritorno 422 (non 500) quando il membro non ha casella di posta
elencoPiù vecchi e altri endpoint leggiti hanno lanciato IllegalStateException da MailContext.toMailCredentials() quando un membro non aveva credenziali IMAP fo...
Non salvare transazionale NoReply invia ad una cartella Invia
NoReply è un indirizzo solo invio senza casella di posta, ma ogni transazione inviare ancora tentato un append IMAP alla sua cartella Sent, producendo un rumoro...
Mailbox list API restituisce l'interfaccia utente
GET /api/email/mailboxs ha restituito l'entità grezza (providerStatus, lastSyncedAt, nessun conteggio dei membri). Le impostazioni dell'UI leggono... lo stato e...
Autorizzare l'accesso alla casella di posta privilegiata per leggere + send-as
risolvereForMailbox ha concesso solo l'accesso tramite un'assegnazione diretta MemberMailbox, Quindi le cassette postali sono in superficie. NoSuchElementExcept...
Conservare il nome del file originale e il tipo di contenuto sul download dell'allegato
I punti finali (entrambi i punti personali) e controller di posta elettronica condivisa) emettono Contenuto-Disposizione: allegato con nessun parametro nome fil...
Sincronizza i membri.email quando la casella di posta primaria viene assegnata, modificata o rimossa
Quando una casella di posta è stata assegnata a un membro in un org KAMO MAIL, i membri.email non è mai stato aggiornato, inducendo EmailCredentialService a non...
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...
Maniglia IMAPInputStream in getMessage per evitare ClassCastException
JavaMail può restituire un IMAPInputStream invece di uno String decodificato da part.getContent() quando il contenuto del messaggio non è stato pre-fetched. The...
Utilizzare getHasAttachments() per abbinare il tipo di wrapper Boolean
E' un Boolean, quindi Lombok. genera getHasAttachments() non èHasAttachments(). Quest'ultimo solo esiste per il booleano primitivo. Utilizzare Boolean.TRUE.equa...
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...
Supporto daAddress override on send
Aggiunge FromAddressRequest a EmailSendRequest in modo che il frontend possa specificare alias/shared/mailbox indirizzo da inviare. SmtpOnlyProvider ora usa que...
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...
Correct field name and type in getFromAddresses response
Backend was sending 'email' key but frontend expected 'address', and sent type 'shared_mailbox' when frontend expected 'shared'. Also fixes hasMailboxes flag wh...
Ripiegare a org domains quando nessun set predefinito di email provider domains
KamoMailDomainValidator è stato indurito con 403 per org che hanno un DNS-verified domain in org domains ma mai aggiunto all'e-mail registro di dominio del forn...
Filifica il filtro di stato e i modelli richiesti automaticamente nell'elenco
- EmailTemplateController.list() ora accetta ?status= param e filtri utilizzando la query del repository di findByOrgIdAndStatus esistente - Auto-seeds modelli ...
Come quello che vedi la spedizione?
Ognuno di questi aggiornamenti atterra automaticamente nello spazio di lavoro. Inizia gratis e guardalo crescere settimana dopo settimana.