• 28-06-2010, 15:43:08
    #1
    Selam arkadaşlar.

    Bir projede aşağıda kodları bulunan php mail fonksiyonunu kullanıyorum.
    Mail içeriğinde bir sorun yok ama maili subjecti TR karakter hatası ile gidiyor.
    Sayfa metası UTF-8. Editör dil kodu da UTF-8
    Sitenin hiç bir yerinde dil karakteri değişmiyor ve hatasız görüntüleniyor.

    Çözüm öneriniz varsa çok makbul geçer.

    Maili gönderen fonksiyon:

    function mailgonder($ad,$soyad,$mail,$konu,$mesaj) {
    
    $g_mail = "xxx@xxxxx.tr"; 
    $g_isim = "yyyy"; 
    $giden = "$ad $soyad <$mail>";    
    $baslik = "$konu";   // sorun burada
    
    $mesaj = "$mesaj"; 
    
    $header = "From: $g_isim <".$g_mail.">\n";  
    $header .= "Reply-To: $g_isim <".$g_mail.">\n"; 
    $header .= "Return-Path: $g_isim <".$g_mail.">\n";   
    $header .= "Delivered-to:  $g_isim <".$g_mail.">\n"; 
    $header .= "Date: ".date(r)."\n"; 
    $header .= "Content-Type: text/html; charset=utf-8\n";    
    $header .= "MIME-Version: 1.0\n"; 
    $header .= "Importance: Normal\n"; 
    $header .= "X-Sender: $g_isim <".$g_mail.">\n";    
    $header .= "X-Priority: 3\n";    
    $header .= "X-MSMail-Priority: Normal\n"; 
    $header .= "X-Mailer: Microsoft Office Outlook, Build 11.0.5510\n"; 
    //$header .= "Disposition-Notification-To: $g_isim <".$g_mail.">\n"; 
    $header .= "X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869\n"; 
    
    $sonuc = mail($giden, $baslik, $mesaj, $header); 
        
        return $sonuc;
        
    }
  • 28-06-2010, 15:49:30
    #2
    function mailgonder($ad,$soyad,$mail,$konu,$mesaj) { 
    
    $g_mail = "xxx@xxxxx.tr";  
    $g_isim = "yyyy";  
    $giden = "$ad $soyad <$mail>";     
    $baslik = "$konu";   // sorun burada 
    
    $mesaj = "$mesaj";  
    
    $header = "From: $g_isim <".$g_mail.">\n";   
    $header .= "Reply-To: $g_isim <".$g_mail.">\n";  
    $header .= "Return-Path: $g_isim <".$g_mail.">\n";    
    $header .= "Delivered-to:  $g_isim <".$g_mail.">\n";  
    $header .= "Date: ".date(r)."\n";  
    $header .= "Content-Type: text/html; charset=ISO-8859-9\n";     
    $header .= "MIME-Version: 1.0\n";  
    $header .= "Importance: Normal\n";  
    $header .= "X-Sender: $g_isim <".$g_mail.">\n";     
    $header .= "X-Priority: 3\n";     
    $header .= "X-MSMail-Priority: Normal\n";  
    $header .= "X-Mailer: Microsoft Office Outlook, Build 11.0.5510\n";  
    //$header .= "Disposition-Notification-To: $g_isim <".$g_mail.">\n";  
    $header .= "X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869\n";  
    
    $sonuc = mail($giden, $baslik, $mesaj, $header);  
         
        return $sonuc; 
         
    }
    Bu şekilde dener misiniz.
  • 28-06-2010, 15:55:18
    #3
    Sayfa tamamen ISO-8859-9 olsa bu çalışıyor.
    Ancak bütün site UTF-8 olduğundan mail için ISO-8859-9 kullanıldığında mesaj başlığı da içeriği de TR karakter hatası alıyor.
  • 28-06-2010, 15:58:47
    #4
    fonksiyonun içine

    ini_set('default_charset', 'utf-8');

    koydum yine başlık hatalı içerik sorunsuz gözüktü.
  • 28-06-2010, 16:05:31
    #5
    bu işini göre bilir. base64 olarak encodelu gönder derim . böylece utf8 ler bozulmaz aşağıdaki örnekte konu ismi encode lu gider.
    <?php
     
    function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') {
      $header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";
      mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header);
    }
     //yani mail fonk tan once
    
    $baslik = '=?UTF-8?B?'.base64_encode($baslik).'?=';
    ?>
  • 28-06-2010, 16:10:04
    #6
    Çok çok teşekkürler.
    Bende şimdi nette araştırırken benzer bişey bulup uyguladım çözüldü sorun.

    Bende yazayım da yaptığımı, işine yarayan olabilir:

    1. mesajdaki mail fonksiyonumda;
    $baslik = "$konu";

    satırı yerine

    $baslik = '=?UTF-8?B?' . base64_encode($konu) . '?=';

    satırını yazdım.
    Artık başlık da mesaj içeriği de sorunsuz gidiyor.

    Tekrar teşekkürler..