Jump to content
  • 0

Кодировка формы обратной связи


Николаич
 Share

Question

Добрый день.

Вставил в сайт, который сейчас делаю макет формы обратной связи взятый из интернета.

http://meritec.su/contact.html

Сайт расположен на хостинге www.sweb.ru

Все отлично работает, письма приходят, например на почту mail.ru

Создал ящик типа admin@mritec.su

Письма приходят вида:

��� ����������: ���������, ����������� �����: karkarkar@bk.ru, ����: ����,

���������: ����

Обратился в техподдержку sweb:

Проблема возникает из-за того, что у Вас в письме нигде не указана кодировка

этого письма. Специализированные почтовые сервисы имею механизмы

автоопределения кодировки, и в них письмо отображается корректно.

Возьмите для образца скрипт с корректными заголовками:

#!/usr/local/bin/php
<?
$to = 'support@sweb.ru';
$return = 'support@sweb.ru';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: ' . $return . "\r\n";
$headers .= 'Reply-To: ' . $return . "\r\n";
$headers .= 'Return-Path: ' . $return . "\r\n";
$headers .= 'X-Mailer: PHP/' . phpversion();
$date = date('l\, M dS Y\, h:i:s A';
mail("$to", "mail_test", "$date", $headers);
echo "mail sent $date\n";
echo "done.\n";
?>

Но честно говоря пока что моих знаний не хватает чтобы исправить проблему и долго сидеть времени нет - жена ругается, в 4.15 утра уже самолет в Тунис. :)

Помогите исправить проблему, спасибо.

В файле html:

<p style="color:red"><strong>Вы можете отправить сообщение, заполнив следующую форму:</strong></p>
<form action="mail.php" method="post" onsubmit="return checkForm(this);">
<p><strong>Ваше имя:</strong><br>
<input type="text" name="name" size="30">
</p>
<p><strong>Ваш e-mail:</strong><br>
<input name="email" type="text" size="30" >
</p>
<p><strong>Тема:</strong><br>
<input name="theme" type="text" size="30" >
</p>
<p><strong>Сообщение:</strong><br>
<textarea name="mess" rows="5" cols="50"></textarea>
</p>
<input type="submit" value="Отправить сообщение">
</form>

В файле php:

<script type="text/javascript"><!--
function checkForm(obj){
var return_value = true;
// заносим значение поля почтовый ящик в переменную mail
var mail = obj.email.value;
// заносим значение поля отправитель в переменную sender
var sender = obj.name.value;
// заносим значение поля сообщение в переменную msg
var msg = obj.mess.value;
// регулярное выражение для проверки почтового ящика
var reg_mail = /[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i;
// регулярное выражение для проверки отправителя
var reg_sender = /[a-z]+/i;
// объявляем переменную, куда будет заноситься текст сообщения об ошибке
var error_msg = "Некорректно заполнены поля: ";
//проверка поля отправитель
if(reg_sender.exec(sender) == null && sender ==""){
error_msg += "Ваше имя ";
return_value = false;
}
//проверка поля почтовый ящик
if(reg_mail.exec(mail) == null){
error_msg += "Ваш e-mail ";
return_value = false;
}
//проверка поля текст сообщения
if(msg == ""){
error_msg += "Ваше сообщение ";
return_value = false;
}
//проверка на наличие ошибок, если возникла ошибка, выводим текст сообщения
if(!return_value)
alert(error_msg);
return return_value;
}//-->
</script>

<?php
if (isset ($name))
{
$name = substr($name,0,20); //Не может быть более 20 символов
if (empty($name))
{
echo "<center><b>Не указано имя!<p>";
echo "<a href=/contact.html>Вернуться и правильно заполнить форму.</a>";
exit;
}
}
else
{
$name = "не указано";
}
if (isset ($email))
{
$email = substr($email,0,20); //Не может быть более 20 символов
if (empty($email))
{
echo "<center><b>Не указан e-mail!<p>";
echo "<a href=/contact.html>Вернуться и правильно заполнить форму.</a>";
exit;
}
}
else
{
$email = "не указано";
}
if (isset ($theme))
{
$theme = substr($theme,0,20); //Не может быть более 20 символов
if (empty($theme))
{
echo "<center><b>Тема сообщения не указана!<p>";
echo "<a href=/contact.html>Вернуться и правильно заполнить форму.</a>";
exit;
}
}
else
{
$theme = "не указано";
}
if (isset ($mess))
{
$mess = substr($mess,0,1000); //Не может быть более 1000 символов
if (empty($mess))
{
echo "<center><b>Сообщение не написано!<p>";
echo "<a href=/contact.html>To return and fill the form correctly.</a>";
exit;
}
}
else
{
$mess = "not filled";
}
$i = "not filled";
if ($name == $i AND $email == $i AND $mess == $i)
{
echo "Error!";
exit;
}
$to = "admin@meritec.su"; /*УКАЗАТЬ СВОЙ АДРЕС!*/
$subject = "Сообщение с вашего сайта";
$message = "Имя пославшего: $name, Электронный адрес: $email, Тема: $theme, Сообщение: $mess, IP-адрес:$REMOTE_ADDR";
mail ($to,$subject,$message) or print "Не могу отправить письмо!";
echo "<center><b>СПАСИБО ЗА ВАШЕ СООБЩЕНИЕ!<br>";
exit;
?>

Link to comment
Share on other sites

Recommended Posts

  • 0

еще вот такой вопрос. может я чего то не понимаю, но ведь заголовок должен отправляться закодированным, а уже почтовый клиент сам его раскодирует. получается дело возможно в нем?

Да, это вероятно, но если уж клиент не может выполнять такие элементарные операции, то стоит ли им пользоваться?

Через Веб-интерфейс какого-нить поисковика отправьте письмо с кирилличным заголовком и клиентом посмотрите, вот и получите ответ.

Link to comment
Share on other sites

  • 0

еще вот такой вопрос. может я чего то не понимаю, но ведь заголовок должен отправляться закодированным, а уже почтовый клиент сам его раскодирует. получается дело возможно в нем?

Да, это вероятно, но если уж клиент не может выполнять такие элементарные операции, то стоит ли им пользоваться?

Через Веб-интерфейс какого-нить поисковика отправьте письмо с кирилличным заголовком и клиентом посмотрите, вот и получите ответ.

к сожалению дело не в нем

Link to comment
Share on other sites

  • 0

Можете экспортнуть оба письма (с нормальным заголовком и не преобразовывающимся) в формат eml или msg и выложить куда-нить, поглядим может что-нибудь прояснится?

Link to comment
Share on other sites

  • 0

Можете экспортнуть оба письма (с нормальным заголовком и не преобразовывающимся) в формат eml или msg и выложить куда-нить, поглядим может что-нибудь прояснится?

http://rghost.ru/36137407

к сожалению письма с нормальным заголовком нет.

верней есть, но только сделанные по образу и подобию, но на других проектах. думаю, что это не то

Link to comment
Share on other sites

  • 0

Верно, но когда смотрели на сайте яндекса или мейла заголовок был в таком виде. В общем проблема решилась)

в phpmailer убрали кодирование методом base64 и передавали заголовок как он есть.

Link to comment
Share on other sites

  • 0

Верно, но когда смотрели на сайте яндекса или мейла заголовок был в таком виде. В общем проблема решилась)

в phpmailer убрали кодирование методом base64 и передавали заголовок как он есть.

Ну для утф8 это канает, а вот для других кодировок нет. Странно что веб почта таких гигантов не распознаёт, надо будет через свой скрипт потестить...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy