Barış AKDEMİR

Web Yazılım Günlüğü

Php ile Mail Gönderme

Kullanıcı onaylamak, bülten göndermek gibi durumlarda php ile mail göndermeye ihtiyaç duyuyoruz. Basit olarak php’nin mail fonsiyonuyla bu işlemi gerçekleştirebiliz ancak; spama düşme, eksik gönderim gibi durumlardan dolayı kütüphane kullanmak en mantıklısı. Php için bir çok mail kütüphanesi yazılmış ancak en basiti ve kullanışlısı kuşkusuz PhpMailer. Önce kütüphanenin nasıl indirileceğini anlatayım sonra nasıl kullanılacağını anlatalım. Kütüphaneyi indirmek için bu adrese gidin ve sağ kısımda bulunan “Download ZIP” butonuna tıklayın. Benim anlatacağım kısım için, ana dizindeki üç dosyayı kullanıcaz(class.phpmailer.php,class.pop3.php,class.smtp.php).

PhpMailer ile iki farklı şekilde Mail Gönderme mümkün. İlki smtp kullanarak mail göndermek. Bu yöntemde; mail adresinizin kullanıcı adı ve şifresi ile giriş yapılır ve mailiniz bu şekilde gönderilir. Kullandığınız sunucu dışındaki bir yerden mail gönderecekseniz bu yolu kullanmak mantıklı. Örneğin gmail. Ancak aynı sunucu üzerindeki bir mail adresini kullanacaksanız pop3 yöntemini kullanmanızı daha iyi olur. Aynı sunucu üzerinde ise hem aralarında fark yoktur hem de smtp ile göndermek biraz daha sunucuyu yorabilir.

Php Smtp ile Mail Gönderme Örneği (include edilen dosyalar ile aynı dizindedir):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>PHPMailer - SMTP test</title>
</head>
<body>
<?php

//Zaman dilimi
date_default_timezone_set('Etc/UTC');

require_once 'PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer();
//turkce karakterler icin
$mail->CharSet='utf-8';
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Hataların Gösterilmesi kapalı için false, kullanıcı hataları için 1, hem kullanıcı hem de sunucu hataları için 2
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
//mail sunucusunun adresi
$mail->Host = "mail.example.com";
//mail sunucusunun portu
$mail->Port = 25;
//yukarıdaki iki bilgiyi bulamazsanız, ilgili mail adresini thunderbird gibi bir mail istemcisine kurun ve bağlantı bilgilerine bakın.
$mail->SMTPAuth = true;
//kullanıcı adı
$mail->Username = "yourname@example.com";
//şifre
$mail->Password = "yourpassword";
//mail kimden geliyor gibi görünecek.
$mail->setFrom('from@example.com', 'First Last');
//cevapla butonuna bastığında kimin mail adresine gönderilecek.
$mail->addReplyTo('replyto@example.com', 'First Last');
//mail gönderilecek adres
$mail->addAddress('whoto@example.com', 'John Doe');
//mail konusu
$mail->Subject = 'PHPMailer SMTP test';
//mail gövdesi. bu örnekte harici bir html dosyasından alınıyor ancak düz yazı da yazabilirsiniz.
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//bu kısım önemli. mail yüklenirken vb. durumlarda bu yazı görünüyor.
$mail->AltBody = 'This is a plain-text message body';
//dosya eklemek isterseniz bu şekilde ekliyorsunuz.
$mail->addAttachment('images/phpmailer_mini.gif');

//mail gönderme işlemi.
if (!$mail->send()) {
    echo "mail gönderilemedi: " . $mail->ErrorInfo;
} else {
    echo "mail başarıyla gönderildi.";
}
?>
</body>
</html>

Php Pop3 ile Mail Gönderme Örneği (include edilen dosyalar ile aynı dizindedir):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>PHPMailer - mail() test</title>
</head>
<body>
<?php
require_once 'PHPMailerAutoload.php';

