Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / İş modülleri

Modül

Mail modülü (mail)

Dış mail hesaplarını bağlayan, mesajları önbelleğe alan ve gönderen, mail alan adlarını ve OAuth uygulamalarını tutan ve sistem posta kutusu sözleşmesine sahip mail modülü sayfası.

src/cluster_erp/modules/mail/ içindeki mail modülü, kullanıcının dış bir mail hesabını bağlamasına ve ürün içinde mail okuyup yazmasına izin verir. Bağlı hesapları, mesajların ve eklerin yerel önbelleğini, yöneticinin tanımladığı mail alan adlarını ve OAuth ile oturum açan sağlayıcılar için OAuth uygulamalarını tutar. Ayrıca diğer her modülün sistem e-postası göndermek için kullandığı SendTransactionalEmail sözleşmesini yanıtlar. Bu sayfa taşıma ve oturum açmayı yalnızca mekanizma düzeyinde anlatır.

Bir bakışta

Öğe Değer Kaynak
Paket src/cluster_erp/modules/mail/ klasör
Modül sınıfı Module src/cluster_erp/modules/mail/module.py:18
name / version mail / 0.1.0 src/cluster_erp/modules/mail/module.py:19-25
API öneki /api/v1/mail (ModuleBase.api_prefix), require_app("mail") uygulama kapısıyla src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/mail/module.py:34-45
Alt modüller 4: accounts, domains, messages, providers; ayrıca transport.py, oauth.py, imap_verify.py, crypto.py, privacy_handlers.py klasör listesi
Tablolar 5: mail_domains, mail_provider_configs, mail_accounts, mail_messages, mail_attachments dört models.py dosyasındaki __tablename__
Metadata'daki varlıklar entities içinde 3 anahtar src/cluster_erp/modules/mail/module.py:143-147
Uçlar Pakette 28 uç dekoratörü @...router.get/post/put/patch/delete için grep
Aksiyonlar 0 ActionMeta girdisi pakette grep "ActionMeta("
Göçler 4 dosya metni beş tablo adından birini içeren migrations/versions/ dosyaları
Sözleşmeler 3 tüketir, 0 üretir "Olaylar ve sorgular" bölümüne bakın
Web uygulamasında varlık Kendi ekranı olan sistem katalog uygulaması mail; Ayarlar altında mail ayarları src/cluster_erp/modules/app_store/catalog.json (mail girdisi), webapp/js/mail.js, webapp/js/mail-settings.js
Masaüstünde varlık yalnızca genel bileşenler src/cluster_erp/desktop/modules/ içinde mail klasörü yok

Modül ne yapar

  • Oturum açan kullanıcı için google, microsoft veya imap türünde bir mail hesabı bağlar. Google ve Microsoft hesapları OAuth yetkilendirme kodu akışıyla bağlanır; IMAP hesapları bir adres ve uygulama parolasıyla bağlanır ve hesap kaydedilmeden önce gerçek bir oturum açmayla doğrulanır (src/cluster_erp/modules/mail/oauth.py:1-15, src/cluster_erp/modules/mail/imap_verify.py:1-8).
  • Bir hesabın gelen kutusunu yerel bir önbelleğe eşitler ve ekleri depoda tutar (src/cluster_erp/modules/mail/messages/sync.py:1-3, src/cluster_erp/modules/mail/messages/sync.py:126-203).
  • Mail gönderir, taslakları eklerle saklar, mesajları okundu işaretler, çöp kutusuna taşır ve konuları gösterir (src/cluster_erp/modules/mail/messages/routes.py:43-252).
  • Yöneticinin sunucu koordinatlarıyla mail alan adları tanımlamasına ve sağlayıcı başına OAuth uygulamaları kaydetmesine izin verir (src/cluster_erp/modules/mail/domains/models.py:9-30, src/cluster_erp/modules/mail/providers/models.py:9-35).
  • Diğer modüller için platform SMTP ayarları üzerinden sistem e-postası gönderir (src/cluster_erp/modules/mail/module.py:72-103).

