PHP ile SMTP üzerinden mail gönderme

PHP ile SMTP üzerinden mail gönderme

Yazan: Muhittin Özer | 24 Ocak 2009 | Kategoriler: PHP & MySQL
Etiketler: , , ,

Uzun süredir PHP yazısı yazmıyorum. Yazacak çok şey birikti aslında yavaştan yavaştan başlamak lazım dedim ve bugün PHP ile SMTP server üzerinden mail gönderme işlemini bir önceki yazımda bahsettiğim sitede bulduğum bir class’ı kullanarak nasıl yapabileceğimizi anlatacağım.

Öncelikle niçin PHP’nin hali hazırdaki mail() fonksiyonu ile değil de SMTP üzerinden mail gönderme işlemi yapacağız ona bir açıklama getireyim.

Kısaca bu şekilde özetledikten sonra şimdi işlemleri nasıl yapacağımıza geçelim..

Öncelikle PHP Classes sitesinden PHPMailer class’ını indiriyoruz.

İndirdiğimiz pakette class.phpmailer.php ve class.smtp.php adında 2 dosya olmalı. Biz işlemlerimizi yaparken sadece class.phpmailer.php dosyasını çağıracağız. Ayrıca paketin içerisinde yer alan ve sınıfın tüm özellik ve metodlarının açıklamalarının yer aldığı phpmailer_doc.html dökümanına göz atmayı unutmayın. Ben mail gönderirken kullanacağımız birkaç tanesini açıklayacağım. İşte mail göndereceğimiz kodlar:


require("class.phpmailer.php"); // PHPMailer dosyamızı çağırıyoruz
$mail = new PHPMailer(); // Sınıfımızı $mail değişkenine atadık

$mail->IsSMTP(); // Mailimizin SMTP ile gönderileceğini belirtiyoruz
$mail->From     = "user@domain.com"; //Gönderen kısmında yer alacak e-mail adresi
$mail->Sender   = "user@domain.com";
$mail->ReplyTo  = "user@domain.com";
$mail->FromName = "PHP Mailer";
$mail->Host     = "smtp.domain.com"; //SMTP server adresi
$mail->SMTPAuth = true; //SMTP server'a kullanıcı adı ile bağlanılcağını belirtiyoruz
$mail->Username = "user@domain.com"; //SMTP kullanıcı adı
$mail->Password    = "password"; //SMTP şifre
$mail->WordWrap = 50;
$mail->IsHTML(true); //Mailimizin HTML formatında hazırlanacağını bildiriyoruz.
$mail->Subject  = "Deneme Maili"; // Konu

//Mailimizin gövdesi: (HTML ile)
$body = "<b>Bu mail</b> bir deneme mailidir.<br /><br />SMTP server ile gönderilmiştir.";

// HTML okuyamayan mail okuyucularda görünecek düz metin:
$textBody = "Bu mail bir deneme mailidir. SMTP server ile gönderilmiştir.";

$mail->Body = $body;
$mail->AltBody = $text_body;

$mail->AddAddress("muhittin@muhittinozer.com"); // Mail gönderilecek adresleri ekliyoruz.
$mail->AddAddress("hedef@domain.com");

if ($mail->Send()) echo "Mail gönderildi";
else echo "Mail gönderimi başarısız";

$mail->ClearAddresses();
$mail->ClearAttachments();

İşlem bu kadardan ibaret. Kodlar üzerinde gerekli açıklamaları yaptım. Ancak ard arda çok fazla mail göndermek spam olarak algılanmasına neden olabilir hatta olur. Bunun için toplu gönderilecek bülten gibi maillerde fazla adres eklemek yerine aralıklarla gönderme işlemini yapmak daha mantıklı olacaktır. Bunu da kodları mail adresi ekleme işleminden sonrasını (26. satır) şu şekilde düzenleyerek yapabiliriz:


//maillerimizin $mails dizisinde olduğunu varsayıyorum
$mails = array("muhittin@muhittinozer.com","hedef@domain.com","hedef2@domain.com");

foreach($mails as $mail)
{
$mail->AddAddress($mail);
$mail->Send();
$mail->ClearAddresses();
$mail->ClearAttachments();
sleep(2); // 2 sn bekletiyoruz mail gönderme işlemi arasında..
}

Orjinal paketle birlikte buradaki örnek uygulamayı da içeren paketi buradan indirebilirsiniz.

Sizin de eklemek istedikleriniz varsa yorumlarınızı bekliyorum.

