İçeriğe geç

E-posta ve bildirim

E-posta

Ayarlar

AACP → Sistem → Sistem Ayarları → E-posta (yetki: system.settings.manage) altında SMTP tanımlanır:

Ayar Varsayılan
mail.enabled kapalı (yapılandırmadan e-posta gönderilmez)
mail.smtp_host / mail.smtp_port boş / 587
mail.smtp_encryption tls
mail.smtp_user / mail.smtp_password boş (parola şifreli saklanır)
mail.from_email / mail.from_name boş

Ayarların yanında bir test e-postası gönderme düğmesi vardır.

Gönderim: kuyrukla

CpMailerService::sendHtml() e-postayı gönderim kuyruğuna koyar; HTTP isteği SMTP sunucusunu beklemez. Gerçek teslimat arka planda (Messenger işçisi) yapılır. Test e-postası ve işçi işleyicileri ise anında gönderir (sendNow).

$log = $mailer->sendHtml('kullanici@example.com', 'Konu', '<p>Merhaba</p>', 'Merhaba');

Hizmeti kullanmadan önce canSend() ile sistemin gönderime hazır olup olmadığına bakın (mail.enabled kapalıysa yapılandırma eksiktir).

Günlük ve yeniden gönderim

Her giden e-posta denemesi cp_mail_logs tablosuna yazılır (alıcı, konu, durum, hata). AACP'deki e-posta günlüğünden başarısız bir e-posta yeniden gönderilebilir (resend). Günlükler mail.log_retention_days (90 gün) sonra temizlenir.

E-posta şablonları

Sistemin gönderdiği e-postaların metni kod içinde sabit değildir; AACP → Sistem → E-posta şablonları ekranından düzenlenir. Şablonlar:

  • Dile göre ayrıdır: her şablonun her dil için konusu, HTML gövdesi ve düz metin karşılığı olabilir.
  • Açılıp kapatılabilir.
  • Sıfırlanabilir: bir şablonun satırı silinince yeniden gönderilen sürüm kodla gelen varsayılana döner (çeviri anahtarları sonsuza dek yedek olarak kalır).

Çekirdeğin gönderdiği e-postalar: hesap doğrulama, hoş geldin, yönetici onayı bekleniyor, onaylandı, kimlik değişikliği başvurusu ve sonucu, ve iki bildirim zarfı.

Yer tutucular

Gövdede ICU yer tutucuları ({name}) ve [tür:özellik] token'ları ([site:name], [user:mail]) kullanılabilir. Her şablon tanımı, gönderen kodun hangi yer tutucuları geçtiğini söyler; ekran bunları listeler.

HTML temizlenmez

E-posta HTML'i site HTML'i değildir: tablo ve satır içi stil ister, ki bunlar zengin metin temizleyicisinin sildiği şeylerdir. Şablon düzenleme yeteneği zaten SMTP sunucusunu değiştirme yetkisiyle aynı seviyededir (system.settings.manage), bu yüzden burada temizleme yapılmaz.

Modül kendi şablonlarını ekler

Modülün e-postalarını AACP'ye tanıtmak için MailTemplateProviderInterface uygulanır; etiketlendiği için çekirdek modülün adını bilmek zorunda kalmaz:

final class ShopMailTemplates implements MailTemplateProviderInterface
{
    public function mailTemplates(): array
    {
        return [new MailTemplateDefinition(key: 'shop.order_paid', labelKey: 'shop.mail.order_paid', /* varsayılan çeviri anahtarları, yer tutucular */)];
    }
}

Bildirimler

Bildirim, bir kullanıcıya bir olayı haber verme sistemidir (yorum geldi, içerik onaylandı gibi). Tek giriş noktası NotificationDispatcher::dispatch():

$dispatcher->dispatch('blog.comment.reply', $recipient, ['title' => $post->getTitle()], actor: $author);

Kurallar:

  • Uygulama içi bildirim isteğin içinde yazılır, çünkü rozetin hemen güncellenmesi gerekir.
  • E-posta her zaman kuyruğa konur, bildirim gönderimi SMTP beklemez.

Bildirim türleri

Her tür bir olay anahtarı (eventKey), etiket anahtarı ve sahip modül taşır. Çekirdek türleri tanıtır; modüller contributions.yaml ile kendi türlerini ekler. Kullanıcı hesap ayarlarında hangi türleri açık/kapalı yapacağını görür.

Kanallar

Kanal Davranış
Uygulama içi Kullanıcının bildirim kutusuna yazılır
E-posta (anında) Olay olunca kuyruktan
E-posta (özet) Günlük ya da haftalık özet olarak toplanır

Özet e-postalar NotificationDigestTask görevi ile üretilir. Kanal arayüzü (NotificationChannelInterface) ile yeni kanal (ör. SMS, Slack) eklenebilir; arayüzü uygulayan sınıf services.yaml ile etiketlenir.

Kullanıcı tercihleri

NotificationPreferenceResolver, olay × kullanıcı tercih matrisinden hangi kanalların çalışacağına karar verir. Kullanıcı bildirim e-postalarını açıp kapatabilir (notif_mail_enabled) ve modu seçer: anında, günlük ya da haftalık.

Ayar Varsayılan
notification.enabled açık
notification.digest.enabled açık

Hesap alanı

Bildirim tercihleri, hesap sayfasına bir hesap profil uzantısı (NotificationPreferenceExtension) olarak eklenir. Başka modüller de aynı kalıpla (AccountProfileExtensionInterface) hesap sayfasına kendi bölümlerini ekleyebilir.

Son güncelleme: 13.10.2026