feat(smtp): implement built-in SMTP server for mail ingestion

- Add lightweight SMTP server support using `lettre` and `tokio`.
- Implement `DATA_SMTP_INGEST` permission check for inbound mail.
- Support real-time email archiving via SMTP protocol.
- Integrate with existing EML index manager for automated indexing.
This commit is contained in:
rustmailer
2026-03-10 01:25:02 +08:00
parent 16f0fad91e
commit 4b0d571cf2
38 changed files with 1609 additions and 32 deletions
+1
View File
@@ -40,6 +40,7 @@ export function getPermissions(t: (key: string) => string) {
{ label: t('permission.data.delete'), value: 'data:delete' },
{ label: t('permission.data.export_batch'), value: 'data:export:batch' },
{ label: t('permission.data.import_batch'), value: 'data:import:batch' },
{ label: t('permission.data.smtp_ingest'), value: 'data:smtp:ingest' },
]
}
@@ -80,6 +80,7 @@ function getAccountCategories(t: (key: string) => string) {
'data:delete',
'data:export:batch',
'data:import:batch',
'data:smtp:ingest',
],
},
]
@@ -86,6 +86,7 @@ const CATEGORY_MAP: Record<'Global' | 'Account', { titleKey: string; keys: strin
'data:delete',
'data:export:batch',
'data:import:batch',
'data:smtp:ingest',
],
},
],
@@ -58,7 +58,7 @@ export function PermissionsDialog({ currentRow, open, onOpenChange }: Props) {
account: [
{
titleKey: "roles.categories.account_resource",
keys: ["account:manage", "account:read_details", "data:read", "data:manage", "data:raw:download", "data:delete", "data:export:batch", "data:import:batch"]
keys: ["account:manage", "account:read_details", "data:read", "data:manage", "data:raw:download", "data:delete", "data:export:batch", "data:import:batch", "data:smtp:ingest"]
}
]
};
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "حذف رسائل البريد الإلكتروني من جميع الحسابات",
"export_batch": "تصدير دفعي للبيانات المخصصة",
"export_batch_all": "تصدير دفعي لجميع البيانات",
"import_batch": "استيراد دفعي لبيانات البريد الإلكتروني"
"import_batch": "استيراد دفعي لبيانات البريد الإلكتروني",
"smtp_ingest": "استيعاب رسائل البريد الإلكتروني عبر بروتوكول SMTP"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Slette e-mails fra alle konti",
"export_batch": "Batch-eksportere tildelte data",
"export_batch_all": "Batch-eksportere alle data",
"import_batch": "Batch-importere e-maildata"
"import_batch": "Batch-importere e-maildata",
"smtp_ingest": "Indsend e-mails via SMTP-protokol"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "E-Mails aller Konten löschen",
"export_batch": "Zugewiesene Daten stapelweise exportieren",
"export_batch_all": "Alle Daten stapelweise exportieren",
"import_batch": "E-Mail-Daten stapelweise importieren"
"import_batch": "E-Mail-Daten stapelweise importieren",
"smtp_ingest": "E-Mails über das SMTP-Protokoll aufnehmen"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Delete Emails from All Accounts",
"export_batch": "Batch Export Assigned Data",
"export_batch_all": "Batch Export All Data",
"import_batch": "Batch Import Email Data"
"import_batch": "Batch Import Email Data",
"smtp_ingest": "Ingest Emails via SMTP Protocol"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Eliminar correos de todas las cuentas",
"export_batch": "Exportar datos asignados por lotes",
"export_batch_all": "Exportar todos los datos por lotes",
"import_batch": "Importar datos de correo por lotes"
"import_batch": "Importar datos de correo por lotes",
"smtp_ingest": "Ingerir correos electrónicos a través del protocolo SMTP"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Kaikkien tilien sähköpostien poistaminen",
"export_batch": "Tietojen erävienti",
"export_batch_all": "Kaikkien tietojen erävienti",
"import_batch": "Sähköpostitietojen erätuonti"
"import_batch": "Sähköpostitietojen erätuonti",
"smtp_ingest": "Vastaanota sähköposteja SMTP-protokollan kautta"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Supprimer les e-mails de tous les comptes",
"export_batch": "Exporter les données attribuées par lot",
"export_batch_all": "Exporter toutes les données par lot",
"import_batch": "Importer des données e-mail par lot"
"import_batch": "Importer des données e-mail par lot",
"smtp_ingest": "Ingérer des e-mails via le protocole SMTP"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Eliminare le email di tutti gli account",
"export_batch": "Esportare i dati assegnati in batch",
"export_batch_all": "Esportare tutti i dati in batch",
"import_batch": "Importare dati email in batch"
"import_batch": "Importare dati email in batch",
"smtp_ingest": "Acquisire e-mail tramite protocollo SMTP"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "すべてのアカウントのメールを削除",
"export_batch": "割り当てデータを一括エクスポート",
"export_batch_all": "すべてのデータを一括エクスポート",
"import_batch": "メールデータを一括インポート"
"import_batch": "メールデータを一括インポート",
"smtp_ingest": "SMTPプロトコル経由でメールを取り込む"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "모든 계정의 이메일 삭제",
"export_batch": "할당 데이터 일괄 내보내기",
"export_batch_all": "모든 데이터 일괄 내보내기",
"import_batch": "이메일 데이터 일괄 가져오기"
"import_batch": "이메일 데이터 일괄 가져오기",
"smtp_ingest": "SMTP 프로토콜을 통해 이메일 수집"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "E-mails van alle accounts verwijderen",
"export_batch": "Toegewezen gegevens batchgewijs exporteren",
"export_batch_all": "Alle gegevens batchgewijs exporteren",
"import_batch": "E-mailgegevens batchgewijs importeren"
"import_batch": "E-mailgegevens batchgewijs importeren",
"smtp_ingest": "E-mails opnemen via het SMTP-protocol"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Slette e-poster fra alle kontoer",
"export_batch": "Batch-eksportere tildelte data",
"export_batch_all": "Batch-eksportere alle data",
"import_batch": "Batch-importere e-postdata"
"import_batch": "Batch-importere e-postdata",
"smtp_ingest": "Hent e-post via SMTP-protokoll"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Usuwanie wiadomości e-mail ze wszystkich kont",
"export_batch": "Eksport zbiorczy przypisanych danych",
"export_batch_all": "Eksport zbiorczy wszystkich danych",
"import_batch": "Import zbiorczy danych e-mail"
"import_batch": "Import zbiorczy danych e-mail",
"smtp_ingest": "Pobieranie wiadomości e-mail za pośrednictwem protokołu SMTP"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Excluir e-mails de todas as contas",
"export_batch": "Exportar dados atribuídos em lote",
"export_batch_all": "Exportar todos os dados em lote",
"import_batch": "Importar dados de e-mail em lote"
"import_batch": "Importar dados de e-mail em lote",
"smtp_ingest": "Ingerir e-mails via protocolo SMTP"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Удаление писем всех аккаунтов",
"export_batch": "Пакетный экспорт назначенных данных",
"export_batch_all": "Пакетный экспорт всех данных",
"import_batch": "Пакетный импорт почтовых данных"
"import_batch": "Пакетный импорт почтовых данных",
"smtp_ingest": "Прием электронной почты через протокол SMTP"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "Ta bort e-postmeddelanden från alla konton",
"export_batch": "Batch-exportera tilldelad data",
"export_batch_all": "Batch-exportera all data",
"import_batch": "Batch-importera e-postdata"
"import_batch": "Batch-importera e-postdata",
"smtp_ingest": "Hämta e-post via SMTP-protokoll"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "刪除所有帳戶的郵件",
"export_batch": "批次匯出指派帳戶的資料",
"export_batch_all": "批次匯出所有資料",
"import_batch": "批次匯入郵件資料"
"import_batch": "批次匯入郵件資料",
"smtp_ingest": "透過 SMTP 協定歸檔郵件"
}
},
"users": {
+2 -1
View File
@@ -1132,7 +1132,8 @@
"delete_all": "删除所有账户的邮件",
"export_batch": "批量导出分配账户的数据",
"export_batch_all": "批量导出所有数据",
"import_batch": "批量导入邮件数据"
"import_batch": "批量导入邮件数据",
"smtp_ingest": "通过 SMTP 协议归档邮件"
}
},
"users": {