Php SMTP Mail Göndermek

PHPMailer Sınıfı İle SMTP’den Mail Gönderme

Php’de mail göndermek için iki farklı yol mevcut. Php’nin dahili olarak gelen mail() fonksiyonunu kullanmak veya SMTP üzerinden göndermek. Bunlardan ikincisi olan SMTP yoluyla gönderilen e-postaların güvenilirliği ve doğruluğu daha yüksek oluyor. E-postalarınızın spam(gereksiz) kutusuna düşmesini istemiyorsanız SMTP protokolünü kullanmanızı tavsiye ederim. SMTP’nin daha güvenilir olmasının sebebiyse SMTP ile e-posta gönderebilmek için geçerli bir mail adresinin gerekmesidir. Php’nin standart mail fonksiyonu ile yapılan e-posta gönderimlerinde e-posta adresi zorunluluk olmadığı için doğrulanması mümkün olmayan, sunucunun genel imzasına sahip e-postalar gönderilebiliyor. Bu da genellikle reklam amaçlı spam e-postaların bu yolla gönderilmesi anlamına geliyor. Dolayısıyla gönderilen e-postalar da şüpheli konumuna düşüyor. Neyse demek istediğimi anladığınızı umarak artık Php’de SMTP ile nasıl mail gönderebileceğinizi anlatmaya başlıyorum.

Adım Adım PHP Kullanarak SMTP İle Mail Gönderme İşlemi

Yazının başlığından da anlayacağınız üzere bu işlem için PHPMailer isimli php sınıfını kullanacağız. Kodlara geçmeden evvel buradan sınıfımızın son sürümünü indiriyoruz. Hangi dosyayı indirmem lazım diye tereddüt eden arkadaşlar en çok indirme sayısına sahip zip uzantılı dosyayı indirebilirler.

İndirdiğiniz arşiv dosyasından class.phpmailer.php ve class.smtp.php isimli iki dosyayı alarak projenizin bulunduğu klasöre kopyalamanız gerekiyor.

İki dosyayı kopyaladıktan sonra mail gönderim işlemini yapacağımız dosyayı oluşturuyoruz ve aşağıdaki kod ile PHPMailer sınıfını dosyaya dahil ediyoruz ve ikinci satırdaki kod ile sınıfımızı başlatıyoruz.

Aşağıdaki satır yardımıyla da sınıfımıza e-postamızı SMTP yoluyla göndereceğimizi söylemiş olduk.

Şimdi sıra geldi SMTP ile ilgili kullanıcı adı, parola, port gibi ayarların yapıldığı satırlara.

E-postanın kimin adına gönderildiğini aşağıdaki satır yardımıyla ayarlayabiliyoruz.

Yine benzer şekilde e-postayı göndereceğimiz kişinin bilgilerini de ayarlıyoruz.

Göndereceğiniz e-postanın karakter setini de aşağıdaki satırdaki gibi belirtebilirsiniz. Bunu UTF-8 olarak bırakmanızı tavsiye ederim.

Kişilerle ilgili ayarları tamamladığımıza göre şimdi de göndereceğimiz e-posta ile ilgili ayarlara geçebiliriz.

Son olarak da aşağıdaki satırlar yardımıyla gönderim işlemini tamamlıyoruz. If koşulu yardımıyla gönderim başarılı/başarısız olduğu durumlarda yapılacakları da burada belirtiyoruz.

Toparlayacak olursak yazdığımız kodların tamamı aşağıdaki gibi olacaktır. Yazının sonuna sık karşılaşılan problemlerle ilgili birkaç not yazacağım lütfen onları da okuyun.

SMTP İle Gönderilen E-postaya Dosya Eklemek
Bazen gönderdiğiniz e-postalara dosya eklemeniz gerekebilir. Bunun için AddAttachment parametresi işinizi görecektir. Aşağıdaki kodda göreceğiniz üzere ek olarak eklenecek olan dosyanın yolunu yazmanız yeterlidir.

