모든 3 IMAP 플래그를 기록하고, 인덱스가 아직 목록을 제공하지 않는 이유
Migration has run, 그래서 is answered 존재와 SearchIndexService 지금 쓰기 it alongside is read 과 is starred. 인덱스는 세의 두 기록 그것의 전체적인 존재를 위한 깃발; 여기에서 그것은 모든 3을 기록합니다. index...
열이 존재하기 전에 is answered를 읽거나 쓰지 마십시오
공유 라이브러리를 따르십시오. 배포되지 않음 이제는 KamoInitializer가 아직 생성되지 않은 열을 터치합니다. index-backed listing은 다른 모든 필드를 유지하고 비활성화되어 있기 때문에 답변 = 모든 행에 대한 거짓은 그들이 결코 없었던 회원에게 알려줍니다. ...
모든 브라우저 재연결에 IMAP IDLE 연결 유출
IDLE 스레드를 중단 할 수 없습니다 IDLE : 차단에 주차 socket read that only sees flag once the read returns on its own, 까지 Dovecot의 아이들 타임 아웃 나중에. 그 등록은 비동기적으로 떨어졌다 어쨌든, 그래서 다음 가...
1b3553f의 소스 반은 테스트에만 전념
1b3553f는 두 개의 새로운 테스트 파일과 아무것도 다른, 그래서 그것을 착륙 asserting 오류 FolderManager.set 아직 존재하지 않은 플래그는 컴파일할 수 없습니다. 이름 * 이것은 그 테스트가 기록 된 변경입니다.
중복된 IMAP 플래그를 중지
IMAP 플래그는 독립적이므로 "이 읽기"는 별에 대해 아무것도 말해야합니다. EmailImapService.setFlags는 항상 nullable Booleans를 가지고 있으며 건너뛰기 null, 하지만 FolderManager 노출 세 원시 및 모든 호출기 위 false로 평평한 ...
Config default로 공유된 자격 발송
플랫폼의 공유 암호는 DB PASSWORD에 대한 fallback으로 구워졌습니다. MINIO ROOT PASSWORD, 그래서 그것은이 저장소에 살았고 내장 된 이미지뿐만 아니라 클러스터에서. 생산은 DB 기본값을 사용하지 않는 — *** 공급 envFrom를 통해 DB PASSWO...
세션에서 호출기를 가지고, 쿼리 문자열에서
GET /api/calendar/calendars 했다 userId 로 요청 매개 변수, 그래서 변경 URL의 숫자는 누군가의 달력을 읽습니다 — 그리고 달력이 행해지기 때문에 모든 tenant를 통해 조직이 없습니다. 무서운, 무서운 아무것도: POST는 전체 UserCalendar를...
MKCOL는 실제로 저장될 수 있는 책을 창조합니다
mkCol은 컨택트북을 구축하여 조직이나 소유자가 아닌 그리고 201를 돌려서 CardDAV에서 주소록 작성 클라이언트는 매번 플러시에 실패했습니다: ORGANIZATION ID는 NULL이 아니며, 소유자의 책은 OWNER ID가 NULL 또는 IS ORG DEFAULT = TRUE가...
CockroachDB-only SQL 그 PostgreSQL 거부
CockroachDB는 텍스트 유형 STRING을 spells; PostgreSQL 및 YugabyteDB 사용 TEXT. 네이티브 쿼리에 걸쳐 25 캐스터는 여전히 CAST (x AS STRING)을 방출하고 ::STRING, '타입 문자열이 존재하지 않는다. 그것은 무슨 일이 일어나...
스코프 주소 책은 회원에게
연락처는 혼자 조직에 의해 범위. listBooks(orgId)는 findByOrganizationId(orgId) 및 연락처 목록 쿼리가 열립니다. WHERE c.contactBook.organization.id = : 소유자가 사전 작성하지 않은 경우, 모든 회원이 본 — 벌크 드렛...
문자열로 줄 ids를 게시 — 새로운 책 404'd 순간 당신은 그것을 선택
CockroachDB unique rowid()는 64-bit ids를 생성합니다. contact books에서 진짜 것 이다 1200081912680906758; 자바 스크립트의 JSON.parse는 과거에 어떤 라운드 번호. MAX SAFE INTEGER는 브라우저가 12000819...
제로 작성 대신 기록 메시지 크기
SearchIndexService는 sizeBytes = 0을 썼습니다. 댓글 아래에 "누구에서 사용할 수 없습니다". 그것은 사용할 수 있었다 — fetch 단순히 그것을 위해 물었다. email metadata.search index의 모든 행은 생산에 있는 0개 바이트, 그래서 m...
파일 복원 2b23346 떨어졌다, 과부하에 답변 413
2b23346는 HEAD에서 결코 시체되지 않은 개인 인덱스를 통해 최선을 다하고, 그래서 그 나무는 3 개의 파일 만 수행하고 커밋은 삭제 다른 231. 작업 나무는 결코 만지지 않았다; 이 나무와 복원 같은 multipart 수정을 운반합니다. 또한 MultipartLimitAdv...
매핑을 중지 1MB, 그래서 과거 이미지는 실제로 갈 수 있습니다
과거 이미지와 비교하면 베어 "이메일을 보낼 실패". 더 보기 작곡가는 야구장으로 몸 HTML을 base64 data URI로 표현합니다. Multipart "email" JSON 부분에서 Tomcat은 1MB에서 그 부분을 거부했습니다. FileSizeLimitExceedExcept...
Hibernate를 중지 "::" 기본 SQL에서 캐스팅
Hibernate의 네이티브 query parser는 탈출 된 식민지로 "::"를 치료하고 앞으로 단 하나 ":". CockroachDB 수신 *********** ARRAY[]:text[]), '' and rejected it with: at or near ":": 구문 오류. 문...
배포 후 Indexer의 튼튼한 NATS 소비자를 다시 시도하십시오
롤링 배포 overlaps pods 및 outgoing 하나 여전히 내구성을 보유 소비자, "email-metadata-indexer"에 들어오는 포드의 결합은 실패 [SUB-90012] 소비자는 이미 구독에 바인딩됩니다. 시작() 한 번에서 @PostConstruct, 오류를 기록하고...
Metadata indexers를 배열 형 칼럼에 적응
Kamo-shared-library를 따라 지도 대화/search index string[]/UUID[]와 같은 배열 열은 List<T>보다 멈춘다. 모든 색인 된 메시지는 모두 작성되었습니다. null이 현재 명시될 수 있는 열을 읽으십시오: toSet/toArray는 빈을 반환합니...
대량 폴더 인덱스를 경계하고 구조적 실패에 중지
동시 세션에서 드문 작업, 그래서 나무가 깨끗합니다. integer로 설정된 TotalPages를 가진 대량 색인 도보된 페이지. MAX VALUE 및 없음 천장, so the folder that paging misbehaved were walk forever. 지금 그만 페이지의 ...
회사의 자신의 주소에 대한 납을 일치하지 마십시오
이메일이 noreply@kamocrm.com으로 설정된 리드 주소가 전송되었습니다. 1 개의 리드 레코드가 회사의 전체 아웃바운드 표면 메일 스트림 (126 협회 6 생산에 리드). 2개의 결함, 둘 다 여기에서 닫힙니다. 해결자는 "이 회사는?" email provider doma...
창이 덮여 때까지 리드 스윕을 페이지
Mailbox가 더 많은 것을 가지고 있을 때마다 단 하나 고정 페이지 침묵으로 잃어버린 우편물 ticks 사이의 pageSize 메시지 - 뉴스 레터 파열, 바쁜 공유 inbox, 또는 Active mailbox의 첫 번째 청소 - 영구적으로 손실, 때문에 max-pages 그래서 ...
주소 응답에 응답하고, SMTP 예외를 UI로 유출
KamoCRM 알림에 대한 빠른 답변은 `{"error":"Invalid Addresses"}`로 실패했습니다. 응답 상자에 있는 verbatim를 렌더링했습니다. 그 문자열은 Jakarta Mail의 자신의 wording입니다. 사이트맵 To; pod log는 숨겨지은 것을 보여줍니다...
첨부 파일로 multipart/related HTML root 분류
모든 거래 이메일 우리는 인라인 org 로고로 보내 우리의 자신에 도착 /messages viewer 와 a 정확한 주제 과 완전한 빈 몸. isAttachmentPart()는 첨부 파일로 Content-ID를 운반하는 ANY 부품을 처리했습니다. 더 보기 multipart/relat...
공유 MFA 저장소 스캔
MfaEnrollmentService는 kamo-shared-library의 @서비스이므로 와일드 카드 @ComponentScan("com.kamo") 이 응용 프로그램에서 여부 또는 이지 여부를 구성 서비스는 MFA와 함께해야 할 일이 있습니다. — 그리고 그것의 constructor...
이메일서비스를 추락한 kamo 열쇠
새로운 EmailService pod는 16e8a05 이후 CrashLoopBackOff에있었습니다. - 22 재시작, 한번 시작하세요. snakeyaml는 반복된 최고 수준에 DuplicateKeyException을 올립니다 키, 나는 두 번째 `kamo를 추가 :`는 sender-a...
Flaky egress에 대한 kubectl 다운로드를 Harden [skip ci]
dl.k8s.io 런너의 egress 간에 실수로 중간 전송을 삭제: 컬: (56) OpenSSL SSL read: 해독 실패 또는 나쁜 기록 맥 그렇지 않으면 녹색 빌드에 배포되지 않습니다. 반복적으로 관찰 kamo-signer-monorepo 및 카모 번역 사전. 추가 --retr...
/api/email/campaigns에 대한 누락된 CampaignController REST 엔드포인트 추가
Bulk-email workspace/editor 호출 GET/POST /api/email/campaigns 등, 뿐만 아니라 CampaignService ( @Service)가 생성되었습니다. - @RestController가 노출되지 않았습니다. 그래서 모든 호출 404'd 및 /m...
자주 묻는 질문(FAQ)
이메일서비스는 2개의 servlets (MVC DispatcherServlet + Spring-WS를 거치합니다 MessageDispatcherServlet 에 /services/*), 그래서 베어 문자열 requestMatchers( "/api/email/unsubscribe/**")...
MailCredentials Redis 캐시를 깨진 xoauth2 getter를 직렬화
MailCredentials는 Redis (GenericJackson2Json)에서 캐시됩니다. 추가 `isXoauth2()` boolean getter는 "xoauth2"로 일련되었지만 필드가 없습니다. 다시, 그래서 모든 캐시 인식 읽기 threw 인식되지 않음PropertyExce...
Scope KamoMail mailbox/domain listing to the org's own domain (크로스텐트 누출)
보안: **************** ran ' 가상 users'에서 직접 이메일 (그리고 *********** 'SELECT name from virtual domains') with no org scoping, so mailbox/domain sync import EVERY org'...
콜백에 OAuth 공급자를 선택하여 KamoMail으로 돌아갑니다
Microsoft 365 (또는 Google Workspace / Zoho)에 org를 전환하지 못했습니다. OAuth 콜백은 토큰을 저장하고 사전 승인 공급자 행에 만 담긴 상태 만 허용되지 않습니다. 공급자 type 및 no-op'ing을 완전히 작성하지 않았습니다. 읽는 경로는 하...
Org 테마 호스트의 환영 이메일 로고를 해결, apex하지
시스템 이메일 (welcome/verification)에 있는 우두머리/footer 로고는 건축되었습니다 *********** — Kamo에서만 존재하는 apex 경로 마케팅 사이트, 그래서 고객 orgs (e.g. optionone.com) 모두 이미지 404 및 이메일은 로고가 없습...
일정한 내부auth 비밀 비교 (timing oracle)
MessageDigest.isEqual로 String.equals를 대체하십시오 그래서 응답 대기시간은 할 수 없습니다 X-Internal-Auth 공유 비밀 바이트-by-byte를 누출하십시오. Fleet-wide 청소의 copy-pasted InternalAuthFilter (sam...
반환 422 (500) 회원이 사서함이없는 경우
listFolders 및 기타 읽기 엔드 포인트 threw IllegalStateException from MailContext.toMailCredentials() 회원이 IMAP 자격 증명이 없을 때 컨트롤러의 catch-all이 500으로 바뀌는 것을 규정했습니다. 기타 제품 Mai...
거래 NoReply를 저장하지 마십시오
NoReply는 mailbox가없는 send-only 주소이지만, 모든 거래 여전히 IMAP append를 Sent 폴더에 보내면 noisy를 생성 각 전송에 AUTHENTICATIONFAILED 경고. saveToSent 플래그 추가 EmailSmtpService.send (실제 ma...
Mailbox 목록 API 반환 UI 모양 ****************
GET /api/email/mailboxes는 raw entity (providerStatus, lastSyncedAt를 반환합니다. 회원 수 없음. 설정 UI는 ***********를 읽습니다. 상태는 항상 정의되지 않았고 모든 mailbox는 "pending"으로 렌더링되었습니다. ...
Read + send-as에 대한 권한 기반 mailbox 액세스 권한을 부여
resolveForMailbox는 직접 MemberMailbox 할당을 통해만 액세스 권한을 부여합니다. 이렇게 mailboxes는 ***********를 통해서 지상에 놓았습니다 권리 threw NoSuchElementException -> "메시지로드" -********** 자주하...
첨부 파일 다운로드에 원본 파일명 및 내용 유형 보존
*********** endpoints (개인의 것 and shared-mailbox controllers)는 Content-Disposition를 방출하고 있었습니다: 부착 filename 매개 변수와 Content-Type: application/octet-stream, 브라우저가 ...
Sync member.email when primary mailbox는 할당, 변경, 또는 제거
Mailbox가 KAMO MAIL org의 회원으로 할당되었을 때, member.email 이메일CredentialService가 IMAP을 해결하지 못하는 경우 결코 업데이트되지 않았습니다. 그 회원의 자격.
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...
ClassCastException을 방지하기 위해 getMessage에서 IMAPInputStream 처리
JavaMail 대신 IMAPInputStream을 반환할 수 있습니다. part.getContent() 메시지 내용이 예쁘지 않은 경우. 더 보기 직접 (String)는 parseMultipart () threw ClassCastException에 캐스팅 영향을받는 메시지, fetch...
사용 getHasAttachments() Boolean 래퍼 유형 일치
***********는 Boolean (wrapper), 그래서 Lombok입니다 getHasAttachments()를 생성합니다. 후자의 만 primitive boolean에 대한 존재. 안전하게 취급하기 위하여 Boolean.TRUE.equals ()를 사용하십시오 null의 경우.
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...
Send에 지원 fromAddress override
Adds FromAddressRequest to EmailSendRequest 그래서 프론트엔드를 지정할 수 있습니다. alias/shared/mailbox 주소로 전송합니다. SmtpOnlyProvider 지금 헤더의 주소는 현재가 떨어지면 공급자 설정하지 않을 때 이메일.
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...
이메일 provider domains 기본 설정이 없는 경우 org domains로 돌아가기
KamoMailDomainValidator는 403 의 orgs에 대 한 어려운 실패 org domains의 DNS 인증 도메인은 아니지만 이메일에 추가하지 않습니다. 공급자 도메인 등록. 첫 번째 활성을 사용하는 fallback을 추가하십시오. DNS 인증, 최고 수준의 org dom...
상태 필터 및 목록에 자동 입력된 필수 템플릿
- EmailTemplateController.list()는 이제 ?status= param 및 필터를 허용합니다. 기존 findByOrgIdAndStatus 저장소 쿼리 사용 - 초기 묘목을 놓은 orgs에 대한 Auto-seeds 필수 템플릿 (seedForOrgIfMisssing ...