Skip to content
이 페이지는 AI의 도움으로 작성 및 번역되었습니다. 부정확한 내용이 있으면 개선에 참여해 주세요. GitHub에서 편집

계정 관리

PRX-Email은 여러 이메일 계정을 지원하며, 각 계정은 자체 IMAP 및 SMTP 설정, 인증 자격 증명, 기능 플래그를 가집니다. 계정은 SQLite 데이터베이스에 저장되고 고유한 account_id로 식별됩니다.

계정 생성

EmailRepository를 사용하여 새 계정을 생성합니다:

rust
use prx_email::db::{EmailRepository, NewAccount};

let account_id = repo.create_account(&NewAccount {
    email: "[email protected]".to_string(),
    display_name: Some("Alice".to_string()),
    now_ts: current_timestamp(),
})?;

계정 필드

필드타입설명
idi64자동 생성된 기본 키
emailString이메일 주소 (IMAP/SMTP 사용자로 사용됨)
display_nameOption<String>계정의 사람이 읽기 쉬운 이름
created_ati64생성 시간의 Unix 타임스탬프
updated_ati64마지막 업데이트 시간의 Unix 타임스탬프

계정 조회

rust
let account = repo.get_account(account_id)?;
if let Some(acct) = account {
    println!("Email: {}", acct.email);
    println!("Name: {}", acct.display_name.unwrap_or_default());
}

멀티 계정 설정

각 계정은 자체적으로 독립적으로 작동합니다:

  • IMAP 연결 -- 별도의 서버, 포트, 자격 증명
  • SMTP 연결 -- 별도의 서버, 포트, 자격 증명
  • 폴더 -- 계정별로 동기화된 폴더 목록
  • 동기화 상태 -- 계정/폴더 쌍별 커서 추적
  • 기능 플래그 -- 독립적인 기능 활성화
  • 아웃박스 -- 메시지별 추적이 있는 별도의 전송 대기열
rust
// 계정 1: OAuth가 있는 Gmail
let gmail_id = repo.create_account(&NewAccount {
    email: "[email protected]".to_string(),
    display_name: Some("Alice (Gmail)".to_string()),
    now_ts: now,
})?;

// 계정 2: 비밀번호가 있는 업무용 이메일
let work_id = repo.create_account(&NewAccount {
    email: "[email protected]".to_string(),
    display_name: Some("Alice (Work)".to_string()),
    now_ts: now,
})?;

기능 플래그

PRX-Email은 계정별로 어떤 기능이 활성화되는지 제어하기 위해 기능 플래그를 사용합니다. 새 기능의 단계적 롤아웃을 지원합니다.

사용 가능한 기능 플래그

플래그설명
inbox_read메시지 목록 조회 및 읽기 허용
inbox_search메시지 검색 허용
email_send새 이메일 전송 허용
email_reply이메일 답장 허용
outbox_retry실패한 아웃박스 메시지 재시도 허용

기능 플래그 관리

rust
// 특정 계정에 대해 기능 활성화
plugin.set_account_feature(account_id, "email_send", true, now)?;

// 기능 비활성화
plugin.set_account_feature(account_id, "email_send", false, now)?;

// 모든 계정의 전역 기본값 설정
plugin.set_feature_default("inbox_read", true, now)?;

// 기능이 활성화되어 있는지 확인
let enabled = plugin.is_feature_enabled(account_id, "email_send")?;

퍼센트 기반 롤아웃

계정의 일정 비율로 기능을 롤아웃합니다:

rust
// 계정의 50%에 email_send 활성화
let enabled = plugin.apply_percentage_rollout(
    account_id,
    "email_send",
    50,  // percentage
    now,
)?;
println!("Feature enabled for this account: {}", enabled);

롤아웃은 account_id % 100을 사용하여 계정을 버킷에 결정론적으로 할당하여 재시작 시에도 일관된 동작을 보장합니다.

폴더 관리

폴더는 IMAP 동기화 중에 자동으로 생성되거나 수동으로 생성할 수 있습니다:

rust
use prx_email::db::NewFolder;

let folder_id = repo.create_folder(&NewFolder {
    account_id,
    name: "INBOX".to_string(),
    path: "INBOX".to_string(),
    now_ts: now,
})?;

폴더 목록 조회

rust
let folders = repo.list_folders(account_id)?;
for folder in &folders {
    println!("{}: {} ({})", folder.id, folder.name, folder.path);
}

다음 단계

Released under the Apache-2.0 License.