E-posta Gönderme
Örneğin bültenler veya sipariş onayları gibi e-postalar göndermek mi istiyorsunuz? Nette Framework, çok hoş bir API ile gerekli araçları sağlar. Göstereceğiz:
- ekler dahil e-posta nasıl oluşturulur
- nasıl gönderilir
- e-postalar ve şablonlar nasıl birleştirilir
Kurulum
Kütüphaneyi Composer aracını kullanarak indirip kurun:
E-posta Oluşturma
E-posta, Nette\Mail\Message sınıfının bir nesnesidir. Örneğin şöyle oluşturalım:
Girilen tüm parametreler UTF-8 olmalıdır.
Alıcıyı addTo()
metoduyla belirtmenin yanı sıra, kopya alıcısını addCc()
veya gizli kopya
alıcısını addBcc()
ile de belirtebilirsiniz. setFrom()
dahil tüm bu metotlarda, alıcıyı üç
şekilde yazabiliriz:
HTML olarak yazılan e-posta gövdesi setHtmlBody()
metoduyla iletilir:
Metin alternatifini oluşturmanıza gerek yok, Nette sizin için otomatik olarak oluşturacaktır. Ve e-postanın bir konusu
yoksa, onu <title>
öğesinden almaya çalışacaktır.
HTML gövdesine resim eklemek de son derece kolaydır. İkinci parametre olarak resimlerin fiziksel olarak bulunduğu yolu iletmeniz yeterlidir ve Nette bunları otomatik olarak e-postaya dahil edecektir:
Resimleri ekleyen algoritma şu kalıpları arar: <img src=...>
, <body background=...>
,
HTML style
niteliği içindeki url(...)
ve özel sözdizimi [[...]]
.
E-posta göndermek daha kolay olabilir mi?
E-posta bir kartpostal gibidir. Asla e-posta ile şifre veya diğer erişim bilgilerini göndermeyin.
Ekler
Elbette e-postaya ekler eklenebilir. Bunun için
addAttachment(string $file, ?string $content = null, ?string $contentType = null)
metodu kullanılır.
Şablonlar
HTML e-postaları gönderiyorsanız, bunları Latte şablonlama sisteminde yazmak doğaldır. Nasıl yapılır?
email.latte
dosyası:
Nette tüm resimleri otomatik olarak ekler, konuyu <title>
öğesine göre ayarlar ve HTML'ye bir metin
alternatifi oluşturur.
Nette Uygulamasında Kullanım
E-postaları Nette Uygulaması ile birlikte, yani presenter'larla kullanıyorsanız, şablonlarda n:href
niteliği
veya {link}
etiketi kullanarak bağlantılar oluşturmak isteyebilirsiniz. Latte bunları varsayılan olarak bilmez,
ancak eklemek çok kolaydır. Bağlantıları oluşturabilen nesne Nette\Application\LinkGenerator
'dır, buna bağımlılık enjeksiyonu kullanarak iletilmesini isteyerek
erişebilirsiniz:
Şablonda daha sonra bağlantıları alıştığımız gibi oluştururuz. LinkGenerator aracılığıyla oluşturulan tüm bağlantılar mutlak olacaktır.
E-posta Gönderme
Mailer, e-postaların gönderilmesini sağlayan bir sınıftır. Nette\Mail\Mailer arayüzünü uygular ve tanıtacağımız birkaç önceden hazırlanmış mailer mevcuttur.
Framework, #yapılandırmaya dayalı olarak oluşturulan Nette\Mail\Mailer
türünde bir hizmeti DI konteynerine otomatik olarak ekler ve buna bağımlılık enjeksiyonu kullanarak iletilmesini isteyerek
erişebilirsiniz.
SendmailMailer
Varsayılan mailer, PHP mail fonksiyonunu kullanan SendmailMailer'dır. Kullanım örneği:
returnPath
'i ayarlamak istiyorsanız ve sunucunuz onu sürekli olarak üzerine yazıyorsa,
$mailer->commandArgs = '-fMuj@email.cz'
kullanın.
SmtpMailer
Postayı bir SMTP sunucusu üzerinden göndermek için SmtpMailer
kullanılır.
Yapıcıya şu ek parametreler iletilebilir:
port
– ayarlanmazsa,ssl
için varsayılan 25 veya 465 kullanılırtimeout
– SMTP bağlantısı için zaman aşımıpersistent
– kalıcı bağlantı kullanclientHost
– istemci Host başlığını ayarlastreamOptions
– bağlantı için SSL context options ayarlamanıza olanak tanır
FallbackMailer
E-postaları doğrudan göndermez, ancak bir dizi mailer aracılığıyla göndermeyi aracılık eder. Bir mailer başarısız olursa, bir sonrakiyle denemeyi tekrarlar. Sonuncusu da başarısız olursa, baştan tekrar başlar.
Yapıcıda ek parametreler olarak tekrar deneme sayısını ve milisaniye cinsinden bekleme süresini belirtebiliriz.
DKIM
DKIM (DomainKeys Identified Mail), sahte mesajların tespit edilmesine de yardımcı olan e-postaların güvenilirliğini artırmaya yönelik bir teknolojidir. Gönderilen mesaj, gönderenin alan adının özel anahtarıyla imzalanır ve bu imza e-posta başlığında saklanır. Alıcı sunucu, bu imzayı alan adının DNS kayıtlarında saklanan genel anahtarla karşılaştırır. İmzanın eşleşmesiyle, e-postanın gerçekten gönderenin alan adından geldiği ve mesajın iletimi sırasında değiştirilmediği kanıtlanır.
E-postaların imzalanmasını mailer'a doğrudan yapılandırmada ayarlayabilirsiniz. Bağımlılık enjeksiyonu kullanmıyorsanız, bu şekilde kullanılır:
Yapılandırma
Nette Mail için yapılandırma seçeneklerine genel bakış. Tüm framework'ü değil, yalnızca bu kütüphaneyi kullanıyorsanız, yapılandırmanın nasıl yükleneceğini okuyun.
E-postaları göndermek için varsayılan olarak Nette\Mail\SendmailMailer
mailer'ı kullanılır ve bu daha fazla
yapılandırılmaz. Ancak, onu Nette\Mail\SmtpMailer
olarak değiştirebiliriz:
context › ssl › verify_peer: false
seçeneği ile SSL sertifika doğrulamasını kapatabilirsiniz.
Kesinlikle tavsiye etmiyoruz bunu yapmanızı, çünkü uygulama savunmasız hale gelir. Bunun yerine sertifikaları depoya ekleyin.
Güvenilirliği artırmak için e-postaları DKIM teknolojisi kullanarak imzalayabiliriz:
DI Hizmetleri
Bu hizmetler DI konteynerine eklenir:
Ad | Tip | Açıklama |
---|---|---|
mail.mailer |
Nette\Mail\Mailer | e-postaları gönderen sınıf |
mail.signer |
Nette\Mail\Signer | DKIM imzalama |