Кракозябры при отправке письма! Help.

Тема в разделе "PHP", создана пользователем E-Rix, 8 май 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. E-Rix

    E-Rix Постоялец

    Регистр.:
    16 янв 2009
    Сообщения:
    78
    Симпатии:
    35
    Такая ситуация, что только не перепробывал и менял кодировку в
    htaccess и добавил utf-8 везде где можно и ни фига.
    Установлен Wordpress, в забугорной теме установлена форма, в которое вводится емайл и прописанный текст(в админке темы) отправляется по указанному адресу. Только письма приходят всем кракозябрами типа такого б€бƒббаКаИаЙ аПаОаПаОаЗаЖаЕ аЗаАб€аАаБаОб‚аАаЕб‚.

    Насколько понял, что-то здесь не так.

    <?php

    include_once('../../../wp-load.php');
    include_once('functions/theme.php');

    $options = get_option('plugin_options');

    $sendtoemail = $options['emaillink'];

    //declare our variables
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = nl2br($_POST['message']);
    //get todays date
    $todayis = date("l, F j, Y, g:i a") ;
    //set a title for the message
    $subject = "Message from Your Website";
    $body = "\nFrom: $name\n\n\n\n$message";
    $headers = 'From: '.$email.'' . "\r\n" .
    'Reply-To: '.$email.'' . "\r\n" .
    'Content-type: text/html; charset=utf-8
    'X-Mailer: PHP/' . phpversion();

    //put your email address here
    mail($sendtoemail, $subject, $body, $headers);
    ?>
    <!--Display a thankyou message in the callback -->
    <div id="confirmation">
    <h3><?php echo $options['thankyou_header']; ?></h3>
    <p><?php echo $options['thankyoumsg']; ?></p>
    </div>
     
  2. X-ray

    X-ray Создатель

    Регистр.:
    17 апр 2012
    Сообщения:
    47
    Симпатии:
    140
    Попробуй такую функцию:
    Код:
    function XMail($from, $to, $subj, $text, $filename, $file)
        {
        if (!empty($file)){$f = fopen($file,"rb");} //смотрим есть ли файл
     
        $un = strtoupper(uniqid(time())); // задаем разделитель
        $head = "From: Autobot <$from>\n";
        $head .= "To: $to\n";
        $head .= "Subject: $subj\n";
        $head .= "X-Mailer: PHPMail Tool\n";
        $head .= "Reply-To: $from\n";
        $head .= "Mime-Version: 1.0\n";
        $head .= "Content-Type:multipart/mixed;"; //показвыаем заголок
        $head .= "boundary=\"----------".$un."\"\n\n";
        $zag = "------------".$un."\nContent-Type: text/plain; charset=utf-8\n";
        $zag .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
        $zag .= "------------".$un."\n";
        if (!empty($file)){//если все-таки файл был, то пересылаем его
        $zag .= "Content-Type: application/octet-stream;";
        $zag .= "name=\"".basename($filename)."\"\n";
        $zag .= "Content-Transfer-Encoding:base64\n";
        $zag .= "Content-Disposition:attachment;";
        $zag .= "filename=\"".basename($filename)."\"\n\n";
        $zag .= chunk_split(base64_encode(fread($f,filesize($file))))."\n";
        $zag .= "------------".$un."\n";
        }
        if (!@mail("$to", "$subj", $zag, $head)) //проверка как отработает функция...
        return 0;
        else
        return 1;
        }
    Если не поможет, проверь в какой кодировке у тебя файл с кодом.
     
    E-Rix нравится это.
  3. E-Rix

    E-Rix Постоялец

    Регистр.:
    16 янв 2009
    Сообщения:
    78
    Симпатии:
    35
    Не помогло, взгляни еще сюда
    header.php

    <?php
    include 'functions/theme.php';
    $options = get_option('plugin_options');
    global $feed;
    global $twitterFeed;
    ?>

    <!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><?php echo $options['site_title']; ?></title>
    <link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/css/reset.css" type="text/css" />
    <link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/css/supercharged.css" type="text/css" />
    <link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/css/colorbox.css" type="text/css" />
    <link href='http://fonts.googleapis.com/css?family=Lato:regular,regularitalic,900' rel='stylesheet' type='text/css' />
    <!-- CHROME -->
    <link href="<?php bloginfo('template_directory'); ?>/css/chrome.css" rel="stylesheet" type="text/css" />
    <!-- SAFARI -->
    <link href="<?php bloginfo('template_directory'); ?>/css/safari.css" rel="stylesheet" type="text/css" />
    <!--[if IE 7]>
    <link href="<?php bloginfo('template_directory'); ?>/css/ie7.css" rel="stylesheet" type="text/css" />
    <![endif]-->
    <!--[if IE 8]>
    <link href="<?php bloginfo('template_directory'); ?>/css/ie8.css" rel="stylesheet" type="text/css" />
    <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script>
    <![endif]-->
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/jquery-1.5.1.min.js"></script>
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/jquery.countdown.js"></script>
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/jquery.colorbox-min.js"></script>
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/supercharged.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
    //Setting trigger, content and dimensions of contact box overlay
    $(".contactusicon").colorbox({width:"600px", height:"580px", initialWidth:"600px", initialHeight:"580px", speed:"2000", inline:true, href:"#contactus"});
    });
    </script>
    <script type="text/javascript">
    //<![CDATA[
    var secondsStr = "<?php echo $seconds; ?>";
    var threeDig = "<?php echo $options['displaythreedigits'] ?>";
    //]]>
    </script>
    <script type="text/javascript">
    $(document).ready(function() {
    $('.fuel_right').animate({
    width: '<?php $result=(($options['progress']/100)*(305)); if ( (round($result)) < 18 ) { $result == 18; }; echo round($result); ?>px',
    height: '133px'
    }, 2100, function() {
    $(".percent").fadeIn(1000);
    });
    });
    </script>
    <script type="text/javascript">
    //NEWSLETTER SIGNUP FORM
    $(document).ready(function(){

    //submittimg contact us form
    $('#signupform').submit( function(){

    //validating the form
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    var email = document.getElementById('email');

    if (!filter.test(email.value)) {
    $('.signup_error').show();
    } else {$('.signup_error').hide();}

    if ( (!filter.test(email.value)) ){
    return false;
    }

    if ( (filter.test(email.value)) ) {

    //show the loader
    $('.signuploader').append($('.signupbar'));
    $('.signupbar').css({display:'block'});

    //send ajax request
    $.post('<?php bloginfo('template_directory'); ?>/sc_signup.php',{email:$('#email').val(), signo:$('#signo').val()},

    //return data
    function(data){
    //hide the graphic
    $('.signupbar').css({display:'none'});
    $('.signuploader').append(data);

    document.getElementById("submit").disabled = true;
    document.getElementById("email").disabled = true;

    });

    //stay on the page
    return false;
    }
    });


    });
    </script>
    <script type="text/javascript">
    //CONTACT US FORM
    // <![CDATA[
    $(document).ready(function(){

    //submittimg contact us form
    $('.contactUsForm').submit( function(){

    //validating the form
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    var email = document.getElementById('e-mail');
    if (!filter.test(email.value)) {
    $('.email-missing').show();
    } else {$('.email-missing').hide();}
    if (document.cform.name.value == "") {
    $('.name-missing').show();
    } else {$('.name-missing').hide();}
    if (document.cform.message.value == "") {
    $('.message-missing').show();
    } else {$('.message-missing').hide();}
    if ((document.cform.name.value == "") || (!filter.test(email.value)) || (document.cform.message.value == "")){
    return false;
    }

    if ((document.cform.name.value != "")&&(filter.test(email.value))&&(document.cform.message.value != "")) {

    //hide form fields
    $('.contactUsForm').hide();

    //show the loader
    $('.loader').append($('.bar'));
    $('.bar').css({display:'block'});

    //send ajax request
    $.post('<?php bloginfo('template_directory'); ?>/sc_contactus.php',{name:$('#name').val(),
    email:$('#e-mail').val(),
    message:$('#message').val()},

    //return data
    function(data){
    //hide the graphic
    $('.bar').css({display:'none'});
    $('.loader').append(data);
    });

    //waits 2000, then closes the form and fades out
    setTimeout('parent.$.fn.colorbox.close()', 5000);

    //stay on the page
    return false;
    }
    });


    });
    // ]]>
    </script>
    </head>

    <body class="<?php echo $options['color_scheme'] ?>">


    Вот вся тема Wordpress, так думаю понятнее, там для разбирающего человека секунд 30 от силы, тема вообще одностраничная, а форма отправки писем кракозябрами отправляет(
    http://file.karelia.ru/zgs76j/
     
  4. X-ray

    X-ray Создатель

    Регистр.:
    17 апр 2012
    Сообщения:
    47
    Симпатии:
    140
    У тебя письма отправляются в кодировке ISO-8859-5, можно попробовать перекодировать их в utf8, например используя функцию iconv(); или конструкцию типа:
    Код:
    $subject_send= '=?utf8?B?'.base64_encode($subject_send).'?=';
    А вообще, чтобы не было проблем с почтовиками желательно использовать кодировку KOI8-R
     
    E-Rix нравится это.
  5. E-Rix

    E-Rix Постоялец

    Регистр.:
    16 янв 2009
    Сообщения:
    78
    Симпатии:
    35
    Куда данную конструкцию вставить? :) Милый человек!
     
  6. X-ray

    X-ray Создатель

    Регистр.:
    17 апр 2012
    Сообщения:
    47
    Симпатии:
    140
    Вместо:
    Код:
    $body = "\nFrom: $name\n\n\n\n$message";
    Добавь:
    Код:
    $message= '=?utf8?B?'.base64_encode($message).'?=';
    $body = "\nFrom: $name\n\n\n\n$message";
     
    E-Rix нравится это.
  7. E-Rix

    E-Rix Постоялец

    Регистр.:
    16 янв 2009
    Сообщения:
    78
    Симпатии:
    35
    безрезультатно(
    Не могу понять в чем проблема , уже везде где можно все поменял, а русские буквы не отправляет.
    тема весит всего 156Кб, взгляни.
    http://file.karelia.ru/zgs76j/

    Все проблема решена, загвоздка была в клиенте, стояла кодировка виндовс! На почту после манипуляций все приходило хорошо.

    На яндекс, гугл приходит все хорошо, а на mail все равно с кракозябрами. Шо за фигня?
     
  8. nytik

    nytik Писатель

    Регистр.:
    14 ноя 2011
    Сообщения:
    1
    Симпатии:
    2
    в файле темы написано <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />. а ты смотрел, какой charset выдает сервер в заголовке ответа для этой страницы? проверь. думаю, либо никакой, либо не utf-8. тогда проблема могла быть в том, что браузер отсылает данные формы не в utf-8, и потом эти данные уходят в письме, помеченном как utf-8. соответственно при просмотре письма ничего толкового не будет видно, т.к. указана неправильная кодировка. сохрани письмо в файл, открой его в редакторе и посмотри, какую кодировку определит редактор. если не utf-8 - смотри на заголовки http ответа.

    прописать utf-8 в заголовке ответа можно так
    header('Content-Type: text/html;charset=utf-8'); // желательно первой строкой скрипта
     
    duakarec и E-Rix нравится это.
  9. psy-coder

    psy-coder Писатель

    Регистр.:
    8 май 2012
    Сообщения:
    4
    Симпатии:
    0
    попробуй сам файлик в Notepad++ перекодировать через "Кодировки -> Кодировать в UTF-8 (без BOM)"
     
  10. E-Rix

    E-Rix Постоялец

    Регистр.:
    16 янв 2009
    Сообщения:
    78
    Симпатии:
    35
    Проблема решена, не тот файл редактировал, после шаманством над файлом signup.php все встало на свои места.
     
Статус темы:
Закрыта.