Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Perl, PHP: отправка формы на e-mail

Автор: Kjyljy
Дата сообщения: 23.04.2013 20:04
Нужна помощь СРОЧНО!!!
сделал форму обратной связи на сайт очень простоую.
письма приходят на указанный мейл, только есть одно большущее даже огромное НО!
вместо русских букв - иероглифы какие-то. пробовал кодировки менять не помогло.
что делать почему так происходит?
на хостинге php подключено.
p.s. я нуб в этом деле, прошу по проще...
Вот html код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Форма заказа</title>
<LINK rel="stylesheet" media="screen" type="text/css" title="Style" href="css/style.css">

</head>

<body>
<p>Здесь вы можете оставить свою заявку на приобретение товара</p>
<form action="send.php" method="post" name="f1">
<p>Введите имя:<br>
<input type="text" name="name" id="name" class="in1"></p>
<p>Введите email:<br>
<input type="text" name="email" id="email" class="in1"></p>
<p>Введите сообщение:<br>
<textarea name="message" id="message" rows="5" cols="30" class="ta1"></textarea>
<br>
<br>
<input type="submit" value="Отправить сообщение" class="bt1"></p>


</form>

</body>
</html>

И php код:

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$address = 'ddd@mail.ru';
$sub = "Проба формы заказа";
$mes = "Автор назвался: $name \nУказал свой адрес: $email \nСодержание письма: $message";
$verify = mail ($address,$sub,$mes,"Content-type: text/plain; charset = windows-1251\r\nFrom:$email");
if ($verify == 'true')
{
echo "<p>Сообщение отправлено";
}
else
{
echo "<p>Сообщение не отправлено";
}
?>
Автор: Cheery
Дата сообщения: 23.04.2013 20:07
Kjyljy

Цитата:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

то есть страница у вас в уникоде? тогда почему вы утверждаете, что в почте отправляется
Цитата:
charset = windows-1251

?

сделайте и форму в 1251.. либо перекодируйте результат из нее в 1251, либо письмо в уникоде отсылайте
Автор: Kjyljy
Дата сообщения: 23.04.2013 20:29
так теперь шило на мыло получилось...
изменил на charset=utf-8 php код
и теперь приходит в таком формате

---(тут пустые квадраты всякие)----: вован
---(тут пустые квадраты всякие)-----: pok@mail.ru
---(тут пустые квадраты всякие)----: работать будем?

до изменения было вот так:

Автор назвался: ---(тут иероглифы всякие)----
Указал свой адрес: ---(тут иероглифы всякие)----
Содержание письма:---(тут иероглифы всякие)----
Автор: Cheery
Дата сообщения: 23.04.2013 20:32
Kjyljy

Цитата:
изменил  на charset=utf-8 php код
и теперь приходит в таком формате

Ну так код php тоже должен быть тогда в уникоде - чтобы текстовая строка, которая формируется этим кодом, тоже была в уникоде.
Автор: Kjyljy
Дата сообщения: 23.04.2013 20:41

Цитата:
Ну так код php тоже должен быть тогда в уникоде

Все сделал, вроде приходит в адекватном виде) Спасибо.
и напоследок вопрос
форма теперь считай работает. и как ее теперь вставить в мой сайт?
у меня там есть кнопка при нажатии на которую перекидывает на новую страницу(обратной связи)
как мен сделать, чтобы перебрасывало именно на эту страницу?
т.е. как файлы называть загружаемые на сервер чтобы все было ОК
Автор: Cheery
Дата сообщения: 23.04.2013 20:42
Kjyljy

Цитата:
как мен сделать, чтобы перебрасывало именно на эту страницу?

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


Цитата:
т.е. как файлы называть загружаемые на сервер чтобы все было ОК

как угодно, но ASCII символами (не кириллицей)
Автор: EandyCat
Дата сообщения: 26.05.2013 07:16
Народ подскажите, перечитал тему, но так ничего и не получилось.

У меня проблема с кодировкой.




Код:
<?php
//If the form is submitted
if(isset($_POST['btsend'])) {
//If there is no error, send the email
if(!isset($hasError)) {
$subject = get_option('luna_subject');
$fname = $_POST['fname'];
$email = $_POST['email'];
$message = $_POST['message'];

$emailTo = get_option('luna_contactemail'); // please change this to your desire email address thru theme options
$subject = $subject . ' От пользователя '.$fname;
$body = "Имя: $fname \n\nEmail: $email \n\nТекст Сообщения: $message";
$headers = 'from: '.$fname.' <'.$email.'>' . "\r\n" . 'Reply-To: ' . $email;


mail($emailTo, $subject, $body, $headers);

$emailSent = true;
}
}
get_header();
?>
Автор: Cheery
Дата сообщения: 26.05.2013 07:57
EandyCat
плохо читали, значит... в какой кодировке страница с формой?
похоже, что в уникоде
ну так и в письме указывайте уникод, примеры выше были
то есть добавляете к заголовкам

