- Konu sahibi
- #1
PHP’de e-posta göndermenin temel yolu
Dosyayı PHP ve posta altyapısının yapılandırıldığı ortamda, örneğin terminalden
Örnekte ileti UTF-8 ve Base64 olarak hazırlanır; böylece Türkçe gövde metni uygun biçimde taşınır. Konu satırı örnekte ASCII tutulmuştur. Türkçe karakter içeren veya daha karmaşık konu başlıkları için uygun e-posta başlık kodlaması gerekir; bu tür iletilerde bir posta kütüphanesi kullanmak daha pratiktir.
“Gönderim için kabul edilmedi” sonucu alırsanız PHP hata günlüğündeki ilgili zaman dilimini ve posta gönderme hizmetinin yapılandırmasını kontrol edin. Sağlayıcınıza hata mesajını, deneme zamanını ve gönderen adresini ileterek PHP’nin kullandığı gönderim aracının erişilebilirliğinin ve hesabın gönderim izninin incelenmesini isteyin. Günlük veya tanılama çıktısını paylaşırken parola ve diğer hassas bilgileri çıkarın; geçici tanılama dosyalarını işlemden sonra kaldırın.
Bir iletişim formuna uyarlarken kullanıcının girdiği adresi doğrulayın; başlıklara aktarılacak değerlerde satır sonlarına izin vermeyin. Kullanıcı girdisini doğrudan
mail() işlevine alıcıyı, konuyu, iletiyi ve gönderici başlığını vermektir. Bunun çalışması için PHP’nin bulunduğu ortamda bir posta gönderme hizmetinin yapılandırılmış olması gerekir. Aşağıdaki örneği kendi adreslerinizle çalıştırıp sonucu ve alıcı kutusunu kontrol ederek gönderimi deneyebilirsiniz.Gönderim ortamını hazırlayın
Önce barındırma sağlayıcınızdan veya sunucu yöneticinizden PHP’ninmail() kullanıp kullanamadığını ve hangi gönderici adreslerine izin verildiğini öğrenin. Linux gibi sistemlerde genellikle PHP’nin erişebildiği sendmail uyumlu bir posta aktarım programı gerekir. Windows’ta doğrudan SMTP kullanımı için sunucu ve port ayarları da söz konusu olabilir. SMTP, e-postayı bir sunucuya iletmek için kullanılan protokoldür.mail() çağrısı, tek başına bir posta sunucusu kurmaz. Sunucunuzda uygun gönderim altyapısı yoksa sağlayıcınızdan yapılandırmasını isteyin veya kimlik doğrulamalı SMTP destekleyen bir PHP kütüphanesi kullanın.Basit bir ileti gönderin
Aşağıdaki varsayımsal örnekte alıcıyı erişebildiğiniz bir adresle, göndericiyi ise sunucunuzun kullanmasına izin verdiği bir adresle değiştirin. Kodun bulunduğu dosyayı UTF-8 biçimindeposta-deneme.php adıyla kaydedin. Örnek PHP 7.2 veya sonraki sürümlerde çalışacak biçimde başlıkları dizi olarak verir.
PHP:
<?php
$alici = '[email protected]';
$gonderici = '[email protected]';
$konu = 'Deneme mesaji';
$ileti = "Merhaba,\r\nBu bir deneme iletisidir.";
$basliklar = [
'From' => $gonderici,
'MIME-Version' => '1.0',
'Content-Type' => 'text/plain; charset=UTF-8',
'Content-Transfer-Encoding' => 'base64',
];
$kodlanmisIleti = chunk_split(base64_encode($ileti), 76, "\r\n");
if (mail($alici, $konu, $kodlanmisIleti, $basliklar)) {
echo 'İleti gönderim için kabul edildi.';
} else {
echo 'İleti gönderim için kabul edilmedi.';
}
Dosyayı PHP ve posta altyapısının yapılandırıldığı ortamda, örneğin terminalden
php posta-deneme.php komutuyla bir kez çalıştırın. Web sunucusu ve komut satırı PHP’si farklı ayarlar kullanabilir; web uygulamanızda gönderim yapacaksanız testi o uygulamanın çalıştığı ortamda da doğrulayın. Deneme dosyasını herkese açık bırakmayın; aksi hâlde sayfanın her çağrılması yeni bir gönderim başlatabilir.Örnekte ileti UTF-8 ve Base64 olarak hazırlanır; böylece Türkçe gövde metni uygun biçimde taşınır. Konu satırı örnekte ASCII tutulmuştur. Türkçe karakter içeren veya daha karmaşık konu başlıkları için uygun e-posta başlık kodlaması gerekir; bu tür iletilerde bir posta kütüphanesi kullanmak daha pratiktir.
Gönderim sonucunu yorumlayın
“Gönderim için kabul edildi” mesajı, iletinin alıcının gelen kutusuna ulaştığını kanıtlamaz. Alıcı kutusunu ve gereksiz posta klasörünü kontrol edin. İleti gelmediyse alıcı adresini ve varsa göndericiye dönen hata iletisini inceleyin. Sunucu yöneticisinden gönderim tarih ve saati, alıcı ve gönderici adresleriyle posta kuyruğunu ve teslim günlüklerini kontrol etmesini isteyin; günlükler iletinin reddedildiğini, beklediğini veya sonraki sunucuya aktarıldığını gösterebilir.“Gönderim için kabul edilmedi” sonucu alırsanız PHP hata günlüğündeki ilgili zaman dilimini ve posta gönderme hizmetinin yapılandırmasını kontrol edin. Sağlayıcınıza hata mesajını, deneme zamanını ve gönderen adresini ileterek PHP’nin kullandığı gönderim aracının erişilebilirliğinin ve hesabın gönderim izninin incelenmesini isteyin. Günlük veya tanılama çıktısını paylaşırken parola ve diğer hassas bilgileri çıkarın; geçici tanılama dosyalarını işlemden sonra kaldırın.
SMTP veya form verileri kullanırken
Sağlayıcınız kullanıcı adı ve parola ile SMTP üzerinden gönderim gerektiriyorsa SMTP ve TLS destekleyen bir PHP posta kütüphanesi kullanın. Sağlayıcının verdiği sunucu, port, şifreleme türü ve kimlik bilgilerini kütüphanenin yapılandırmasına girin; parolayı kaynak koduna gömmek veya herkese açık bir dosyada tutmak yerine sunucudaki korumalı yapılandırmadan alın. Gönderici adresinin hesap için yetkili olduğundan emin olun.Bir iletişim formuna uyarlarken kullanıcının girdiği adresi doğrulayın; başlıklara aktarılacak değerlerde satır sonlarına izin vermeyin. Kullanıcı girdisini doğrudan
From başlığına veya mail() işlevinin ek komut parametrelerine koymayın. Göndericiyi kendi yetkili adresiniz olarak tutup yanıt adresini doğrulanmış form verisinden oluşturabilirsiniz. Formu istenmeyen toplu gönderime karşı da koruyun.
Moderatör tarafında düzenlendi: