Skip to content
Cette page a été générée et traduite avec l'aide de l'IA. Si vous remarquez des inexactitudes, n'hésitez pas à contribuer. Modifier sur GitHub

Gestion des comptes

PRX-Email prend en charge plusieurs comptes email, chacun avec sa propre configuration IMAP et SMTP, ses identifiants d'authentification et ses flags de fonctionnalité. Les comptes sont stockés dans la base de données SQLite et identifiés par un account_id unique.

Créer un compte

Utilisez EmailRepository pour créer un nouveau compte :

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(),
})?;

Champs du compte

ChampTypeDescription
idi64Clé primaire auto-générée
emailStringAdresse email (utilisée comme utilisateur IMAP/SMTP)
display_nameOption<String>Nom lisible par l'homme pour le compte
created_ati64Horodatage Unix de la création
updated_ati64Horodatage Unix de la dernière mise à jour

Récupérer un compte

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

Configuration multi-comptes

Chaque compte fonctionne indépendamment avec ses propres :

  • Connexion IMAP -- Serveur, port et identifiants séparés
  • Connexion SMTP -- Serveur, port et identifiants séparés
  • Dossiers -- Liste des dossiers synchronisés par compte
  • État de synchronisation -- Suivi des curseurs par paire compte/dossier
  • Flags de fonctionnalité -- Activation indépendante des fonctionnalités
  • Boîte d'envoi -- File d'envoi séparée avec suivi par message
rust
// Compte 1 : Gmail avec OAuth
let gmail_id = repo.create_account(&NewAccount {
    email: "[email protected]".to_string(),
    display_name: Some("Alice (Gmail)".to_string()),
    now_ts: now,
})?;

// Compte 2 : Email professionnel avec mot de passe
let work_id = repo.create_account(&NewAccount {
    email: "[email protected]".to_string(),
    display_name: Some("Alice (Travail)".to_string()),
    now_ts: now,
})?;

Flags de fonctionnalité

PRX-Email utilise des flags de fonctionnalité pour contrôler quelles capacités sont activées par compte. Cela supporte le déploiement progressif des nouvelles fonctionnalités.

Flags de fonctionnalité disponibles

FlagDescription
inbox_readAutoriser la liste et la lecture des messages
inbox_searchAutoriser la recherche dans les messages
email_sendAutoriser l'envoi de nouveaux emails
email_replyAutoriser la réponse aux emails
outbox_retryAutoriser la relance des messages de boîte d'envoi échoués

Gérer les flags de fonctionnalité

rust
// Activer une fonctionnalité pour un compte spécifique
plugin.set_account_feature(account_id, "email_send", true, now)?;

// Désactiver une fonctionnalité
plugin.set_account_feature(account_id, "email_send", false, now)?;

// Définir le défaut global pour tous les comptes
plugin.set_feature_default("inbox_read", true, now)?;

// Vérifier si une fonctionnalité est activée
let enabled = plugin.is_feature_enabled(account_id, "email_send")?;

Déploiement basé sur pourcentage

Déployez des fonctionnalités à un pourcentage de comptes :

rust
// Activer email_send pour 50% des comptes
let enabled = plugin.apply_percentage_rollout(
    account_id,
    "email_send",
    50,  // pourcentage
    now,
)?;
println!("Fonctionnalité activée pour ce compte : {}", enabled);

Le déploiement utilise account_id % 100 pour assigner les comptes à des buckets de façon déterministe, garantissant un comportement cohérent entre les redémarrages.

Gestion des dossiers

Les dossiers sont créés automatiquement lors de la synchronisation IMAP, ou vous pouvez les créer manuellement :

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,
})?;

Lister les dossiers

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

Étapes suivantes

Released under the Apache-2.0 License.