Цитата:
Content-Type: text/plain; charset=UTF-8

да и сам скрипт должен быть в уникоде
Автор: EandyCat
Дата сообщения: 26.05.2013 08:25
Страница в Юникоде правильно догадались

Добавил строку:
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

и в начали на всякий пожарный добавил
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

И сам документ сохранен с кодировкой: utf-8

Результата тот же


Когда декодирую текст, который мне пришел на почту, то текст кодируется в нужный и подсказка:

Как нам пришлось помучиться

Код: KOI8-R &#8594; UTF-8
Автор: Cheery
Дата сообщения: 26.05.2013 08:47
EandyCat

Цитата:
Страница в Юникоде

это браузер так считает или вы? проверили?
потому что мета таг в этом случае роли не играет


Цитата:
И сам документ сохранен с кодировкой: utf-8

какой документ? скрипт?
Автор: EandyCat
Дата сообщения: 26.05.2013 08:55
Просмотр кода страницы (онлайн):

Код: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru-RU">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="" />
Автор: Cheery
Дата сообщения: 26.05.2013 08:57
EandyCat

Цитата:
Просмотр кода страницы (онлайн)

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

ps: тем более какой смысл во второй meta, да еще и перед doctype?
вам сказали, что нужно добавить в заголовок письма, чтобы подсказать почтовому клиенту в какой кодировке сообщение
Автор: EandyCat
Дата сообщения: 26.05.2013 09:17

Цитата:
в какой кодировке отображает браузер?


Тогда как это посмотреть? Могу дать ссылку на сайте.
Контакты     



Цитата:
вам сказали, что нужно добавить в заголовок письма, чтобы подсказать почтовому клиенту в какой кодировке сообщение

Значит я не правильно понимаю о чем вы говорите.
Я в php НОЛЬ, взял готовый шаблон а он не работает нормально с русской кодировкой.

Я Вас понял так что нужно вставить строку:
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
Но толи не туда толи не то...
Я этот код и раньше вставлял, но результат - ноль.
второй день лазию по инету и пытаюсь разобраться.

Спасите ...
схожу с ума...
Автор: Cheery
Дата сообщения: 26.05.2013 09:23
EandyCat
да, страница в уникоде


Код: $headers = 'From: '.$fname.' <'.$email.'>' . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'Content-Type: text/plain; charset=UTF-8';
Автор: EandyCat
Дата сообщения: 26.05.2013 09:26
Спасибо БОЛЬШОЕ, всё заработало.
Автор: larabelle
Дата сообщения: 24.10.2013 11:07

Цитата:
Что то в ентом роде - шлет все поля формы.
$webmaster="tut@sobaka.ru";
$toemail="кому слать";
$i=0;
while (list($cle, $val)=each($_POST)){
$key[$i]=$cle;
$value[$i]=$val;
$i++;
}
$message = ""; ...


возможно ли сделать так, что сообщение юзера прийдет не на 1 адрес ($webmaster="tut@sobaka.ru"), а , например на 2 или на 3?

Спасибо.
Автор: Cheery
Дата сообщения: 24.10.2013 21:30
larabelle

Цитата:
а , например на 2 или на 3?

перечислите их через запятую.
Автор: Ahaltek
Дата сообщения: 31.10.2013 13:39
С формы отправляю mail()-ом письмо на info@XXX.XX сайт на one.com. Там переадресация на gmail и mail.ru. На mail.ru доходят письма на gmail нет. На google написано что воизбежания спама блокируется если домен не соответствует IP и просит отправлять с помощью smtp. Как я понял что должен smtp-авторизоваться на postmaster@XXX.XX и отправить с него. но думаю бестолку. поэтому хочу напрямую скидывать на gmail с smtp. как это сделать?
Автор: Cheery
Дата сообщения: 31.10.2013 18:06
Ahaltek

Цитата:
как это сделать?