Birden Fazla Kişiye E-Posta Göndermek
Birden fazla kişiye e-posta göndermek için AddAddress parametresini kullanmanız yeterli olacaktır. Ama eğer CC ya da BCC olarak eklemek istiyorsanız onun için de kodunuza AddCC ya da AddBCC parametrelerini eklemeniz yeterli olacaktır. Aşağıdaki kodda üçüyle ilgili örneği de görebilirsiniz.

Gönderilen E-postanın Yanıt Adresini Değiştirmek
Son olarak da gönderdiğimiz e-postaya yapılacak yanıtlamaların başka bir e-postaya gitmesini istiyorsak onu PHPMailer sınıfına nasıl belirteceğimizi göreceğiz. AddReplyTo parametresi ile yanıt adresini belirtebilirsiniz.

PHPMailer Sınıfı ve SMTP Protokolü İle İlgili Birkaç Not
Not 1: SMTP portu her zaman için 587 olmak zorunda değildir. Bazı sunucularda 25 portuna ya da başka bir porta ayarlanmış olabilir.
Not 2: SMTP ile mail gönderimini Gmail sunucuları üzerinden yapacaksanız port ayarının yapıldığı satırdan sonra $mail->SMTPSecure = ‘tls’; kodunu eklemelisiniz.
Not 3: Unutmayın ki gönderici adres kısmına ne yazarsanız yazın SMTP ile e-posta gönderirken hangi hesabın giriş bilgilerini yazarsanız e-postayı onun adına gönderecektir.
Not 4: Bir formdan gelen dosyayı e-posta ile göndermek istiyorsanız önce o dosyayı sunucunuza yüklemeli daha sonra maili gönderirken yüklediğiniz yolu PHPMailer sınıfına göstermelisiniz. Dosya yolunu gösterme işlemini yukarıda göstermiştim.

E-posta listesine abone olarak yeni yazılarımdan anında haberdar olabilirsiniz.

Ahmet İşcan

Php Developer..

12 thoughts on “PHPMailer Sınıfı İle SMTP’den Mail Gönderme

  1. Notlar kısmını okudumda gayet güzel bilgiler emeğine sağlık hocam başarılar dilerim..

  2. Merhaba, ben gmail adresime mail gönderiyorum. Cevap için farklı bir mail adresini yazmama rağmen $mail->SetFrom daki adreside cevap adresi olarak alıyor. Ben sadece $mail->AddReplyTo() dan gelen adrese mesaj yollamak istiyorum. Bunu nasıl yapabilirim?
    Yararlı yazınız için ayrıca teşekkür ederim.

    1. Merhaba Hüseyin bey, aşağıdaki gibi AddReplyTo kısmını SetFrom dan önceye alırsanız çalışabilir diye düşünüyorum. Benzer bir problemi o şekilde çözmüştüm zamanında.

      $mail->AddReplyTo()
      $mail->SetFrom

    1. Merhaba,
      Sorunu biraz araştırdım. Birden fazla sebebi olabilirmiş. İlk olarak tüm ayar parametrelerini kontrol edin onlardan kaynaklanma ihtimali yüksek. Onun dışında sunucuda fsockopen fonksiyonu kapalıysa yine aynı hata alınabiliyormuş. Bunların dışında da sebep olabilecek durumlar var. Maalesef kesin bir yanıtı yok sorunuzun.

  3. Merhaba,

    Siteyi ziyaret eden herhangi bir kullanıcı, iletişim sayfasındaki form bilgilerini doldurduktan sonra boş mail düşüyor ve benim en yukarıda elle girmiş olduğum php bilgileri maili geliyor. Yani kullanıcının girdiği veriler değil de benim girdiğim kodlar mail olarak geliyor. Yardımcı olur musunuz ?

  4. Stmp mail gönderiminde en çok tereddüt ettiren şey mail hesabı şifre güvenli.Şifre Güvenliği için ne önerirsiniz ?

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir