Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Отправка почты


Автор: MrDmitry 16.10.2011, 19:35
Здравствуйте помогите допилить скрипт отправки сообщения на email


Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel="stylesheet" href="http://radiorenclav.ru/style.css" type="text/css" />
</head>
<body>
<?php 
function show_form() 
{ 
?> 
<form action="" method=post> 
<p>
<p>
<b>Выберите событие:</b><br>
<select name="subj">
<option value="Vihod">Событие 1"
<option value="ferum">Событие 2
</select>
</p>
Количество : <input type="text" name="count" size="40"> 
<br /><br />
Телефон для связи <input type="text" name="phone" size="40"> 
<br /><br />
ICQ: <input type="text" name="icq" size="40"> 
<br /><br />
Комментарии: (как к Вам обращаться и т.д.)
<br /><br />
<textarea rows="10" name="mess" cols="30"></textarea> 
<br /><input type="submit" src="Отправить" name="submit"> 
</p>
</form> 
<? 
} 

function complete_mail() { 
        // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично
        $_POST['count'] =  substr(htmlspecialchars(trim($_POST['count'])), 0, 50); 
        $_POST['phone'] =  substr(htmlspecialchars(trim($_POST['phone'])), 0, 50); 
        $_POST['icq'] =  substr(htmlspecialchars(trim($_POST['icq'])), 0, 50); 
        $_POST['subj'] =  substr(htmlspecialchars(trim($_POST['subj'])), 0, 50); 
        // создаем наше сообщение 
        $mess = ' 
Событие:: '.$_POST['subj'].' 
Количеств : '.$_POST['count'].' 
Телефон: '.$_POST['phone'].' 
ICQ: '.$_POST['icq'].' 
'.$_POST['mess']; 
        // $to - кому отправляем 
        $to = 'mail@mail.ru'; 
        // $from - от кого 
        $from='site@mail.ru'; 
        "MIME-Version: 1.0\r\nContent-type: text/html; charset=windows-1251";
        mail($to, $_POST['subj'], $mess, "From:".$from); 
        echo 'Спасибо! Ваш заказ принят'; 
} 
                      
if (!empty($_POST['submit'])) complete_mail(); 
else show_form(); 
?> 
</p>
</body>
</html>


Этим скриптом письма отправляются. Но за место русских символов прихродят кракозябры. Сайт в кодировки utf-8

Автор: $дмитрий 16.10.2011, 19:54
Цитата

charset=windows-1251

Поменяй на charset=utf-8

Добавлено через 8 минут и 38 секунд
Была недавно похожая http://forum.vingrad.ru/forum/topic-339730.html

Автор: MoLeX 17.10.2011, 05:32
Цитата(MrDmitry @  16.10.2011,  19:35 Найти цитируемый пост)
Сайт в кодировки utf-8 

Код

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">


вы сами себе противоречите 

Автор: MrDmitry 18.10.2011, 20:11
смена кодировки на utf-8 не помогла. Сам скрипт сохранен также в кодировки UTF-8

Автор: MoLeX 19.10.2011, 06:23
покажите как щас он у вас выглядит

Автор: MrDmitry 21.10.2011, 19:26
Как выглядит кто? 
Сам скрипт?
Вот полный код

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
<html>
<head>                                    
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="http://radiorenclav.ru/style.css" type="text/css" />
</head>
<body>
<?php 
function show_form() 
{ 
?> 
<form action="" method=post> 
<p>
<p>
<b>Выберите событие:</b><br>
<select name="subj">
<option value="Выход">20 октября 2011 года: группа "Выход"
</select>
</p>
Количество заказываемых билетов: <input type="text" name="count" size="40"> 
<br /><br />
Телефон для связи <input type="text" name="phone" size="40"> 
<br /><br />
ICQ: <input type="text" name="icq" size="40"> 
<!-- <br /><br />
Комментарии: (как к Вам обращаться и т.д.)
<br /><br />
<textarea rows="10" name="mess" cols="30"></textarea>  -->
<br /><input type="submit" src="Отправить" name="submit"> 
</p>
</form> 
<? 
} 

function complete_mail() { 
        // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично
        $_POST['count'] =  substr(htmlspecialchars(trim($_POST['count'])), 0, 50); 
        $_POST['phone'] =  substr(htmlspecialchars(trim($_POST['phone'])), 0, 50); 
        $_POST['icq'] =  substr(htmlspecialchars(trim($_POST['icq'])), 0, 50); 
        $_POST['subj'] =  substr(htmlspecialchars(trim($_POST['subj'])), 0, 50); 
        // создаем наше сообщение 
        $mess = ' 
Событие: '.$_POST['subj'].' 
Количество билетов: '.$_POST['count'].' 
Телефон: '.$_POST['phone'].' 
ICQ: '.$_POST['icq'].'
'.$_POST['mess']; 
        // $to - кому отправляем 
        $to = 'mail@mail.ru'; 
        // $from - от кого 
        $from='site@mail.ru'; 
        "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8";
        mail($to, $_POST['subj'], $mess, "From:".$from); 
        echo 'Спасибо! Ваш заказ принят. '; 
} 
                    
if (!empty($_POST['submit'])) complete_mail(); 
else show_form(); 
?> 
</p>
</body>
</html>


Письмо приходит так


Код

Событие: Ð’ыход 
КоличеÑтво билетов: 1 
Телефон: 7777777777777777777 
ICQ: 7777777777777777 



Автор: $дмитрий 21.10.2011, 20:11
Ошибка в скрипте
Код

$from='site@mail.ru'; 
        "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8";

Поменяй на
Код

$from="site@mail.ru".
"\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=utf-8";

Автор: MrDmitry 25.10.2011, 22:31
Огромное спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)