PHP ile web tabanlı mail gönderme (iletişim) scripti

Yazar: Caner | 31 Ocak 2010 Pazar 19:39








Eğer sunucu izinleriniz müsaitse veya gerekli yetkilere sahipseniz PHP aracılığıyla web üzerinden e-mail gönderebilmeniz ve bu vesileyle sitenize bir iletişim formu ekleyebilmeniz mümkün. Fakat ne yazık ki php mail fonksiyonu bir çok ücretsiz hosting sağlayıcıda ya devre dışı bırakılmıştır ya da gün içerisinde gönderilebilecek mail adedi sınırlandırılmıştır, spam mailcilerin bu iş için ilk önce ücretsiz sağlayıcılara başvurduklarını ve hiç bir sağlayıcının kara listeye düşmek istemeyeceğini göz önünde bulundurunca, sanırım durum gayet anlaşılabilir.

Bu açıdan php mail fonksiyonunu kullanabilmek için öncelikle ücretli bir hosting sahibi olmanız gerektiğinin altını çizmekte fayda var.

PHP ile web tabanlı mail gönderme (iletişim) scripti
İşe ilk olarak maili teslim alacak kişi ve mailin konusu gibi tanımlamalarla başlıyoruz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
session_start();

//  PHP Webmail Script
//  Caner ÖNCEL - http://www.egonomik.com

// Tanımlamalar
    $alici_isim = "Benim Adım"; // E-maili alacak kiÅŸi
    $alici_mail = "benim@emailim.com"; // E-maili alacak mail
    $konu  = "Web ziyaretçi mesaji."; // E-mailin konusu

// Maili gönderen kişinin IP adresi ve tarayıcı bilgisi
    $userip = $_SERVER['REMOTE_ADDR'];
    $browser = $_SERVER['HTTP_USER_AGENT'];

if($_GET['mail'] == "gonder") {

// Post ile gelen deÄŸiÅŸkenler
    $isim    = $_POST['isim'];
    $email   = $_POST['email'];
    $website = $_POST['website'];
    $mesj    = $_POST['mesaj'];

    $_SESSION['isim'] = "$isim";
    $_SESSION['email'] = "$email";
    $_SESSION['mesj'] = "$mesj";

ardından post ile gönderilen isim, email gibi girilmesi zorunlu alanların kontrolünü sağlıyoruz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Zorunlu alanlar kontrol ediliyor
if($isim == "") {
    $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Lütfen isminizi girin!</span>';
    header('location:index.php');
    die(); }

if(!eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", $email)) {
    $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Lütfen geçerli bir e-mail adresi girin!</span>';
    header('location:index.php');
    die(); }

if($mesj == "") {
    $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Lütfen bize iletmek istediÄŸiniz mesajınızı girin!</span>';
    header('location:index.php');
    die(); }

if($_SESSION['security_code'] != $_POST['guvenlik_kodu']) {
    $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Güvenlik kodunu hatalı girdiniz!</span><br>Lütfen ekranda gördüğünüz iÅŸlemin sonucunu yanındaki kutucuÄŸa giriniz.';
    header('location:index.php');
    die(); }

sonra kötü niyetli kullanımların önüne geçmek için post girdilerindeki olası html kodlarını (< > ve “) egale edecek olan bir fonksiyon hazırlıyoruz

1
2
3
4
5
6
7
// Kod arındırma fonksiyonu: <> ve "
function temizle($text) {  
    $text = trim($text);    
    $metin = array('<','>','"');  
    $duzenle = array('','','');    
    $temiz_text = str_replace($metin,$duzenle,$text);    
    return $temiz_text;  }

bu fonksiyonun kullanımı tamamen isteğe bağlı, bilinen e-mail sağlayıcılar zaten gerekli tüm önlemleri alırlar fakat biz yine de tedbiri elden bırakmayalım.

Daha sonra posta kutumuza düşecek olan mesajın HTML tabanlı kalıbını hazırlıyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// HTML Mesaj içeriği
    $mesaj = 'Web sitesinden gönderilen mesaj aÅŸağıdadır:
    <br>
    ====================================<br><br>
    <b>Gönderen</b>     : '
.temizle($isim).'<br>
    <b>E-Mail</b>    : <a href="mailto:'
.temizle($email).'">'.temizle($email).'</a><br>
    <b>Web Site</b>  : <a href="'
.temizle($website).'">'.temizle($website).'</a><br>
    <b>IP Adresi</b> : '
.$userip.'<br>
    <b>Tarayıcı</b>  : '
.$browser.'<br><br>
    <b>Mesaj</b>     : <br>'
.temizle($mesj).'<br><br>
    ====================================
    <br><br>
    <br><br>
    ____________________________________<br>
    Egonomik.com<br>
    <a href="http://www.egonomik.com">http://www.egonomik.com</a>'
;

ardından mesajın alıcı, gönderen, dil kodlaması türü header bilgilerini tanımlıyoruz

1
2
3
4
5
6
// Mail gövdesi
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=windows-1254"' . "\r\n";
    $headers .= 'To: '.$alici_isim.' <'.$alici_mail.'>' . "\r\n";
    $headers .= 'From: '.$isim.' <'.$email.'>' . "\r\n";
    $headers .= 'X-mailer: Egonomik.com' . "\r\n";

Tüm kontroller ve tanımlamalardan sonra sıra, maili göndermeye, olası bir hata yüzünden gönderilemezse hata mesajını tanımlamaya geldi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Mail gönderiliyor    
if(mail($to,$konu,$mesaj,$headers)) {
    unset($_SESSION['isim']);
    unset($_SESSION['email']);
    unset($_SESSION['mesj']);
    $_SESSION['mesaj'] = '<span class="basarili">Mesajınız baÅŸarıyla iletildi!</span>';
    header('location:index.php');
    die(); }

// Eğer mail teknik bir hatadan ötürü veya başka bir sebeple gönderilemez ise
else {
    session_destroy();
    $_SESSION['mesaj'] = '<span class="hata"><b>HATA:</b> Mesajınız iletilemedi! Lütfen tekrar deneyiniz.</span>';
    header('location:index.php');
    die(); }

} // mail == "gonder" sonu

HTML mail formuna (iletişim formu) geçmeden önce sıra ufacık bir güvenlik önlemi almaya geldi. Bu önlem spam mailcileri ve botları engellemek için gerekli ve işi bir kaç satırda halletmek için ziyaretçiye ufak bir toplama işleminin sonucunu soracağız

1
2
3
4
5
6
7
// Güvenlik kodu için rastgele sayılar üretiliyor
    $sayi1 = rand(1,9);
    $sayi2 = rand(1,9);
    $toplam_sayi = $sayi1+$sayi2;

// Güvenlik kodu session olaran tanımlanıyor
    $_SESSION['security_code'] = "$toplam_sayi";

şimdi ekrana yazdırılacak olan HTML kodlarına geçebiliriz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
echo '<html>
<head>
<title>Egonomik.com PHP Web Mail Script</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
<style type="text/css">
body {
    color: #9A9A9A;
    font-family: Georgia;
    font-size: 11px; }

table {
    color: #71889D;
    font-family: Georgia;
    font-size: 12px; }

legend {
    color: #0080FF;
    font-size: 14px;
    font-weight: bold; }

.basarili {
    font-family: Georgia;
    font-size: 12px;
    color: #6CAE24; }

.hata {
    font-family: Georgia;
    font-size: 12px;
    color: #BB2E0B; }
</style>
</head>

<body>'
;

body tagından sonra olası hata ve baÅŸarılı mesajları için “mesaj” session deÄŸiÅŸkenini ekrana yazdıracak olan alanı tanımlıyoruz. Bu alan, scriptin “Hata: İsminizi yazmadınız” veya “Tebriker, mesajınız gönderildi” türü mesajları görüntülenmesini saÄŸlayacak.

1
2
3
if($_SESSION['mesaj'] != "") {
    echo '<fieldset style="width: 450px; border: 1px solid #E9E9E9"><legend>Bilgi</legend>
    '
.$_SESSION['mesaj'].'</fieldset><br>'; }

Şimdi sıra mail formu ve ziyaretçiden talep edilen form elemanlarını hazırlamakta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
echo '<form action="?mail=gonder" method="POST">
<fieldset style="width: 450px; border: 1px solid #E9E9E9">
<legend>Mail Gönder</legend>

<table border="0" width="100%" cellpadding="2">
    <tr>
        <td width="124"><b>Adınız</b></td>
        <td> <input type="text" name="isim" value="'
.$_SESSION['isim'].'"></td>
    </tr>
    <tr>
        <td width="124"><b>E-mail</b></td>
        <td> <input type="text" name="email" value="'
.$_SESSION['email'].'"></td>
    </tr>
    <tr>
        <td width="124"><b>Web siteniz</b></td>
        <td> <input type="text" name="website" value="http://"></td>
    </tr>
    <tr>
        <td width="124" valign="top"><b>Mesajınız</b></td>
        <td><textarea rows="6" name="mesaj" cols="30">'
.$_SESSION['mesj'].'</textarea></td>
    </tr>
    <tr>
        <td width="124"><b>Güvenlik kodu</b></td>
        <td> '
.$sayi1.' + '.$sayi2.' = <input type="text" name="guvenlik_kodu" size="4" autocomplete="off"></td>
    </tr>
    <tr>
        <td width="124">&nbsp;</td>
        <td><input type="submit" value="Gönder"></td>
    </tr>
</table>
</fieldset>
</form>'
;

formu da hazırladıktan sonra son iş olarak olası mesaj session değişkenlerini yok ediyor ve html bitiş satırlarını yazıyoruz

1
2
3
4
5
6
if($_SESSION['mesaj'] != "") {
    unset($_SESSION['mesaj']); }

echo '<a href="http://www.egonomik.com"><font color="#71BBE3">Egonomik.com</font></a> PHP Web Mail Script
</body>
</html>'
;

Nur topu gibi ve tek sayfalık bir mail scriptimiz oldu, hayırlı uğurlu olsun.

Scripti dosya olarak indirmek için:
Download


Benzer Yazılar

  1. PHP ile HTML İçerikli E-Mail Gönderme Scripti
  2. PHP – Mail gizleme fonksiyonu
  3. PHP – Session ile ÅŸifreli eriÅŸim scripti
  4. PHP – Toplama iÅŸlemi ile güvenlik kodu scripti
  5. PHP ile Güvenlik Kodu (Capthca) Scripti

7 Yorum » “PHP ile web tabanlı mail gönderme (iletiÅŸim) scripti”

  1. gevv

    2 Åžubat 2010 [02:14]

    Teşekkürler Caner detaylı faydalı bir yazı olmuş  nasıl görmedim bu yazıyı :) anlaşıldı yetişemiyorum rss abonesi olmanın zamanı geldi :D

  2. gevv

    2 Åžubat 2010 [14:55]

    Tekrar merhaba
     
    Ben yazıdaki Kod arındırma fonksiyonunu wordpress  yazılarında  kullanmak  istiyorum “<”  “>” simgelerini html olrak  görüntülemem  gerekli :) saÄŸolasın  verdiÄŸin  kodlar  ile  yaptım ama bir  sorun   var :)
     
    kodlar  ile bir kaç deneme yaptım farklı  bir  uygulamadan  kopya çektim :)   istediğim  oldu ama  hesap  dışı  bir  gelişme  var :D

    http://img23.imageshack.us/img23/1780/28834616.png

    fonksiyon dosyasına  eklediÄŸim kodlar  yazı  içindeki  tüm “<” “>”  iÅŸaterlerini deÄŸiÅŸtiriyor :) acaba  sadece  pre  /pre  tagları  arasındaki “<” “>”  simgelerini  deÄŸiÅŸtirmesini  saÄŸlayabilrmiyiz

    yeni kod http://shorttext.com/e1pmeslfp

  3. Serkan

    8 Åžubat 2010 [20:05]

    Paylaşım için teşekkürler..
    Yalnız ben uygulamayı başaramadım bu işlerde yeni sayılırım sanırım ondan..

    gönder dediğimde

    Warning: mail() [function.mail]: SMTP server response: 501 Your domain does not seem to be valid. Could not find MX record for your domain. in D:\Home\lisemilleti.com\httpdocs\serkan\malzemeler\index.php on line 83

    Warning: Cannot modify header information – headers already sent by (output started at D:\Home\lisemilleti.com\httpdocs\serkan\malzemeler\index.php:83) in D:\Home\lisemilleti.com\httpdocs\serkan\malzemeler\index.php on line 94

    şöyle bir hata geliyor açıklayabilen var mı yardımcı olursanız sevinirim..

  4. Caner

    8 Åžubat 2010 [20:14]

    Anladığım kadarıyla scripti lokal sunucu (localhost) üzerinde deniyorsunuz ve ayarlarınız php mail gönderimi için yapılandırılmamış. Bir de sunucu üzerinden deneyin.

     

    Ayrıca web sitenizde (lisemilleti.com) trojan var, antivirus programları görmeme bile izin vermedi.

  5. Serkan

    8 Åžubat 2010 [22:38]

    Localhostta değil sunucum olan lisemilleti.com üzerinden deniyorum yalnız o hata veriliyor.
    Evet trojan var onunla alakalı olabilir mi?
    Yoksa ben bi yerde hatamı yaptım?
    Yardımlarınız için Teşekkürler..

  6. Caner

    8 Åžubat 2010 [22:59]

    “D:\Home\lisemilleti.com\httpdocs\serkan\malzemeler\index.php”  gibi bir dosya yolunu ilk defa görüyorum açıkcası.

     

    Torjanla alakalı bir durum deÄŸil bu sunucunuzdaki email ayarlarıyla ilgili, hosting firmanıza baÅŸvurmanızı öneririm. Ayrıca “evet trojan var” derken bu trojanı bilinçli olarak tuttuÄŸunuz mu söylüyorsunuz?

  7. Serkan

    9 Åžubat 2010 [15:56]

    Yok site bağımsız sitem değil ( Web Tasarımı ve proglama öğrencisiyim ) sınıfın sitesi silinmesi için hostingle görüşmesi gerekende hocamız k.bakmayın bir zarar verdiysem.

    D:\home  => buna bende şaşırdım tam bilgim olmadığından size danıştım sağolun.

    Hostingi temizledikten sonra denerim. Tekrar danışacağım.

Yorum Bırakın

(Anonim yorumları kabul etmiyoruz)


Yorum yazarken güvenlik kodu girmek istemiyorsanız siteye üye olabilirsiniz.