MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

PHP ve Email - Bolum 2 Yazar: Serkan Tarih: 01/03/02

Simdi de bir ornek yaparak konunun anlatimina devam edelim.

Text editorunuzu acarak asagidaki asamalari uygulayiniz.Burada sayilar asamalari,yanindaki aciklamalarda o asamanin ne amacla yapildigini gostermek amaciyla kullanilmistir.Gercek kodlamada bu sayilari ve aciklamalari kullanmaniza gerek yoktur.

1.Programimizi yazmaya klasik olarak HTML ust kismini hazirlayarak baslayalim.Bunun icin bir fonksiyon yaziyorum.Basitce her sayfa icin <HTML> ve <HEAD> ve </HEAD> taglarini icerecek.Fonksiyonuma eposta_ustkisim adini verdim.Bir modulun parcalari gibi her kisimi ayri ayri yazip sonra bana gerekli oldukca fonksiyonlari cagirarak gerekli icerigi elde etmis olacam...

<?php
//postaci.php

function eposta_ustkisim ()
{
?>
<HTML>
<HEAD><TITLE>Net uzerinden eposta gonderme programi</TITLE></HEAD>
<BODY>
<?php
}

2.Simdi de alt kismini hazirlayalim.Basitce kapatma taglarini bu kisima koyuyorum.Her sayfa icin alt kisimi bu fonksiyonla saglayacagiz.Fonksiyonuma eposta_altkisim adini verdim.Siz de deneme yaparken kkendi isimlerinizi kullanabilirsiniz...

function eposta_altkisim ()
{
?>
</BODY>
</HTML>
<?php
}

3.Hata mesajlarini ele alacak kisa bir fonksiyon yaziyorum.Bu fonksiyon ile kontrolumuz disina cikan prosesler icin hatalari ele almis ve uygulamamiza profosyonel bir gorunum kazandirmis olacagiz.Fonksiyonuma hata_mesaji adini verdim.

function hata_mesaji ($mesaj)
{

eposta_ustkisim ()
echo "<SCRIPT>alert(\"Hata: $mesaj\");history.go(-1)</SCRIPT>";
eposta_altkisim ();
exit;

}

4.Yukarida hazirladigim fonksiyonun bir benzerinide kullanicilara istedigim bilgi mesajlarini vermek icin hazirliyorum.Bu fonksiyon ile bazi islemlerin sonucunu kullaniciya gosterebilecegim.Fonksiyonuma kullanici_mesaji adini verdim....

function kullanici_mesaji ($mesaj)
{
eposta_ustkisim ();
echo "<SCRIPT>alert(\"Bilgi: $mesaj\");history.go(-1)</SCRIPT>";
eposta_altkisim ();
exit;
}

5.epostanin gonderilecegi web arayuzunu hazirliyorum.Bunun icin hazirladigim fonksiyona eposta_form ismini verdim...

function eposta_form ()
{
global $PHP_SELF;
/*
Fonksiyonun disindan bir degiskeni kullanacagim icin global tanimlamasi yaptim.Bundan sonra basitce HTML olarak formu hazirliyorum.Buraya kadar aklinizi karistiracak bir bolum oldugunu zannetmiyorum.Isinizi kolaylastirmak icin herseyi en basit sekilde gerceklestiriyorum.
*/
?>

<FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA"
ACTION="<?php echo $PHP_SELF ?>">
<INPUT TYPE="hidden" NAME="islem" VALUE="eposta_gonder">
<DIV ALIGN="CENTER">
<TABLE CELLSPACING="2" CELLPADING="5" WIDTH="%90" BORDER="1">
<TR>
<TH ALIGN="CENTER" WIDTH="%30">Kime</TH>
<TD WIDTH="%70"><INPUT NAME="eposta_kime" SIZE="20"></TD>
</TR>
<TR>
<TH ALIGN="CENTER" WIDTH="30%">Karbon Kopya(Cc)</TH>
<TD WIDTH="70%"><INPUT NAME="eposta_cc" SIZE="20"></TD>
</TR>
<TR>
<TH ALIGN="CENTER" WIDTH="30%">Kor Kopya(Bcc)</TH>
<TD WIDTH="70%"><INPUT NAME="eposta_bcc" SIZE="20"></TD>
</TR>
<TR>
<TH ALIGN="CENTER" WIDTH="30%">Kimden</TH>
<TD WIDTH="70%"><INPUT NAME="eposta_kimden" SIZE="20"></TD>
</TR>
<TR>
<TH ALIGN="CENTER" WIDTH="30%">Yanitlanacak Adres</TH>
<TD WIDTH="70%"><INPUT NAME="eposta_reply_to" SIZE="20"></TD>
</TR>
<TR>
<TH ALIGN="CENTER" WIDTH="30%">Konu</TH>
<TD WIDTH="70%"><INPUT NAME="eposta_konu" SIZE="40"></TD>
</TR>
<TR>
<TH ALIGN="CENTER" WIDTH="30%">Mesaj Govdesi</TH>
<TD WIDTH="70%"><TEXTAREA NAME="eposta_govde" ROWS="16" COLS="70"></TEXTAREA></TD>
</TR>

<TR>
<TH WIDTH="100%" COLSPAN="2" ALIGN="CENTER">
<INPUT TYPE="SUBMIT" VALUE="Gonder" NAME="SUBMIT">
<INPUT TYPE="RESET" VALUE="Temizle" NAME="RESET">
</TH>
</TR>
</TABLE>
</DIV>
</FORM>
<?php
}

6.mail_gonder () isimli bir fonksiyon hazirlayip icinde kendi mail fonksiyonumu yaratacam.Kendi mail fonksiyonumun ismi benim_mailim() olacak.Bu hazirlayacagim fonksyion ile PHP nin mail () fonksyionuna gerekli bilgileri gonderecem.Evet baslayalim...

function eposta_gonder ()
{
/*
Once fonksiyon disinda tanimli olan bazi degiskenleri fonksiyon icinde kullanabilmek amaciyla fonksiyonuma burada belirledigim bazi degiskenlerin degerlerinin fonksiyonun disinda oldugunu belirtiyorum.Bunun icin "global" komutunu kullanarak degiskenlerimi yaziyorum.
*/

global $eposta_kime, $eposta_cc, $eposta_bcc, $eposta_kimden, $eposta_reply_to;
global $eposta_govde, $eposta_konu;

$eposta_parcalari["eposta_kime"] = $eposta_kime;
$eposta_parcalari["eposta_kimden"] = $eposta_kimden;
$eposta_parcalari["eposta_reply_to"] = $eposta_reply_to;
$eposta_parcalari["eposta_cc"] = $eposta_cc;
$eposta_parcalari["eposta_bcc"] = $eposta_bcc;
$eposta_parcalari["eposta_konu"] = trim($eposta_konu);
$eposta_parcalari["eposta_govde"] = $eposta_govde;

if (benim_mailim($eposta_parcalari))
kullanici_mesaji('$eposta_konu' konulu emailiniz basarili sekilde gonderildi.");
else
hata_mesaji("Bilinmeyen bir hata meydana geldi.");
}

7.Simdi de kendi email fonksiyonumuzu yazalim.Bu fonksiyon ile aslinda mail () fonksiyonuna hazirladigimiz bilgileri belirli bir kontrol cercevesinde gecirecek...

function benim_mailim ($eposta_parcalari)
{
$eposta_kime = $eposta_parcalari["eposta_kime"];
$eposta_kimden = $eposta_parcalari["eposta_kimden"];
$eposta_reply_to = $eposta_parcalari["eposta_reply_to"];
$eposta_cc = $eposta_parcalari["eposta_cc"];
$eposta_bcc = $eposta_parcalari["eposta_bcc"];
$eposta_konu = $eposta_parcalari["eposta_konu"];
$eposta_govde = $eposta_parcalari["eposta_govde"];

if (empty($eposta_kime) hata_mesaji("Kime bolumu bos birakilmis!");
if (empty($eposta_konu) hata_mesaji("Konu bolumu bos birakilmis!");
if (empty($eposta_govde) hata_mesaji("Mesaj bolumu bos birakilmis!");

$eposta_kime = str_replace(";", ",", $eposta_kime);

$eposta_basliklari = ' ';
if (!empty($eposta_kimden)) $eposta_basliklari .= "From: $eposta_kimden\n";
if (!empty($eposta_reply_to)) $eposta_basliklari .= "Reply-to: $eposta_reply_to\n";
if (!empty($eposta_cc)) $eposta_basliklari .= "Cc: " . " . str_replace(";", ",", $eposta_cc) . "\n";
if (!empty($eposta_bcc)) $eposta_basiklari .= "Bcc: ". str_replace(";", ",", $eposta_bcc) . "\n";

$eposta_konu = stripslashes($eposta_konu);
$eposta_govde = stripslashes ($eposta_govde);

return mail($eposta_kime, $eposta_konu, $eposta_govde, $eposta_basliklari);
}

8.En son olarak gizli HTML kontrolleri ile sagladigimiz ve yapilacak islemlere gore fonksiyonlarin secilmesini sagladigimiz bolumu yazalim.

switch ($islem)
{
case "eposta_gonder":
eposta_ustkisim ();
eposta_gonder ();
eposta_altkisim ();
break;
case "eposta_form":
eposta_ustkisim ();
eposta_form ();
eposta_altkisim ();
break;
default:
eposta_ustkisim ();
eposta_form ();
eposta_altkisim ();
break;
}
?>

9. Burada yazilan kodlari "postaci.php" olarak kayit edin.

10.Programinizi browser yardimiyla calistirin...

Ornek Dosyalar

http://www.turk-php.com/ornekler/postaci.php

http://www.turk-php.com/ornekler/postaci.phps

Program nasil calisiyor?

Programin ana omugasi zaten kendi kendini acikliyor.Biz anahtar fonksiyonlar uzerinde duralim.Sonuc itibari ile basit bir php programi ve ornek olmasi amaciyla yazildi...

Ilk olarak benim_mailim () fonksiyonunu inceleyelim.Bu fonksiyon argument olarak bir diziyi almaktadir.Dizideki elemanlarin indexini biz belirledik.

Bu dizinin elemanlari icin bir deger tasiyip tasimadiklarina bakiliyor.Buna gore kullaniciya hata mesajlari ile bilgi veriliyor.

Hem konu hemde govdesi bos emailler gondermke icin programdan asagidaki satirlari cikarin.

if (empty($eposta_konu) hata_mesaji("Konu bolumu bos birakilmis!");
if (empty($eposta_govde) hata_mesaji("Mesaj bolumu bos birakilmis!");

Bundan sonra $eposta_basliklari isimli degiskeni bos olarak baslatiyorum.Bu cok gerekli degil ama guzel bir programcilik teknigi.

Bu asamadan sonra gozumuze takilan bazi komutlari neden kullandigimizi aciklayalim.Burada kullanilan str_replace komutu ile kullanicinin girmis olabilcegi ";" noktali virgul karekteri "," virgul ile degistirilmektedir.Biliyorsunuz PHP'nin mail gonderme fonksiynu olan mail () yanlizca girdileri "," virgul ile ayirmamiza izin vermektedir.

stripslashes fonksyonu ile mesaj konusu ve govdesi icinde yer alabilcek ters slash isaretlerini siler.Ornek verecek olursak (\' bicimindeki bir yazim 'haline getirilir.

Daha fazla bilgi icin bakiniz:

http://turk-php.com/manual/function.stripslashes.html

Eger yanlizca HTML taglarinin veya PHP taglarinin yazilan mesajdan silinmesini istiyorsaniz strip_tags () fonksiyonunu da kullanabilirsiniz.

Strip kelimesinin turkcedeki anlami soymak manasindadir.Bu sekilde kullanirsak mesajin icindeki herseye text muamalesi yapilmasinida saglamis olacagiz.Bunun icin ikinci satiri asagidaki gibi degistirin...

$eposta_govde = strip_tags(stripslashes($eposta_govde));

Unutmayin mail() fonksiyonu emaili,gonderilen kullanciya ulasmasini garanti etmez.Fonksiyon basarili olarak donmus olsa bile bu her zaman mailin kullaniciya ulastigini gostermez.

Ikinci bolumde epostalara PHP ile nasil dosya eki yapabilceginiz konusuna deginilecektir.

Kalin Sagilicakla,

Her turlu gorus ve onerinizi eposta yoluyla serkan@turk-php.com adresine gonderebilir veya turk-php.com/forum adresinde tartisilmasini saglayabilirsiniz...

Serkan Hadi Ceylani
serkan@turk-php.com

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>