Fonksiyon Kütüphanesi – Mail 1

Herbirimizin belki saatlerce belki günlerce üzerinde çalıştığı en büyük sorunlardan biriside üyelik panelini bitirdikten sonra üyelere aktivasyon maili gönderirken tamda işte gönderme kısmında çıkan sorun yani maillerimizin spam kutusuna düştüğünü görmemiz ne kadarda sinir ediyor değil mi bizleri ? Sizlerinde evet ya varmı buna bir çözüm dediğinizi duyar gibiyim ...

Şimdi öncelikle fonksiyon kütüphanesi oluşturduğumuzu eski yazılarımızdan biliyorsunuz zaten burada da phpdeki mail fonksiyonuna bir giriş ve gerçekten sorunsuz çalışan bir php mail gönderme sınıfı vercem sizlere .

Php'de mail fonksiyonun genel kullanımı şu şekilde oluyor

PHP:
  1. mail($to, $subject, $message, $headers);

$to : Gönderilecek Mail Adresi .
$subject : Gönderilecek Mailin Konusu .
$message : Gönderilecek Mailin İçeriği .
$headers : Gönderilecek Mailin Bilgileri Ve Başlık Kısmı .

İşte php'de mail gönderebilmek aslında tamamen bu tek satır kod ile oluyor ama sorun ne kardeşim saatlerce uğraşılıyor o zaman bu mail sistemlerine yaw denirse işte sorun maillerin doğru düzgün spam sayılmadan gönderilemediği için çıkıyor cevabı verilir.

Biraz daha gelişmiş bir örnek verecek olursak mail fonksiyonuna oda şöyle :

PHP:
  1. <?php
  2. // multiple recipients
  3. $to  = 'aidan@example.com' . ', '; // note the comma
  4. $to .= 'wez@example.com';
  5.  
  6. // subject
  7. $subject = 'Birthday Reminders for August';
  8.  
  9. // message
  10. $message = '
  11. <html>
  12. <head>
  13.   <title>Birthday Reminders for August</title>
  14. </head>
  15. <body>
  16.   <p>Here are the birthdays upcoming in August!</p>
  17.   <table>
  18.     <tr>
  19.       <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
  20.     </tr>
  21.     <tr>
  22.       <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
  23.     </tr>
  24.     <tr>
  25.       <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
  26.     </tr>
  27.   </table>
  28. </body>
  29. </html>
  30. ';
  31.  
  32. // To send HTML mail, the Content-type header must be set
  33. $headers  = 'MIME-Version: 1.0' . "\r\n";
  34. $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  35.  
  36. // Additional headers
  37. $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
  38. $headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
  39. $headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
  40. $headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";
  41.  
  42. // Mail it
  43. mail($to, $subject, $message, $headers);
  44. ?>

İşte bu örnek ise 1. verdiğimiz örnekten yani tek satır koddan daha geniş bir örnek . Burada mail hem birden fazla kişiye gönderilmek isteniyor hemde mail HTML içerikli olarak gönderiliyor . Bunlarda yetmiyormuş gibi mailin başlık ($headers) kısmı dahada genişletiliyor . Ama işte sorun yine devam ediyor ne yaparsak yapalım bu tarz bir gönderim bile olsa gönderilen mailimiz spam kutusuna düşebilecektir . Çünkü hertürlü mail adresine gönderilen ( hotmail , gmail , mail , mynet .... ) maillere değişik cevaplar verirler ve algılamaları farklı olur farklı kritlere göre spam kutusuna koyar veya normal gelen kutumuza koyar biz bu özelliklere uyumlu hale getirmezsek kodlarımızı maillerimiz hep spam kutusuna düşmeye mahkum kalacaktır .

İşte gelelim o son kısıma ve son fonksiyon sınıfımıza ben internette gezerken rastladığım bir kodu sizlerle paylaşmak istiyorum . Bu fonksiyonu gmail'de deneme fırsatım oldu ve sorunsuz bir şekilde gmail ' in posta kutusuna gönderdiğim maillerim düştü .