Yorumlar ve bağlantı verenler:

  1. serhat | 12 Nisan 2009, 12:46

    merhaba,
    faydalı yazınız için teşekkür ederim.

  2. Ramazan | 25 Nisan 2009, 11:19

    Yazı için ben de teşekkür ederim. Normalde smtp olarak değil de yazıda da bahsettiğiniz gibi mail fonksiyonuyla gönderiyordum. bilgilendirme güzel olmuş

  3. mert | 18 Haziran 2009, 15:24

    bilgi için teşekkürler,
    peki bir web sayfasında listelenen e-mail adreslerine veya toplu listeye nasıl göndereceğiz?

  4. Muhittin Özer | 18 Haziran 2009, 22:35

    Bu soru bilinmeyenleri çok fazla bir soru.
    Bir sayfadaki e-mail adreslerini okuma işlemini regexp fonksiyonlarıyla yapabilir ve o adreslere mail gönderebilirsiniz.
    Toplu listeye ise listenizdeki e-mail adreslerini bir döngü ile okuyup gönderebilirsiniz. Ancak SPAM olma ihtimali yüksek olur.

  5. mustafa tavbatır | 06 Ağustos 2009, 16:19

    selamlar, makale çok güzel ancak anlatımınız dışında da olsa birkaç sorum olacak. bilgilendirirseniz çok sevinirim.

    SMTP server adresi
    SMTP kullanıcı adı
    SMTP şifre

    bunları nereden öğrenebilirim. açıkçası kullandığım linux sunucusunda smtp olup olmadığını bile bilmiyorum.

    phpinfo ile sadece smtp ile ilgili bunları görebildim

    SMTP localhost
    smtp_port 25

  6. beytullah | 25 Ağustos 2009, 08:04

    $mail->send(); fonksiyonunda sorun var sanırım. kod bu functiondan itibaren çalışmıyor.

  7. çağrı | 21 Eylül 2009, 21:51

    makale ve bilgilendirme için çok teşekkür ederim. Ancak ne yaptıysam bir türlü mail gönderme işlemini gerçekleştiremedim. Port olarak 587 yi kullanıyorum 25i kullandığımda bağlantı “unable to connect to mail.ixirhc.com:25 (Bağlanılan uygun olarak belli bir süre içinde yanıt vermediğinden veya kurulan bağlantı bağlanılan ana makine yanıt vermediğinden bir bağlantı kurulamadı. ) in C:\xampp\htdocs\smtp-mail\class.smtp.php on line 89″ diye hata alıyorum. Yardımcı olursanız sevinirim.

  8. Muhittin Özer | 24 Eylül 2009, 19:09

    @Mustafa Tavbatır: SMTP bilgilerinizi hosting firmanızdan öğrenebilirsiniz.

    @beytullah: bu fonksiyon mailin gönderildiği fonksiyondur. Hata varsa bilgilerde eksiklik veya hata var demektir. Hatayı sayfaya yazdırmak için

    echo $mail->ErrorInfo;

    kodunu kullanabilirsiniz.

    @çağrı: SMTP bilgilerini hosting firmanızdan öğrenebilirsiniz. Bilgileri PHPMailer class’ında yer alan ayarlarla (port,ssl gibi) sınıfa tanıttığınızda mail göndermenizde sorun yaşamazsınız.

  9. hikmet | 04 Ocak 2010, 23:52

    arkadaşlar herkez smtp mail arayışında bende çok aradım ve müthiş bir çözüm buldum bunuda sizlerle sitemde paylaştım sadece girin ve indirin üyelik gerekmez ve takıldığınız yerde yardımcıda olurum emin olun kesim çözüm ve bu smtp mail php icinden kodu cekip okuycak tek yapman gereken iletişim formunda okuyucagı yeri gonder.php yapman ve rar içindeki 3 php yide sitenizin bulunduğu yere koymanız .
    gonder.php icerisinde yapılması gereken değişikleri acıp baktığınızda anlıycaksınız.

  10. Muhittin Özer | 05 Ocak 2010, 20:48

    Arkadaşım amacımız hazır kod dağıtmak değil nasıl yapıldığını anlatmak google’da aradığınız zaman zaten 100′lerce script var bahsettiğin şeyi yapan..

  11. Chaos TİME | 10 Ocak 2010, 11:22

    s.a kardeş cok güzel anlatmışsın ben burda yaptım ve oldu yanlız şöle birşey var kimden bölümünde ben mail adresi değilde diyelim ChaosTime(mcmd@mc-md.net) olmasın istiyorum bunu nasıl yaparız bana yardım edersen sevinirim kal salıcakla..ellerine sağlık ustat..ajax delisi

  12. Muhittin Özer | 12 Ocak 2010, 23:51

    @Chaos TİME:
    $mail->FromName = “PHP Mailer”;
    satırında “Kimden” kısmında görünecek isminizi yazabilirsiniz.

Yorum yazın:

İsminiz *

Emailiniz *

Websiteniz

Mühendis Sohbetleri

Yönetim

Bağış


Bir yazım işinize mi yaradı?
Peki bağış yapmaya ne dersiniz?


Özgürlük için Pardus...

Arama


Takip Edin


Google Friends