напрямую - через свой аккаунт на gmail? иначе разницы не будет, что вы туда скриптами полезете, что отправлялось через sendmail
Автор: Ahaltek
Дата сообщения: 01.11.2013 08:00
Cheery
А почему с mail.ru отправляю письмо YYY@XXX.XX доходит на gmail? Переадресация срабатывает
Автор: Cheery
Дата сообщения: 01.11.2013 08:03
Ahaltek
потому что отправляете с нормального почтового сервера, с mx записью
сообщение, скорее всего, идет о PTR записи
дословно нужно видеть сообщение об отказе
Автор: Ahaltek
Дата сообщения: 01.11.2013 09:12
а если отправлять почту буду на mail.ru а там перенавравлять то же не проканает?

Добавлено:
обмануть не как не получится?
Автор: Cheery
Дата сообщения: 01.11.2013 09:57
Ahaltek
ну отправляйте, с авторизацией своего аккаунта, через SMTP сервер mail.ru - что вызывает проблемы?
Автор: Ahaltek
Дата сообщения: 14.11.2013 21:18
Cheery
Повторюсь.
Задача. отправить письмо с формы XXX.de(на one.com) на YYY@XXX.de, с него переaдресовать на ZZZ@gmail.com.
вопрос 1.
делаю фун-ей mail(). в YYY@XXX.de попадает в корзину (т.к. from не был указан, это я исправлю), но доходит. разве не должен YYY@XXX.de сам отправить по SMTP(или не SMTP) на gmail? Думаю что gmail его просто банит из-за неполных заголовков. так?
вопрос 2.
в место mail() использовал phpmailer. скачал пример, с денвера(локально) отправляется письмо, т.е задача выполняется. заливаю пример на XXX.de и с него отправляю. выдает ошибку

SMTP -> ERROR: Failed to connect to server: Connection timed out (110)
SMTP Error: Could not connect to SMTP host.

в чем проблема? разница в версиях PHP?
Автор: Cheery
Дата сообщения: 14.11.2013 21:54
Ahaltek

Цитата:
разве не должен  YYY@XXX.de сам отправить по SMTP(или не SMTP) на gmail

откуда же мы это знаем? зависит от настроек почтового сервера обслуживающего XXX.de


Цитата:
разница в версиях PHP?

хостинг бесплатный? запрещены исходящие подключения с помощью php скриптов.
Автор: Romano
Дата сообщения: 17.02.2014 07:24
есть сайт с 5 страницами, на каждой странице простая и одинаковая форма заявки (на PHP)...

возник вопрос, как при получении заявки на почту отслеживать с какой страницы он был выслан...

какой код нужно прописать в форму отправки? чтоб это можно было посмотреть в электронной почте.
Автор: Cheery
Дата сообщения: 17.02.2014 07:28
Romano
можно добавить невидимое поле к форме
<input type='hidden' value='какой то идентификатор данный страницы'>

и отправлять его в письме тоже.

можно к письмо добавлять $_SERVER['HTTP_REFERER'], если он передается браузером.
Автор: Romano
Дата сообщения: 17.02.2014 07:49
вариант с ид интересный... допустим пропишу я его в поле формы заявки, а что мне прописать в исполняемом файле?

вот в send.php такой код:


Код:
<?php
    $toEmail='info@mail.ru';
    $subject = 'Заказ ***';
    
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: ".$_POST['f_name']." <".$_POST['f_mail'].">\r\n";

$date = date("d/m H:i");

$body = "Имя: " . $_POST['f_name'] . '<br/>';
$body .= "Телефон: " . $_POST['f_tel'] . '<br/>';
$body .= "E-mail: " . $_POST['f_mail'] . '<br/>';
$body .= "Дата и время: $date";

mail($toEmail, $subject, $body, $headers);

?>
Автор: Cheery
Дата сообщения: 17.02.2014 07:53
Romano

Цитата:
а что мне прописать в исполняемом файле

ну очевидно же все..

добавить к $body аналогичным образом значение из невидимого поля (полю нужно добавить атрибут name='имя_поля')

тогда
$body .= $_POST['имя_поля'];
Автор: likbez
Дата сообщения: 27.05.2014 18:22
стоит задача вставить форму на статичную HTML-страницу; в инструкции разработчика написано: после настройки формы через веб-интерфейс вставить строки
<?php
require_once('../function.php');
formcraft(1);
?>
в то самое место страницы, где должна появляться форма.
ничего не помогает, хотя автономно (www.site.zone//formcraft/form.php?id=1 ) форма работает без проблем.
где тут искать грабли?

Страницы: 1234567891011121314151617

Предыдущая тема: Как сделать так чтобы в MySQL грузились тяжёлые картинки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.