[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблемы с кодировкой в функции mail
limait
Помогите, пожалуйста – у меня на сайте есть форма обратной связи, которая работает через функцию mail, и есть e-mail на том же хостинге на котором расположен сайт. Так вот мне необходимо чтобы все письма (данные из формы) шли именно на этот e-mail, они идут, но приходят в «побитой» кодировке (все в виде вопросиков). На другие почтовые ящики все идет нормально и почта с других почтовых ящиков на мой e-mail тоже идет нормально, а данные из формы в виде вопросов. Подскажите, с чем это связано и что нужно поменять в php коде чтобы кодировка была читаемой?



Спустя 20 минут, 2 секунды (11.10.2008 - 20:30) CaXaP написал(а):
поменяйте кодировку на странице, с которой отсылаете письмо на, скажем windows-1251
и поменяйте кодировку в заголовке письма вот так:
Код
$headers = 'Content-type: text/html; charset=windows-1251 ' . "\r\n";

тут headers - строка заголовков письма, а content-type - тип содержимого (если он не штмл, можно его упустить).

Спустя 12 минут, 10 секунд (11.10.2008 - 20:42) limait написал(а):
Гм. Спасибо за ответ, но я не совсем понял с $headers. Вот мой код:

Код
<?php
function complete_mail() {

        $_POST['url'] =  substr(htmlspecialchars(trim($_POST['url'])), 0, 1000);
        $_POST['mess'] =  substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
        $_POST['name'] =  substr(htmlspecialchars(trim($_POST['name'])), 0, 30);
        $_POST['tel'] =  substr(htmlspecialchars(trim($_POST['tel'])), 0, 30);
        $_POST['email'] =  substr(htmlspecialchars(trim($_POST['email'])), 0, 50);
     $_POST['adres'] =  substr(htmlspecialchars(trim($_POST['adres'])), 0, 50);
        if (empty($_POST['name']))
             output_err(0);
        if (empty($_POST['tel']))
             output_err(3);
        if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email']))
             output_err(1);
        if(empty($_POST['mess']))
             output_err(2);
        $mess = '
Имя:'.$_POST['name'].'

Контактный телефон:'.$_POST['tel'].'

Контактный email:'.$_POST['email'].'

Адрес:'.$_POST['adres'].'

Сайт:'.$_POST['url'].'

'.$_POST['mess'];
        // $to - кому отправляем
        $to = 'mail@site.com';
        // $from - от кого
        $from='gbcmvj!';
        mail($to, $_POST['name'], $mess, "From:".$from);
echo '<table border="0" width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td height="100%" width="100%">
        <p align="center">Сообщение отправлено.</p></td>
    </tr>
</table>';
}

function output_err($num)
{
    $err[0] = '<table border="0" width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td height="100%" width="100%">
        <p align="center">Вы не заполнили строку «Имя».</p><p></p><p align="center"><a class="cat" href="java script:history.go(-1)"
class=\\"text\\">Вернуться назад</a></p></td>
    </tr>
</table>';
    $err[3] = '<table border="0" width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td height="100%" width="100%">
        <p align="center">Вы не заполнили строку «Контактный телефон».</p><p></p><p align="center"><a class="cat" href="java script:history.go(-1)"
class=\\"text\\">Вернуться назад</a></p></td>
    </tr>
</table>';
    
    $err[1] = '<table border="0" width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td height="100%" width="100%">
        <p align="center">Не введен, либо некорректно введен адрес электронной почты.</p><p align="center">Проверьте правильность заполнения этой строки.</p><p></p><p align="center"><a class="cat" href="java script:history.go(-1)">Вернуться назад</a></p></td>
    </tr>
</table>';
    $err[2] = '<table border="0" width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td height="100%" width="100%">
        <p align="center">Вы не написали само сообщение.</p><p align="center"><a class="cat" href="java script:history.go(-1)">Вернуться назад</a></p></td>
    </tr>
</table>';
    echo '<p>'.$err[$num].'</p>';
    show_form();
    exit();
}

if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>


Все что в тексте письма написано на руском отображается в виде "??? ?? ????? ?? ???? ?".

Спустя 1 час, 14 минут, 8 секунд (11.10.2008 - 21:57) CaXaP написал(а):
я просто полный текст отправки приведу:

Код
$to = $_REQUEST['email'].",adresat@mail.ru"; // адресаты (их тут 2, первый из реквеста, второй просто так).
                $theme = "Ваш личный номер"; // тема письма
                $message = $ml; //текст сообщения (формируется ранее)
                $headers = 'Content-type: text/html; charset=windows-1251 ' . "\r\n"; //как раз эти заголовки - заголовков много видов - это что то вроде тегов meta на html странице.
                $headers .= 'From: www.tzel@mail.de ' . "\r\n"; // Вот в заголовке From указал (без него иногда не отсылается письмо).
        
                $rs = mail($to,$theme,$message,$headers); //собсно, сама отправка. Последним аргументом стоят как раз заголовки.

Спустя 23 минуты, 17 секунд (11.10.2008 - 22:20) limait написал(а):
Спасибо! Вроде разобрался.

Спустя 4 месяца, 25 дней, 20 часов, 13 минут, 17 секунд (7.03.2009 - 19:33) Любовь написал(а):
И от меня спасибо огромное! Была та же проблема. Вы мне очень помогли!

Спустя 11 месяцев, 26 дней, 22 часа, 32 минуты, 19 секунд (4.03.2010 - 18:05) Егор написал(а):
СПАСИБО ОГРОМНОЕ!!! НЕДЕЛЮ МУЧАЛСЯ НЕ МОГ ПОНЯЬ ПОЧЕМУ ТАК!!! biggrin.gif

Спустя 1 минута, 49 секунд (4.03.2010 - 18:07) twin написал(а):
Рано радуетесь...

Спустя 7 месяцев, 24 дня, 17 часов, 52 минуты, 4 секунды (29.10.2010 - 10:59) Гость_Сергей написал(а):
Люди,хелп плиз!! Уже несколько дней мучаюсь, не могу найти ошибку в этом коде. Помогите....


<?
}
function complete_mail() {

$empty_input[] = 'ПІБ співробітника філії / відділення <i>[пункт 1]</i>';
$empty_input[] = 'Філія / відділення <i>[пункт 2]</i>';
$empty_input[] = 'Найменування клієнта <i>[пункт 3]</i>';
$empty_input[] = 'Бізнес приналежність <i>[пункт 4]</i>';
$empty_input[] = 'Код кредитного продукту, яким користується клієнт <i>[пункт 5]</i>';
$empty_input[] = 'Строк дії кредитного договору <i>[пункт 7]</i> від день';
$empty_input[] = 'Строк дії кредитного договору <i>[пункт 7]</i> місяць';
$empty_input[] = 'Строк дії кредитного договору <i>[пункт 7]</i> рік';
$empty_input[] = 'Строк дії кредитного договору <i>[пункт 7]</i> до день';
$empty_input[] = 'Строк дії кредитного договору <i>[пункт 7]</i> місяць';
$empty_input[] = 'Строк дії кредитного договору <i>[пункт 7]</i> рік';
$empty_input[] = '№ кредитного договору <i>[пункт 6]</i>';
$empty_input[] = 'Строк дії договору страхування <i>[пункт 10]</i> від день';
$empty_input[] = 'Строк дії договору страхування <i>[пункт 10]</i> місяць';
$empty_input[] = 'Строк дії договору страхування <i>[пункт 10]</i> рік';
$empty_input[] = 'Строк дії договору страхування <i>[пункт 10]</i> до день';
$empty_input[] = 'Строк дії договору страхування <i>[пункт 10]</i> місяць';
$empty_input[] = 'Строк дії договору страхування <i>[пункт 10]</i> рік';
$empty_input[] = 'Найменування страхової компанії <i>[пункт 8]</i>';
$empty_input[] = '№ договору страхування <i>[пункт 9]</i>';
$empty_input[] = 'Дата страхової події <i>[пункт 11]</i>';
$empty_input[] = 'Питання, що потребує вирішення <i>[пункт 12]</i>';
for ($i=0; $i<count($_POST['input_name']); $i++) {
$_POST['input_name'][$i] = substr(htmlspecialchars(trim($_POST['input_name'][$i])), 0, 100000);
if(substr(htmlspecialchars(trim($_POST['check'][$i])), 0, 1) == 1) {
if(empty($_POST['input_name'][$i])) {
$sendemail = 'No';
echo '<br /><b>Необходимо заполнить поле '.$empty_input[$i].'!</b><br>';

}
}
}
if($sendemail == 'No') show_form();
$mess = '';
$mess .= '<b>ПІБ співробітника філії/відділення*: </b>'.$_POST['input_name'][0].'<br>';
$mess .= '<b>Філія/відділення*: </b>'.$_POST['input_name'][1].'<br>';
$mess .= '<b>Найменування клієнта*: </b>'.$_POST['input_name'][2].'<br>';
$mess .= '<b>Бізнес приналежність*: </b>'.$_POST['input_name'][3].'<br>';
$mess .= '<b>Код кредитного продукту, яким користується клієнт*: </b>'.$_POST['input_name'][4].'<br>';
$mess .= '<b>Строк дії кредитного договору*: від </b>'.$_POST['input_name'][6].' '.$_POST['input_name'][7].' '.$_POST['input_name'][8].' <b>до</b> '.$_POST['input_name'][9].' '.$_POST['input_name'][10].' '.$_POST['input_name'][11].'<br>';
$mess .= '<b>№ кредитного договору*: </b>'.$_POST['input_name'][5].'<br>';
$mess .= '<b>Найменування страхової компанії*: </b>'.$_POST['input_name'][12].'<br>';
$mess .= '<b>Строк дії договору страхування*: від </b>'.$_POST['input_name'][14].' '.$_POST['input_name'][15].' '.$_POST['input_name'][16].' <b>до</b> '.$_POST['input_name'][17].' '.$_POST['input_name'][18].' '.$_POST['input_name'][19].'<br>';
$mess .= '<b>№ договору страхування*: </b>'.$_POST['input_name'][13].'<br>';
$mess .= '<b>Дата страхової події: </b>'.$_POST['input_name'][20].' '.$_POST['input_name'][21].' '.$_POST['input_name'][22].'<br>';
$mess .= '<b>Питання, що потребує вирішення*: </b>'.$_POST['input_name'][18].'<br><br><br>';
// подключаем файл класса для отправки почты
// если Вы забыли его скачать - http://www.php-mail.ru/class.phpmailer.zip
require '../../../../phpmailer/class.phpmailer.php';

$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = "22.1.22.44"; // SMTP server
$mail->From = ''; // от кого email
$mail->FromName = 'int-site.vtb'; // от кого имя
$mail->AddAddress("Мarina@gmail.com"); // кому - адрес, Имя
$mail->AddBCC("Sergey@gmail.com");
$mail->IsHTML(true); // выставляем формат письма HTML
$mail->Subject = 'Insurance '.$_POST['input_name'][2].''; // тема письма
$mail->Body = $mess;

// если был файл, то прикрепляем его к письму
if(isset($_FILES['file_name'])) {
if($_FILES['file_name']['error'][0] == 0){
$mail->AddAttachment($_FILES['file_name']['tmp_name'][0], $_FILES['file_name']['name'][0]);
}
}


if($sendemail != 'No'){
// отправляем наше письмо
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
echo '<BR><BR><BR><BR><BR>
<CENTER><b>Запит відправлено!</b>
<BR><BR><A href="/forum/TETST/">Подати ще один запит >>></A>
<BR><BR><A href="http://int">Перейти на головну сторінку внутрішнього сайту >>></A>
<BR><BR><BR><BR>';
}
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>

Спустя 2 месяца, 26 дней, 10 часов, 13 минут, 8 секунд (25.01.2011 - 22:12) Termin написал(а):
А что делать кода сайт понимает только iso-8859-1, если вставить текст на русском языке с такой кодировкой то сайт не работает.
Если меняю на utf-8 сайт работает но русский текст такой ??????????????.
Если меняю на windows-1251 сайт не работает.
smile.gif


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.