Buyrun arkadaşlar bence şimdilik sorunsuz çalışan php mail sınıfı :

PHP:
  1. <?php
  2. define("STR","\n");
  3. define("TAB","\t");
  4. class epostaGonder
  5. {
  6.     var $dil;
  7.     var $mailhudut;
  8.     var $headerhudut;
  9.     var $to;
  10.     var $from;
  11.     var $reply;
  12.     var $return;
  13.     var $subject;
  14.     var $message;
  15.     var $header;
  16.     var $govde;
  17.     var $file;
  18.     var $cc=array();
  19.     var $bcc=array();
  20.     var $kopya;
  21.     var $gizlikopya;
  22.    
  23.     function epostaGonder()
  24.     {
  25.         $this->dil="iso-8859-9";
  26.         $this->mailhudut=md5(uniqid(rand()));
  27.         $this->headerhudut=md5(uniqid(rand()));
  28.        
  29.     }
  30.    
  31.    
  32.    
  33.     function kime($eposta)
  34.     {
  35.         $this->to=$eposta;
  36.     }
  37.    
  38.     function bunlaradaGonder($eposta)
  39.     {
  40.         $this->cc[]=$eposta;
  41.     }
  42.    
  43.     function bunlaradaGizliGonder($eposta)
  44.     {
  45.         $this->bcc[]=$eposta;
  46.     }
  47.    
  48.     function kimden($isim,$eposta)
  49.     {
  50.         $this->from=$isim."<".$eposta.">";
  51.     }
  52.    
  53.     function cevap($rply)
  54.     {
  55.         $this->reply=$rply;
  56.     }
  57.    
  58.     function iade($turn)
  59.     {
  60.         $this->return=$turn;
  61.     }
  62.    
  63.     function konu($sbj)
  64.     {
  65.         $this->subject=$sbj;
  66.     }
  67.    
  68.     function mesaj($msg)
  69.     {
  70.         $this->message=$msg;
  71.     }
  72.    
  73.     function dosya($fl) /* Tam Yolu */
  74.     {
  75.         $this->file[]=$fl;
  76.     }
  77.    
  78.     function headers()
  79.     {
  80.         $this->kopyalariHazirla();
  81.         $this->header='MIME-Version:1.0'.STR;
  82.         $this->header.='From:'.$this->from.STR;
  83.         if(isset($this->kopya) && $this->kopya!="")
  84.         {
  85.             $this->header.='Cc:'.$this->kopya.STR;
  86.         }
  87.         if(isset($this->gizlikopya) && $this->gizlikopya!="")
  88.         {
  89.             $this->header.='Bcc:'.$this->gizlikopya.STR;
  90.         }
  91.         $this->header.='Reply-To:'.$this->reply.STR;
  92.         $this->header.='Return-Path:'.$this->return.STR;
  93.         $this->header.='X-Mailer:PHP v'.phpversion().STR;
  94.         $this->header.='Content-Type:multipart/mixed;'.STR.TAB.
  95.                        'boundary="'.$this->mailhudut.'"'.STR;
  96.     }
  97.    
  98.     function body()
  99.     {
  100.         $this->govde='This is a multipart message in MIME format'.STR.STR;
  101.         $this->govde.='--'.$this->mailhudut.STR;
  102.         $this->govde.='Content-Type:multipart/alternative;'.STR.TAB.
  103.                       'boundary="'.$this->headerhudut.'"'.STR.STR;
  104.         $this->govde.='--'.$this->headerhudut.STR;
  105.         $this->govde.='Content-Type:text/plain;'.STR.TAB.
  106.                       'charset="'.$this->dil.'"'.STR.
  107.                       'Content-Transfer-Encoding:7bit'.STR.STR;
  108.         $this->govde.=strip_tags($this->message).STR.STR;
  109.         $this->govde.='--'.$this->headerhudut.STR;
  110.         $this->govde.='Content-Type:text/html;'.STR.TAB.
  111.                       'charset="'.$this->dil.'"'.STR.
  112.                       'Content-Transfer-Encoding:7bit'.STR.STR;
  113.         $this->govde.=nl2br($this->message).STR.STR;
  114.         $this->govde.='--'.$this->headerhudut.'--'.STR.STR;
  115.         if(count($this->file)>0)
  116.         {
  117.             for($i=0;$i<count($this->file);$i++)
  118.             {
  119.                 if(is_file($this->file[$i]))
  120.                 {
  121.                    
  122.                     $this->dosya_boyutu=filesize($this->file[$i]);
  123.                     $this->dosya=fopen($this->file[$i],"r");
  124.                     $this->ek=fread($this->dosya,$this->dosya_boyutu);
  125.                     fclose($this->dosya);
  126.                     $this->ek=chunk_split(base64_encode($this->ek));
  127.                    
  128.                     $this->govde.='--'.$this->mailhudut.STR;
  129.                     $this->govde.='Content-Type:application/octet-stream;'.STR.TAB.
  130.                                   'name="'.basename($this->file[$i]).'"'.STR;
  131.                     $this->govde.='Content-Transfer-Encoding:base64'.STR;
  132.                     $this->govde.='Content-Disposition:attachment;'.STR.TAB.
  133.                                   'filename="'.basename($this->file[$i]).'"'.STR.STR;
  134.                     $this->govde.=$this->ek.STR.STR;
  135.                    
  136.                 }
  137.                 else
  138.                 {
  139.                     exit("Böyle bir dosya yok");
  140.                 }
  141.             }
  142.            
  143.        
  144.         }
  145.        
  146.                     $this->govde.='--'.$this->mailhudut.'--'.STR.STR;                           
  147.     }
  148.    
  149.    
  150.    
  151.     function kopyalariHazirla()
  152.     {
  153.         if(count($this->cc)> 0)
  154.         {
  155.             $this->kopya="";
  156.             for($i=0;$i<count($this->cc);$i++)
  157.             {
  158.                 if($i> 0)
  159.                 {
  160.                     $this->kopya.=",";
  161.                 }
  162.                
  163.                 $this->kopya.=$this->cc[$i];
  164.             }
  165.         }
  166.        
  167.         if(count($this->bcc)> 0)
  168.         {
  169.             $this->gizlikopya="";
  170.             for($i=0;$i<count($this->bcc);$i++)
  171.             {
  172.                 if($i> 0)
  173.                 {
  174.                     $this->gizlikopya.=",";
  175.                 }
  176.                
  177.                 $this->gizlikopya.=$this->bcc[$i];
  178.             }
  179.         }
  180.     }
  181.    
  182.     function gonder()
  183.     {
  184.         $this->headers();
  185.         $this->body();
  186.         if(mail($this->to,$this->subject,$this->govde,$this->header))
  187.         {
  188.             echo "Mail Gitti";
  189.         }
  190.         else
  191.         {
  192.             echo "Bir sorun Oluştu";
  193.         }
  194.        
  195.     }
  196.    
  197.    
  198.    
  199. }
  200. # Örnek
  201.  
  202. $posta = new epostaGonder();
  203. $posta->kime("gonderilecekmail@mail.com");
  204. $posta->kimden("polat","polat@falancamail.com");
  205. $posta->cevap("polat@falancamail.com");
  206. $posta->iade("polat@falancamail.com");
  207. /*
  208. $posta->bunlaradaGonder("baskabirmail@baskabirmail.com");
  209. $posta->bunlaradaGizliGonder("baskabirmail@baskabirmail.com");
  210. $posta->dosya("../dosya.pdf");
  211. */
  212. $posta->konu("konu");
  213. $posta->mesaj("mesaj");
  214. $posta->gonder()
  215.  
  216. ?>

Teşekkürler POLAT ,

Herkesin kesin sorunlarından birini bu şekilde çözmüş olduk sanırım .

27 views

One Comment

  1. [...] için araştırmalar içine girdik ve hep olumsuzlukla sonuçlandı belkide . Daha öncede ” Fonksiyon Kütüphanesi – Mail 1 ” yazısında sizlere bir kaç örnekte bulunmuş ve bir kaç araştırmalarımızın sonucunda [...]

Leave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word