$mail = new PHPMailer();
//turkce karakterler icin
$mail->CharSet='utf-8';
//mail kimden geliyor gibi görünecek.
$mail->setFrom('from@example.com', 'First Last');
//cevapla butonuna bastığında kimin mail adresine gönderilecek.
$mail->addReplyTo('replyto@example.com', 'First Last');
//mail gönderilecek adres
$mail->addAddress('whoto@example.com', 'John Doe');
//mail konusu
$mail->Subject = 'PHPMailer mail() test';
//mail gövdesi. bu örnekte harici bir html dosyasından alınıyor ancak düz yazı da yazabilirsiniz.
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//bu kısım önemli. mail yüklenirken vb. durumlarda bu yazı görünüyor.
$mail->AltBody = 'This is a plain-text message body';
//dosya eklemek isterseniz bu şekilde ekliyorsunuz.
$mail->addAttachment('images/phpmailer_mini.gif');

//send the message, check for errors
if (!$mail->send()) {
    echo "mail gönderilemedi: " . $mail->ErrorInfo;
} else {
    echo "mail başarıyla gönderildi.";
}
?>
</body>
</html>

Bu iki örnekten birisini seçerek Php ile Mail Gönderebilirsiniz. Toplu mail gönderecek olanlara kıs bir uyarı yapayım. Mailleri seri bir şekilde arka arkaya gönderirseniz spam’a düşme ihtimali artar, gmail kullansanız bile. O nedenle aralıklarla yavaş yavaş göndermenizi öneririm.

Hosting Nedir?

Hosting; paylaşımlı olarak, bir çok web sitesi tarafından kullanılan sunucudan, aldığınız hizmettir ve sahip olduğunuz web sitesinin barındırığı yerdir. Büyük çoğunlukla; Windows ve Linux olmak üzere ikiye ayrılır. Linux sunucular Php‘yi desteklerken; Windows sunucular IIS sayesinde, hem Php’yi hem de .Net’i destekler. Ancak Php kullanacaksanız, Linux hizmet almanızı öneririm. Çünkü Php Linux için geliştirilmiştir ve Windows sunucularda tam performans ve yeterlilikte çalışmayabilir.

Hosting’i kullanmaya başlamak için; satın aldığınız alan adını, hosting’in name server’larına yönlendirmeniz gerekmektedir. Yapılan güncelleme hemen gerçekleşmeyebilir, o nedenle biraz sabırlı olmak gerek. Ancak yine de bilgisayarınızda dns temizliği yapmakta yarar var. Ayrıca, proxy siteler aracılığıyla da, güncellemenin gerçekleşip, gerçekleşmediğini kontrol edebilirsiniz.

Hosting hizmeti; ziyaretçi sayısı az olan web siteleri için uygundur. Ancak ziyaretçi sayınız fazla ise, VPS Sunucu ya da VDS sunucu kiralamanız gerekmektedir.Peki VPS, VDS ne demektir, aralarındaki farklar nelerdir. İki sunucu türü de, yönetimin tamamen sizde olduğu ve size ait olan, yüksek performanslı sunuculardır. Bu iki sunucu türü ile de; ister tek bir site yayınlayabilir ya da Bayi Hosting mantığıyla birden fazla siteye hizmey verebilirsiniz.

VPS Nedir?
VPS Sucularda sanal bir bölünme söz konusudur. Yani ana sunucu üzerindeki merkezi bir yazılım aracılığıyla, sunucu parçalara ayrılır ve bu parçalardan birisi sizin hizmetinize sunulur. Bir yerde bulut sunucudur ve kaynak paylaşımı vardır.

VDS Nedir?
VDS Sunucularda sanal bir paylaşım yoktur. Almış olduğunuz hizmetteki yeterlilikler tamamen size tahsis edilmiştir. Başka bir sunucu ile ortak çalışmadığı için sunucudaki sistem tamamen sizin hizmetinizdedir. Bu nedenle VPS’e göre yüksek performans ile çalışır.

Domain/Alan Adı Nedir?

Alan adı; ziyaretcilerin, web sitenize ulaşmak için kullanacakları bir isimdir. Örnek vermek gerekirse; facebook.cok, google.com birer alan adlarıdır. Bir web sitesine sahip olmak isteyen kişinin, ilk önce bir alan adı satın alması gerekir. Dünyada alan adı satışı yapan bir çok firma var. Bu firmalardan birisini seçerek, alan adı alabilirsiniz. Alan adı alırken dikkat edilmesi gerekenlerden bahsedelim. Alan adını alacağınız firmanın sitesine kayıt olurken, gerçek bilgilerinizi vermelisiniz. Çünkü alan adı sizin adınıza kaydedilecek ve hak sahibi siz olacaksınız. Herhangi bir karışıklıkta bu bilgilerle itiraz edeceksiniz. Vereceğiniz e-posta adresinin güvenilir, yani başkaları tarafından ele geçirilmesi zor olması gerekmektedir. Domain transferlerinde e-posta yoluyla onay yapıldığından bu konuya dikkat etmek gerekir. Ayrıca, domain kayıt süresinin bitimine doğru; belli aralıklarla, vereceğiniz e-posta adresine hatırlatma mailleri gelecektir.

Alan adı uzantıları : .com, .net, .org birer alan adı uzantılarıdır. Günümüzde çok çeşitli alan adı uzantıları bulunmakta. Bu konuda dikkat edilmesi gereken nokta ise, alacağınız alan adında, uzantının çöp sitelerle dolmuş olmamasıdır. Arama motorları; çöp sitelerle dolmuş alan adı uzantılarına önem vermediğine çok kez rastlanır. Hatta ilgili alan adında hiç bir siteyi indexlemediği de görülür. Bu nedenle aldığınız alan adı uzantısına dikkat etmelisiniz.

Alan adı ve Seo : Eğer hedef anahtar kelimelerinizi içeren bir alan adına sahipseniz, yükselmeniz biraz daha kolay olacaktır. O nedenle; arama motorlarında yükselmeyi hedefliyorsanız, hedef anahtar kelimeleriniz doğrultusunda bir alan adı almanız daha yararlı olacaktır.

Css Çakışması Sorunu

Web tasarımla uğraşan bir çok kişi, css dosyalarının çakışması sorunuyla karşılaşılmıştır. Aynı tag’a stil atanmış css dosyalarından dolayı sorun yaşanır. Bu büyük sorunun çok basit bir çözümü var aslında. “Scoped” metodu. Stillerin farklı olmasını istediğiniz divin içerisinde “style type=”text/css” scoped” tagları arasına css kodlarını yazıyorsunuz ya da harici css dosyanızı çağırıyorsunuz. Burda dikkat edilmesi gereken nokta ise şu : bu method ile cağırdığınız stiller içerisinde olduğu tag’da geçerli oluyor. Bu divin dışarısında ise diğer methodlarla yazılan/çağırılan cssler geçerli olacaktır. Örnek kodu aşağıda ekliyorum. Bu örnek kod Html5‘i destekleyen tarayıcılar için. Ardından tüm tarayıcılar için olan örneği de ekleyeceğim.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Css Çakışması Sorunu</title>
<style type="text/css">
  p { color:yellow; }
</style>
</head>

<body>
<div>
<p>Sarı</p>
</div>
<div>
<style type="text/css" scoped>
  p { color:blue; }
</style>
<p>Mavi</p>
</div>
</body>
</html>

Html5 tarayıcılarda sorunumuzu çözdük ama ya desteklemeyenler için. Geliştiriciler bunun için de bir çözüm bulmuşlar. “jQuery Scoped CSS”; jquery üzerine geliştirilmiş javascript kütüphanesi bu sorunu çözüyor. Kütüphaneyi bu adresten indirebilirsiniz. İndirdiğiniz dosyalarda bir örnek mevcut ancak ben yine de örnek kodu aşağıda paylaşıyorum.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Css Çakışması Sorunu</title>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style type="text/css">
  p { color:yellow; }
</style>
</head>

<body>
<div>
<p>Sarı</p>
</div>
<div>
<style type="text/css" scoped>
  p { color:blue; }
</style>
<p>Mavi</p>
</div>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="jquery.scoped.js"></script>
</body>
</html>