Alt modüller

Alt modül Amaç Ana varlıklar Yönlendirici Kaynak
accounts Bağlı hesaplar, OAuth başlatma ve geri dönüş, IMAP bağlantısı MailAccount /accounts src/cluster_erp/modules/mail/accounts/routes.py:30
domains Yöneticinin tanımladığı mail alan adları MailDomain /domains src/cluster_erp/modules/mail/domains/routes.py:21
messages Önbellekteki mesajlar, taslaklar, ekler, eşitleme, gönderim MailMessage, MailAttachment /messages src/cluster_erp/modules/mail/messages/routes.py:33
providers Sağlayıcı başına OAuth uygulamaları MailProviderConfig /oauth-apps src/cluster_erp/modules/mail/providers/routes.py:27

Veri modeli

Varlık Tablo Ana alanlar Notlar Kaynak
MailDomain mail_domains name, kind, imap_host, imap_port, smtp_host, smtp_port, use_tls, is_active kind değeri google, microsoft veya imap src/cluster_erp/modules/mail/domains/models.py:9-30, src/cluster_erp/modules/mail/domains/schemas.py:11
MailProviderConfig mail_provider_configs provider, client_id, client_secret_enc, tenant, enabled sağlayıcı başına bir satır; gizli değer şifreli saklanır ve hiç döndürülmez src/cluster_erp/modules/mail/providers/models.py:9-35
MailAccount mail_accounts user_id, provider, email_address, display_name, domain_id, sunucu koordinatları, şifreli belirteç ve parola sütunları, status, status_detail, last_sync_at bir kullanıcı birden çok hesap bağlayabilir src/cluster_erp/modules/mail/accounts/models.py:13-55
MailMessage mail_messages account_id, folder, provider_message_id, thread_id, gönderen, alıcılar, subject, snippet, body_text, body_html, sent_at, is_read, has_attachments, konu başlıkları hesap ve sağlayıcı mesaj kimliğiyle anahtarlanan yerel ayna src/cluster_erp/modules/mail/messages/models.py:13-57
MailAttachment mail_attachments message_id, filename, mime_type, size_bytes, provider_ref, storage_key, is_inline, content_id metadata; baytlar sağlayıcıdan alınır veya depoda tutulur src/cluster_erp/modules/mail/messages/models.py:60-81

Sağlayıcı gizli değerleri, OAuth belirteçleri ve IMAP uygulama parolaları, bir sunucu ayarından anahtarlanan geri çözülebilir bir şifreyle saklanır ve yalnızca sağlayıcıyla konuşmak için çözülür (src/cluster_erp/modules/mail/crypto.py:1-49, src/cluster_erp/modules/mail/transport.py:1-12). Ayarlar ayarlar başvurusunda listelenir; gizli değer saklama ikinci faktör ve gizli değer saklama sayfasında anlatılır.

Hesap, sağlayıcı ve mesaj yolu

flowchart TD
 A["yönetici: sağlayıcı başına MailProviderConfig"] --> B["POST /accounts/oauth/provider/start"]
 D["yönetici: sunucu koordinatlı MailDomain"] --> I["POST /accounts/imap"]
 B --> C["sağlayıcı onayı, POST /accounts/oauth/callback"]
 C --> ACC["MailAccount: google veya microsoft"]
 I --> V["verify_imap_login"]
 V --> ACC2["MailAccount: imap"]
 ACC --> S["MailSyncService.sync_account"]
 ACC2 --> S
 S --> T["transport.fetch_inbox"]
 T --> M["MailMessage ve MailAttachment önbelleği"]
 M --> SEND["transport.send_message ile MailSyncService.send"]

Düz anlatımla:

  1. Yönetici bir sağlayıcının OAuth uygulamasını /oauth-apps altında kaydeder ve /domains altında mail alan adları tanımlayabilir (src/cluster_erp/modules/mail/providers/routes.py:27-66, src/cluster_erp/modules/mail/domains/routes.py:21-86).
  2. Google veya Microsoft için kullanıcı akışı başlatır, sağlayıcıda onay verir ve geri dönüş ucuna döner. İmzalı, kısa ömürlü bir durum değeri akışı kullanıcıya ve sağlayıcıya bağlar. Ürün belirteçleri alır, kullanıcının sağlayıcı parolasını hiçbir zaman görmez (src/cluster_erp/modules/mail/oauth.py:1-15, src/cluster_erp/modules/mail/accounts/routes.py:66-164).
  3. IMAP için kullanıcı adresi ve bir uygulama parolasını gönderir; modül kaydetmeden önce gerçek bir oturum açma yapar (src/cluster_erp/modules/mail/accounts/routes.py:166-183, src/cluster_erp/modules/mail/accounts/services.py:83-160).
  4. POST /messages/sync, gelen kutusunu sağlayıcı taşıması üzerinden alır ve önbelleğe ekler ya da günceller. Taşıma hatası hesap durumunu ayrıntıyla birlikte error yapar; başarı connected ve last_sync_at değerlerini yazar (src/cluster_erp/modules/mail/messages/sync.py:126-203).
  5. Süresi dolan erişim belirteçleri saklanan yenileme belirteciyle yenilenir ve şifreli olarak geri yazılır (src/cluster_erp/modules/mail/messages/sync.py:83-124).
  6. Gönderim bir mesaj kurar ve onu sağlayıcı taşımasına verir: IMAP hesapları SMTP ile, Google ve Microsoft kendi mail API'leriyle gönderir (src/cluster_erp/modules/mail/transport.py:1-12, src/cluster_erp/modules/mail/messages/sync.py:205-286).

Ekranlar ve metadata

get_metadata, tek bir ayar bölümü olan Mail Ayarları ile bir Mail kenar çubuğu grubu tanımlar; bölümün tek sekmesi mail_domain olur (src/cluster_erp/modules/mail/module.py:119-142). Üç varlık mail_domain, mail_account ve mail_message şeklindedir (src/cluster_erp/modules/mail/module.py:143-147). Mail uygulaması ekranı web uygulamasının özel bir ekranıdır; bkz. mail ve profil ekranları.

Durum ve aksiyonlar

Modül hiçbir ActionMeta tanımlamaz. Hesap status (varsayılan connected) ve status_detail taşır (src/cluster_erp/modules/mail/accounts/models.py:48-49). Mesaj bir folder içinde durur, varsayılan inbox; taslaklar drafts, çöp kutusu trash kullanır (src/cluster_erp/modules/mail/messages/models.py:22, src/cluster_erp/modules/mail/messages/sync.py:331-348, src/cluster_erp/modules/mail/messages/sync.py:470-488).

İş kuralları

  • Her mesaj ve hesap okuması oturum açan kullanıcıyla sınırlıdır (src/cluster_erp/modules/mail/messages/sync.py:52-81, src/cluster_erp/modules/mail/accounts/services.py:169-184).
  • Taslağı atmak, taslakta ve eklerinde deleted_at, deleted_by ve draft_discarded nedenini doldurur (src/cluster_erp/modules/mail/messages/sync.py:331-347).
  • Çöpe atma, mesajı sağlayıcının çöp kutusuna ve yerel trash klasörüne taşır (src/cluster_erp/modules/mail/messages/sync.py:470-488).
  • Hesabın bağlantısını kesmek, alan adı silmek veya OAuth uygulaması silmek deleted_at alanını doldurur (src/cluster_erp/modules/mail/accounts/services.py:185-191, src/cluster_erp/modules/mail/domains/services.py:55-61, src/cluster_erp/modules/mail/providers/services.py:79-87).
  • Sistem posta kutusu SMTP yapılandırılmamışsa not_configured, alıcı yoksa no_recipient nedeniyle sent=False bildirir. sent=True, SMTP sunucusunun mesajı kabul ettiği anlamına gelir; teslim edildiği anlamına gelmez (src/cluster_erp/modules/mail/module.py:72-103).

