Yandex.Mail Kurumsal – Gönderim Hatası

Merhabalar,

Yandex’in yeni servisi, “Kurumlar için Mail”i yakın zamanda test etme fırsatım oldu.

Servisi, yönettiğim bazı sitelerde iletişim formu ve diğer formlardan alınan bilgileri göndermek için kullanmayı denedim. Hem iletişim formunu dolduran kişiye, hem de iletişim formundan alınan verilerin gönderileceği kişiye bir bildirim e-maili gönderen ve bu verileri ayrıca veritabanına kaydeden ufak bir script yazdım.

Tüm gönderiler için PHPMailer class’ı kullandım.
Mail içerikleri HTML olarak, charset olarak UTF-8, subject “İletişim Formu Bildirim” olarak set edildi. Gönderen (from) header’ı olarak da “Benimsitem.com İletişim” set edildi.

Host: smtp.yandex.ru – Port: 25

Sistem bir süre stabil çalıştı, her 2 partiye de mail gönderimi başarılı oldu.

Fakat bir süre sonra bazı iletişim formlarının iletilmediğini keşfettim. Veritabanında kayıt olmasına rağmen mail gelmiyordu. PHPMailer ile debug çalıştırdım. Fakat yeteri kadar bilgi dönmediği için direk sunucu üzerinde capture yapmaya karar verdim.

tcpdump -s 65535 -w mail.pcap port 25

 

Mail gönderimi sırasında aşağıdaki hatanın döndüğünü farkettim:

554 5.7.1 Message rejected under suspicion of SPAM

Cevap direk Yandex mail serverından geliyordu. Neyi spam olarak algıladığını anlayabilmek için, veritabanında olup da maili gitmeyen verileri iletişim formuna girdim. Belli kelimeler kullanıldığında ve uzunluk arttığında mailin gitmediğini farkettim.

Konuyla alakalı araştırma yapmama rağmen kimsenin bu sorunu yaşamadığını ya da denk gelmediğini farkettim. Yandex’e konuyla alakalı yazdım ama henüz bir dönüş alamadım.

Özetle sonuç hüsran 🙂 Google Apps ile karşılaştırıldığında, maalesef yetersiz kalıyor.
Bence en büyük eksiklikler:

  • DKIM (DomainKeys) desteği yok. Bu nedenle Yahoo bazen mailleri hiç almayabiliyor.
  • SMTP üzerinden gönderilen mailler, Yandex.Mail’in giden kutusuna düşmüyor. Bu Google Apps’ın en sevdiğim özelliği sanırım. Hangi yöntemle mail giderse gitsin, webmailden Sent Items’a ulaşıp, giden tüm mailleri görebiliyorsunuz.
  • SPF kayıtları standarta uygun değil. Doğrusu nedir ne değildir, hiç bir yerde yazmıyor. Özellikle sorunlu SPF kaydı ve DKIM olmayışı mailin spam olarak işaretlenmesine neden oluyor.
  • Tüm bu eksiklikler teknik olsa da, esas yönetim gücü ve kabiliyeti Google Apps özelliklerinin yakınından bile geçmiyor.

Şunu anladım ki, web geliştiricileri için en büyük sorunlardan biri mail göndermek.

Kendi sunucuma mail server kurarım, her şeyi konfigüre ederim, eksiksiz çalışır diyorsanız da Inbox’a mail ulaştırmanın da çok zor olduğunu unutmayın.

Maalesef Google Apps artık Free account alımını kapattı. Tavsiye edebileceğim 2 servis: MailJet ve MailChimp.

Bu servisler üzerinden sorunsuz gönderim yapabilirsiniz. Tabi para ödemedikçe, aylık ve günlük limitleri var.

Sizin de önerebileceğiniz alternatifler ya da sorunuz varsa yorumlarınızı beklerim.

PHP mail() çalıştırırken “sh: -t: not found” hatası

Merhaba,

PHP ile mail() çalıştırırken

sh: -t: not found

hatası alıyorsanız, sendmail_path set etmemiş olabilirsiniz.
Muhtemelen php.ini dosyanız olması gerektiği yerde değildir ya da sendmail yüklü olmayabilir.
php.ini var mı, öncelikle onu kontrol edelim (command line kullanabilenler, dedicated vps vs kullananlar icin)

php -i | grep php.ini

Eğer command line olarak erişim sağlayamıyorsanız, web sunucunuz üzerinden phpinfo(); ile aynı değerleri alabilirsiniz.

Çıktı şöyle olmalı:

Configuration File (php.ini) Path => /usr/local/php/lib

Loaded Configuration File => /usr/local/php/lib/php.ini

Buradaki /usr/local/php path’i sizde değişkenlik gösterebilir. Fakat bakılması gereken en önemli alan “loaded configuration file”, burada bir php.ini göremiyorsanız, configuration path içine php.ini oluşturabilirsiniz.
Default bir php.ini yüklemeniz yeterli olacaktır.
Ayrıca, php.ini olmadan phpnin çalışması da normaldir. Default değerlerle çalışmaktadır.

Sendmail yüklü mü?

whereis sendmail

çalıştırdığınızda

sendmail: /usr/sbin/sendmail /usr/lib/sendmail /usr/share/sendmail /usr/share/man/man8/sendmail.8.gz

çıktısı almanız lazım.php.ini varsa ve sorun düzelmiyorsa, php.ini’de sendmail_path değerini “/usr/sbin/sendmail -i -t”  olarak set edebilirsiniz. “-i ve -t” parametresini unutmayın. “man sendmail” ile ne işe yaradıklarına bakabilirsiniz.

Eğer hosting müşterisiyseniz ve buradaki çözümleri uygulamak istiyorsanız, hosting firmanızın teknik ekibine bildirmeniz gerekebilir. Buradaki değişikliklein tamamı sunucu tabanlıdır. Eğer böyle bir erişiminiz yoksa,

ini_set(“sendmail_path”, “/usr/sbin/sendmail -i -t”);

ile her php scriptinizde sendmail_path set edebilirsiniz…

Umarım yararlı olur.