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

вот это:

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

дописываем сюда:

$to = "admin@meritec.su"; /*УКАЗАТЬ СВОЙ АДРЕС!*/
$subject = "Сообщение с вашего сайта";
$message = "Имя пославшего: $name, Электронный адрес: $email, Тема: $theme, Сообщение: $mess, IP-адрес:$REMOTE_ADDR";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
mail ($to,$subject,$message,$headers) or print "Не могу отправить письмо!";
echo "<center><b>СПАСИБО ЗА ВАШЕ СООБЩЕНИЕ!<br>";
exit;

Link to comment
Share on other sites

  • 0
вот это:

Может и мне поможете, сайт в utf 8 письма приходят с нераспознаной кодировкой , вот код обработчика

<?php
$url = "http://striphaus.ru/site/index-4.html"; //Ваша страница, где вы будете ставить форму обратной связи.
$title = "http://striphaus.ru/site"; //адрес вашего сайта
$subject = "Письмо с сайта $title"; //Тема отпровляемых вам сообщений
$admail = "zael55@ya.ru"; //Ваш e-mail, на который будут отправляться письма
$back = "<p><a href=\"java script: history.back()\">Назад</a></p>";

if(@$_POST['nick'] or @$_POST['email'] or @$_POST['delivery'] or @$_POST['msg'])
{
@$nick = $_POST['nick'] or die("Убедитесь, что вы ввели свое имя!$back");
@$email = $_POST['email'] or die("Убедитесь, что вы ввели свой E-mail!$back");
@$delivery = $_POST['delivery'] or die("Убедитесь, что вы ввели тему сообщения!$back");
@$msg = $_POST['msg'] or die("Убедитесь, что вы ввели сообшение!$back");



if(!eregi("^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$", $email))
{
echo "Убедитесь, что вы ввели корректный E-mail!$back";
exit;
}

$content = "\nПользователь $nick!\n
Адресс: $email\n
Отправил(а) вам письмо с сайта - \"$title\"\n
Тема - $delivery, со следующим содержанием:\n\n$msg";
if(!@mail($admail, $subject, $content))
{
echo "Ошибка при отправке письма. Пожалуйста сообщите об этом администратору данного сайта, используя любой другой вид связи.$back";
exit;
}
else
{
echo "Ваше сообщение успешно отправлено!<Br> Вы получите ответ в ближайшее время ";
echo "<meta http-equiv=\"refresh\" content=\"1;URL=$url\">";
}
}
else {
die("Для отправки сообщения заполните все поля!$back");
}
?>

Link to comment
Share on other sites

  • 0
Надо еще заголовки письма указывать. И, да, слово «адрес» пишется с одной «с».
Ну адрес ая поправлю, а куда заголовки поставить? Этот скрипт вызывается из html формы

<form action="../mail.php" method="post"><!--  путь к файлу обтаботчика!-->
<span class="red">*</span> <strong>Ваше имя:</strong><br>
<input type="text" name="nick" size="25" /><br>
ведите реальный e-mail адрес, на него вы получите ответ на ваше сообщение
<input type="text" name="email" size="25" /><br>
<span class="red">*</span> <strong>Тема сообщения:</strong>
<select name="delivery">
<option>
<option> Создание сайта
<option> Уроки HTML
<option> Электронные деньги
<option> Видеоуроки
<option> Фотошоп
<option> Заработок в интернете
<option> Партнерки
<option> Другое
</select>
<span class="red">*</span> <strong>Сообщение:</strong>
<textarea name="msg" cols="30" rows="5"></textarea>
</a>
<input type="submit" value=" Отправить! " id="submit_mail" />
</form>

Link to comment
Share on other sites

  • 0

Здравствуйте!

Аналогичная проблема: не очень сильна в верстке, проблема с кодировкой.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Оставить заявку | ООО ААА
</title>
</head>
<body>
<?php
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['mess'])) {$mess = $_POST['mess'];}
if (empty($organization))
{
echo "<b>Не указано наименование организации!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($name))
{
echo "<b>Не указано имя!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($post))
{
echo "<b>Не указана должность!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($region))
{
echo "<b>Не указана область/республика/край!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($locality))
{
echo "<b>Не указан населенный пункт!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($phone))
{
echo "<b>Не указан контактный телефон!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($email))
{
echo "<b>Не указан e-mail!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($type))
{
echo "<b>Не указан тип оборудования!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
if (empty($model))
{
echo "<b>Не указана модель!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
if (empty($mess))
{
echo "<b>Сообщение не написано!<p>";
echo "<a href=order.htm>Вернуться к заполнению формы</a>";
exit;
}
else
$to = "service@fw-ug.ru"; /*УКАЗАТЬ СВОЙ АДРЕС!*/
$subject = "Сообщение с вашего сайта";
$message = "Наименование организации: $organization \nИмя отправителя: $name \nДолжность отправителя: $post \nРегион: $region \nНаселенный пункт: $locality \nКонтактный телефон: $phone \nЭлектронный адрес: $email \nТип оборудования: $type \nМодель: $model \nСообщение: $mess";
$send = mail ($to,$subject,$message);
if ($send == 'true')
{
echo "<b>Спасибо за обращение! </br>Специалист компании свяжется с Вами в ближайшее время.<p>";
echo "<a href=index.htm>Нажмите,</a> чтобы вернуться на главную страницу";
}
else
{
echo "<p><b>Ошибка. Сообщение не отправлено!";
}
?>
</body>
</html>

В результате такой ответ приходит на почту:

мЮХЛЕМНБЮМХЕ НПЦЮМХГЮЖХХ: яLп+я-п¦я¬п¦

хЛЪ НРОПЮБХРЕКЪ: п?п+п¦я¦я¦п¦

дНКФМНЯРЭ НРОПЮБХРЕКЪ: п+п¦п+п¦п¦пTп¦я-

пЕЦХНМ: я-п+я¦я-п+п¦я¦п¦п¦я¦

мЮЯЕКЕММШИ ОСМЙР: п¦п+п¦пЁп+п¦п+п+я¦п¦

йНМРЮЙРМШИ РЕКЕТНМ: 89051234567

щКЕЙРПНММШИ ЮДПЕЯ: 12345@rambler.ru рХО НАНПСДНБЮМХЪ: п я-п+п+п¦п+п+п¦п¦пTя+п+п¦п+я+п+я-п¦ я¦я-п¦п+п+п¦

лНДЕКЭ: 123

яННАЫЕМХЕ: п?п+п¦п+п+п¦п¦я¦я¦

В PSpad кодировку тоже изменила на UTF-8, не помогает. Помогите пожалуйста!

Link to comment
Share on other sites

  • 0

я использую у себя вот этот механизм.. Вдруг пригодиться

$to  = "=?utf-8?b?".base64_encode('Администраторам')."?= <mail@mysite.ru>" ;
$subject = "=?utf-8?b?".base64_encode('Вопрос по теме')."?=";
$message = "Супер сообщение";
$headers = "Content-type: text/html; charset=utf-8 \r\n";
$headers .= "From: =?utf-8?b?".base64_encode('Сайт mysite.ru')."?= <mail@mysite.ru>\r\n";
mail($to, $subject, $message, $headers);

Link to comment
Share on other sites

  • 0

я использую у себя вот этот механизм.. Вдруг пригодиться

$to  = "=?utf-8?b?".base64_encode('Администраторам')."?= <mail@mysite.ru>" ;
$subject = "=?utf-8?b?".base64_encode('Вопрос по теме')."?=";
$message = "Супер сообщение";
$headers = "Content-type: text/html; charset=utf-8 \r\n";
$headers .= "From: =?utf-8?b?".base64_encode('Сайт mysite.ru')."?= <mail@mysite.ru>\r\n";
mail($to, $subject, $message, $headers);

подскажите кодировка через

$headers  = "Content-type: text/html; charset=utf-8 \r\n";

где вставляется? в начале кода?

Link to comment
Share on other sites

  • 0

<?php
$headers = "Content-type: text/html; charset=utf-8 \r\n";
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['mess'])) {$mess = $_POST['mess'];}
if (empty($organization))

Не работает, опять кракозябры :dash:

Edited by Inessa
Link to comment
Share on other sites

  • 0

Подскажите, пожалуйста, проблема корректностью полученного письма. Кодировки все выставила - приходит кириллица, но нет переноса строк. Причем нет разницы "\r\n" или просто "\n" (пробовала в том числе и на примере из 1-го поста).

Как можно побороть такую пакость?

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

Link to comment
Share on other sites

  • 0

Подскажите, пожалуйста, проблема корректностью полученного письма. Кодировки все выставила - приходит кириллица, но нет переноса строк. Причем нет разницы "\r\n" или просто "\n" (пробовала в том числе и на примере из 1-го поста).

Как можно побороть такую пакость?

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

Дело не в хостере, а в загаловке

В примере указано: $headers = "Content-type: text/html; charset=utf-8 \r\n";

text/html это значит письмо в формате html, значит переносы строк нужно обозначать тегами <br>

Если поменять Content-type на text/plain, то будет всё в порядке

Link to comment
Share on other sites

  • 0

Похожие проблемы и у меня. Письмо отображается корректно, но заголовок нет.

вот код. может я что-то упускаю.


public function sendLetter() {


$message = null;
$send = new Letter();

if (isset($_POST['send'])) {

$post = new POSTv2($send);
$send = $post->getObject();


if ($send->isValid()) {
$model = new SettingsAdminModel();
$settings = $model->getAllSettings();
$mail = new PHPMailer();
$mail->Encoding = '8bit';
$mail->ContentType = 'text/plain; charset=utf-8';
$mail->CharSet = 'utf-8';
$mail->From = $send->getFrommailletter();
$mail->IsHTML(true);
$mail->Subject = '=?utf-8?B?' . base64_encode($send->getTitleletter()) . '?=';
$show = new LookletterForm(null, null, null, $send->getMessageletter());
$mail->Body = ($show->getContent());
$mail->AddAddress($send->getMailletter());

$mail->Send();

$this->backLetterForm();
echo 'Ваше сообщение успешно отправлено';
} else {
$errorMessageList = $send->getErrorMessageList();
if ($errorMessageList) {

foreach ($errorMessageList as $errorMessage) {
echo $errorMessage . '<br/>';
}
}
}
}
}

Link to comment
Share on other sites

  • 0

Похожие проблемы и у меня. Письмо отображается корректно, но заголовок нет.

вот код. может я что-то упускаю.

Хорошо бы увидеть и само письмо.

Интересно вот вы делаете base64_ecode():


$mail->Subject = '=?utf-8?B?' . base64_encode($send->getTitleletter()) . '?=';

А внутри класса PHPMailer оно повторно, случайно, не кодится ?

Link to comment
Share on other sites

  • 0

Похожие проблемы и у меня. Письмо отображается корректно, но заголовок нет.

вот код. может я что-то упускаю.

Хорошо бы увидеть и само письмо.

Интересно вот вы делаете base64_ecode():


$mail->Subject = '=?utf-8?B?' . base64_encode($send->getTitleletter()) . '?=';

А внутри класса PHPMailer оно повторно, случайно, не кодится ?

Ваша правда - кодится. Кстати, оказывается без base64_ecode() результат subject тот же.

вот и само письмо


<div class='icmsModHeader'>
Форма отправки письма
</div>
<form action="/admin/?module=sendletter&actor_1=sendletter" method="POST">
<div>Откого:</div>
<input type="text" class="frommailletter" name="frommailletter" value="<?php echo $frommailletter; ?>"/>
<div>Кому:</div>
<input type="text" class="mailletter" name="mailletter" value="<?php echo $mailletter; ?>"/>

<div>Тема:</div>
<input type="text" class="titleletter" name="titleletter" value="<?php echo $titleletter; ?>" />
<div>Текст сообщения:</div>
<textarea class="ckeditor" name="messageletter"><?php echo $messageletter; ?></textarea>


<input type="submit" id="send" name="send" value="Отправить"/>
<input type="submit" id="look" name="look" value="Просмотреть" />
</form>

Link to comment
Share on other sites

  • 0

Ваша правда - кодится. Кстати, оказывается без base64_ecode() результат subject тот же.

Тотже что и с base64_ecode() или непонятный с кракозябрами ?

вот и само письмо

Нет я имел ввиду физическое письмо которое приходит c заголовками и телом

Link to comment
Share on other sites

  • 0

Ваша правда - кодится. Кстати, оказывается без base64_ecode() результат subject тот же.

Тотже что и с base64_ecode() или непонятный с кракозябрами ?

вот и само письмо

Нет я имел ввиду физическое письмо которое приходит c заголовками и телом

Проблема осталась, поэтому снова пишу. Subject кодируется в классе PHPMailer.

Но заголовки по прежнему приходят в кодировке base64. Получается это мейл не может их раскодировать? или я не там рою?

Вот пару примеров заголовков из разных писем:

=?UTF-8?B?0JfQtNGA0LDQstGB0YLQstGD0Lk=?=

=?UTF-8?B?0J7Qv9C+0LLQtdGJ0LXQvdC40LU=?=

Link to comment
Share on other sites

  • 0

Ваша правда - кодится. Кстати, оказывается без base64_ecode() результат subject тот же.

Тотже что и с base64_ecode() или непонятный с кракозябрами ?

вот и само письмо

Нет я имел ввиду физическое письмо которое приходит c заголовками и телом

Проблема осталась, поэтому снова пишу. Subject кодируется в классе PHPMailer.

Но заголовки по прежнему приходят в кодировке base64. Получается это мейл не может их раскодировать? или я не там рою?

Вот пару примеров заголовков из разных писем:

=?UTF-8?B?0JfQtNGA0LDQstGB0YLQstGD0Lk=?=

=?UTF-8?B?0J7Qv9C+0LLQtdGJ0LXQvdC40LU=?=

Думаю так:


=?UTF-8?B?0JfQtNGA0LDQstGB0YLQstGD0Lk?=

=?UTF-8?B?0J7Qv9C+0LLQtdGJ0LXQvdC40LU?=

но есть подозрение, что хрен редьки не слаще (строки в итоге декодируются: Здравствуй Оповещение)

Link to comment
Share on other sites

  • 0

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

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