Olaylar ve sorgular

Modül 3 sözleşme tüketir ve hiç üretmez; sayım fleet modülü sayfasındaki gibi yapılmıştır. Tam liste sözleşmeler başvurusunda yer alır.

Yön Sözleşme sınıfı İşleyici veya yayıcı Kaynak
abone olur SendTransactionalEmail _handle_transactional_email src/cluster_erp/modules/mail/module.py:47-53, src/cluster_erp/modules/mail/module.py:72-103
abone olur CollectSubjectData, AnonymiseSubject privacy_handlers.py src/cluster_erp/modules/mail/module.py:55-70

İntranet bildirim dağıtımı SendTransactionalEmail sözleşmesini çağıranlardan biridir (src/cluster_erp/modules/intranet/notify.py:91-99). Sistem postasının platform tarafı PDF ve sistem postası sayfasındadır.

İzinler

İzin anahtarı Kullanan Kaynak
mail_account.read, .connect, .delete hesaplar src/cluster_erp/modules/mail/accounts/routes.py:33-200
mail_domain.read, .create, .update, .delete alan adları src/cluster_erp/modules/mail/domains/routes.py:24-81
mail_provider.read, .update, .delete OAuth uygulamaları src/cluster_erp/modules/mail/providers/routes.py:30-60
mail_message.read, .create, .update, .delete, .send, .sync mesajlar src/cluster_erp/modules/mail/messages/routes.py:43-246

Gizlilik, saklama ve geçmiş

privacy_handlers.py, bir kişinin adreslerini taşıyan mesajları sayar. Anonimleştirme bir operatör kararıdır (include_correspondence); dahil edildiğinde kişinin adı ve adresi gönderen ve alıcı alanlarında, konu, özet ve gövdeler içinde değiştirilir (src/cluster_erp/modules/mail/privacy_handlers.py:1-11). Bkz. gizlilik ve ilgili kişi talepleri. Modülde retention_handlers.py yoktur. Değişiklikleri değişiklik geçmişi yakalar.

Analitik olgular

Bu modülde analytics_facts.py yoktur.

Ayarlar ve referans verileri

Mail alan adları ve OAuth uygulamaları, yöneticilerin tuttuğu modül referans verileridir (src/cluster_erp/modules/mail/domains/routes.py:21-86, src/cluster_erp/modules/mail/providers/routes.py:27-66). Gizli değerler hiç gösterilmez: GET /oauth-apps/ gizli değeri değil, gizli değerin girilip girilmediğini (has_secret) döndürür (src/cluster_erp/modules/mail/providers/models.py:9-16, src/cluster_erp/modules/mail/providers/schemas.py:6-15).

Testler

Ada göre (web-client/_e2e_mail*.mjs) ve tests/ içinde modules.mail için grep ile bulundu.

Tür Dosya Kapsar
e2e web-client/_e2e_mail.mjs, web-client/_e2e_mailapp.mjs mail ayarları ve mail uygulaması
e2e web-client/_e2e_mail_drafts.mjs taslaklar ve ekler
pytest tests/test_mail_transport.py sağlayıcı taşımasının ayrıştırma ve kurma işleri
pytest tests/test_system_mail.py sistem posta kutusu

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
mail account MailAccount Bir kullanıcının ürüne bağladığı dış posta kutusu. Mail hesabı src/cluster_erp/modules/mail/accounts/models.py:13
mail domain MailDomain Sağlayıcı türü ve sunucu koordinatlarıyla yöneticinin tanımladığı alan adı. Mail alan adı src/cluster_erp/modules/mail/domains/models.py:9
system mailbox SendTransactionalEmail Uygulamanın kendi postası için kullandığı ve diğer modüllerin SendTransactionalEmail ile ulaştığı tek SMTP kimliği. sistem posta kutusu src/cluster_erp/modules/mail/module.py:47-53

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13