Все про PHP

Не нашли подходящего раздела? Вам сюда!

Re: Все про PHP

Сообщение Nikel097 » 28 сен 2013, 12:22

Может я ошибаюсь, но Вы меняете кодировку для $from и $head.
А у меня в самом сообщении некорректно отображается, то есть в $mess.
Аватара пользователя
Nikel097
 
Сообщения: 276
Зарегистрирован: 04 июн 2012, 12:27
Откуда: Казахстан, Алматы

Re: Все про PHP

Сообщение Encoder » 29 сен 2013, 02:21

А можно на код глянуть? А лучше выложите страницу.
Аватара пользователя
Encoder
Модератор
 
Сообщения: 360
Зарегистрирован: 21 фев 2011, 11:15

Re: Все про PHP

Сообщение Nikel097 » 29 сен 2013, 07:57

Код всей страницы. Суть такая: пользователь вводит свой логин, сайт генерирует код, который отправляет ему на почту, указанную при регистрации. Пользователь копирует оттуда код и вставляет в input, если он верный, то сайт сообщает пользователю его пароль.
Код: Выделить всё
<?php
session_start
();
?>

<html>
<head>
<meta http-equiv="Content-Type" Content="text/html; Charset=UTF-8">
<link rel="stylesheet" href="http://smodels.kz/styles/allstyle.css" type="text/css">
<link rel="shortcut icon" href="http://smodels.kz/favicon.ico">

<title>Восстановление пароля :: smodels.kz</title>

<link rel="stylesheet" href="mystyle.css" type="text/css">

<style type='text/css'>
sup{color:#e00;}
form{font-famaly:arial; font-size:16px; font-weight:bolder;}
form table tr td{font-famaly:arial; font-size:16px; font-weight:bolder; color:#000;}
input.text {width:250px; text-align:right; border-radius:15px; padding:0px 5px;}
input.text:hover{border:2px solid #fa1;}
input.text:focus{border:solid 2px #f00;}
textarea{height:200px; width:350px; text-align:left; border-radius:15px; padding:0px 5px; border:inset 2px;}
textarea:hover{border:2px solid #fa1;}
textarea:focus{border:solid 2px #f00;}
td.input{width:350px; font-size:12px; font-weight:normal;}
li{font-famaly:arial; font-size:16px; color:#e00;}
</style>
</head>
<body style='background:;'  topmargin="0" leftmargin="0">


<?php include('include/header.txt');?>

<table style='width:100%' cellpadding="0">
<tr>
<td style='width:200px;' valign='top'>
<?php include('include/menu.txt');?>
</td>
<td valign='top' class='body'>
<center><div class='bigtitle'>Восстановление пароля</div></center>

<center><br>
<font style='color:#000; font-famaly:arial; font-size:20px; font-weight:bolder'><b>Чтобы восстановить пароль, заполните необходимые пункты</b></font>
<br> <br> </center>

<?
if (strlen($_POST['submit'])!==0) {                                        //Если форма активировалась то

$login=$_POST['login'];
$login=htmlspecialchars($login);$login=trim($login);


$result mysql_query("SELECT password,mail FROM users WHERE login='$login'",$db);
$myrow mysql_fetch_array($result);

$i=0
if (
strlen($login)==0)  {$error[$i]='Вы не ввели <b><u>Логин</b></u>';$i++;} else {
                if (
strlen($myrow['mail'])==0) {$error[$i]='Пользователя с логином <b><u>'.$login.'</u></b> не существует';$i++;}}

}  else {
$i=1;}        //Конец коду, после активации формы

if (($i>0)and(strlen($_SESSION['login'])==0)) {
  if (
strlen($_POST['submit'])!==0) {foreach($error as $val)   {echo("<li class='error'>$val</li>\n");}}
?>



<center><form action='' method="POST" name="form">
<table style='width:550px;'>
<tr><td align='right' valign='top'  style='width:250px;'>Логин<sup>*</sup></td><td class='input'><input type='text' name='login' value="<?php echo ($_POST['login']);?>" maxlength='20' class='text'><br>Ваш логин, от которого необходим пароль</td></tr>

<tr><td colspan='2'><center><input type="submit" value="Получить пароль" name="submit" class='button'> 
<input type="reset" value="Очистить" class='button'></td></tr></center>
</table>
Пункты с <sup>*</sup> (со звездочкой) обязательны для заполнения
</form></center>

<?
} else {
if (
strlen($_SESSION['code'])==0) {                                                                                                          //Если код еще не сгенерирован и не отправлен
$code=chr(rand(97,122)).chr(rand(65,90)).rand(100,999).chr(rand(97,122)).chr(rand(65,90));

$_SESSION['code']=$code;
$_SESSION['login']=$login;
$_SESSION['password']=$myrow['password'];

$mail=$myrow['mail'];
$_SESSION['mail']=$mail;
$to=$mail;
$from='Администрация сайта smodel.kz';
$title='Восстановление пароля';
$mess='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz';
mail($to$title$mess'From:'.$from);
echo(
'Код, для восстановления выслан на <b><u>'.$_SESSION['mail'].'</u></b>. Если Вы эту закроете вкладку, то при повторной попытке восстановить пароль, сгенерируется новый код и старый будет не действителен.<br>');

?>
<center><form action='' method="POST" name="form">
<table style='width:550px;'>
<tr><td align='right' valign='top'  style='width:250px;'>Введите код<sup>*</sup></td><td class='input'><input type='text' name='code' value="<?php echo ($_POST['code']);?>" maxlength='20' class='text'><br>Введите, полученный Вами код, чтобы подтвердить, что Вы владелец</td></tr>

<tr><td colspan='2'><center><input type="submit" value="Получить пароль" name="submit" class='button'> 
<input type="reset" value="Очистить" class='button'></td></tr></center>
</table>
Пункты с <sup>*</sup> (со звездочкой) обязательны для заполнения
</form></center>
<?
} else{                                                                                                                                                                                  //Если пользователь активировал вторую форму
$i=0;
if (
strlen($_POST['code'])==0) {$error[$i]='Вы не ввели <b><u>Код</b></u>';$i++;} else 
                    if (
$_POST['code']!==$_SESSION['code']) {$error[$i]='Код введен неправильно';$i++;}

if (
$i>0) {
echo(
'Код, для восстановления выслан на <b><u>'.$_SESSION['mail'].'</u></b>. Если Вы эту закроете вкладку, то при повторной попытке восстановить пароль, сгенерируется новый код и старый будет не действителен.<br>');
  foreach(
$error as $val)   {echo("<li>$val</li>\n");}
?>
<center><form action='' method="POST" name="form">
<table style='width:550px;'>
<tr><td align='right' valign='top'  style='width:250px;'>Введите код<sup>*</sup></td><td class='input'><input type='text' name='code' value="<?php echo ($_POST['code']);?>" maxlength='20' class='text'><br>Введите, полученный Вами код, чтобы подтвердить, что Вы владелец</td></tr>

<tr><td colspan='2'><center><input type="submit" value="Получить пароль" name="submit" class='button'> 
<input type="reset" value="Очистить" class='button'></td></tr></center>
</table>
Пункты с <sup>*</sup> (со звездочкой) обязательны для заполнения
</form></center>

<?
} else                                                                                                             //Вывод пароля
{
echo(
'Ваш обещанный пароль: <u><b>'.$_SESSION['password'].'</b></u>. Не забывайте его больше :)');
unset(
$_SESSION['code']);unset($_SESSION['login']);unset($_SESSION['mail']);unset($_SESSION['password']);
}                                                                                                                   
//End вывод пароля

}
}                                                                                                                   
//Главный End
?>

<br>

</td>
</tr>
</table>

<?php include('include/footer.txt');?>

</body>
</html>


А вод конкретно код отправки сообщения
Код: Выделить всё
$mail=$myrow['mail'];
$_SESSION['mail']=$mail;
$to=$mail;
$from='Администрация сайта smodel.kz';
$title='Восстановление пароля';
$mess='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz';
mail($to$title$mess'From:'.$from); 


P.S. кодировка страницы UTF-8 (без BOM).
Аватара пользователя
Nikel097
 
Сообщения: 276
Зарегистрирован: 04 июн 2012, 12:27
Откуда: Казахстан, Алматы

Re: Все про PHP

Сообщение Encoder » 29 сен 2013, 16:25

Я в конце добавил вот это

Код: Выделить всё
<?php
$code=chr(rand(97,122)).chr(rand(65,90)).rand(100,999).chr(rand(97,122)).chr(rand(65,90));
$to    = 'my@mail.com';
$from  ='Администрация сайта smodel.kz';
$title ='Восстановление пароля';
$mess  ='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz';
    if(mail($to, $title, $mess, 'From:'.$from)) {
        echo 'Письмо успешно отправил!';
    }
?>


И мне пришло на gmail письмо без кракозябр, на локальном хостинге тоже все хорошо. :)?
Изображение


P.S. Тестил у себя на хостинге, так как на вашем мне письмо так и не пришло.
Аватара пользователя
Encoder
Модератор
 
Сообщения: 360
Зарегистрирован: 21 фев 2011, 11:15

Re: Все про PHP

Сообщение Nikel097 » 29 сен 2013, 16:31

Я только что попробовал отправить на @yandex.ru и там шапка отображается коряво, все остальное нормально.
Аватара пользователя
Nikel097
 
Сообщения: 276
Зарегистрирован: 04 июн 2012, 12:27
Откуда: Казахстан, Алматы

Re: Все про PHP

Сообщение Nikel097 » 29 сен 2013, 16:32

На моем хостинге сегодня вечером почему-то и на mail.ru не приходит, а на yandex.ru пришло.
Аватара пользователя
Nikel097
 
Сообщения: 276
Зарегистрирован: 04 июн 2012, 12:27
Откуда: Казахстан, Алматы

Re: Все про PHP

Сообщение Encoder » 29 сен 2013, 17:02

Закодируйте его вот так:
Код: Выделить всё
$title ='=?windows-1251?B?'. base64_encode('Тема сообщения').'?=';
Аватара пользователя
Encoder
Модератор
 
Сообщения: 360
Зарегистрирован: 21 фев 2011, 11:15

Re: Все про PHP

Сообщение Nikel097 » 29 сен 2013, 18:14

Вот такая фигня работает для @yandex.ru

Код: Выделить всё
$to=$mail;
   $from='=?utf-8?B?'. base64_encode("Администрация сайта").'?=';
$title ='=?utf-8?B?'. base64_encode("Восстановление пароля").'?=';
$mess='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz'."\n";
if (mail($to, $title, $mess, 'From: '.$from.' smodels.kz')) {echo('Код, для восстановления выслан на <b><u>'.$_SESSION['mail'].'</u></b>. Если Вы эту закроете вкладку, то при повторной попытке восстановить пароль, сгенерируется новый код и старый будет не действителен.<br>');} 


но при прочтении всех сообщений шапка отображается не корректно:
1.png
1.png (6.59 КБ) Просмотров: 9721


(Раньше было наоборот: в списке всех сообщений заголовок отображался нормально, только слова были склеины, то есть без пробелов. А в самом письме шапка коряво отображалась)
Аватара пользователя
Nikel097
 
Сообщения: 276
Зарегистрирован: 04 июн 2012, 12:27
Откуда: Казахстан, Алматы

Re: Все про PHP

Сообщение Nikel097 » 29 сен 2013, 18:56

Сейчас заработал mail.ru. Мне пришло 4 сообщения, все которые я отправлял, возможно и Вам придут.
Но на всякий случай вот как они приходят:
2.png
2.png (25.54 КБ) Просмотров: 9719
Аватара пользователя
Nikel097
 
Сообщения: 276
Зарегистрирован: 04 июн 2012, 12:27
Откуда: Казахстан, Алматы

Re: Все про PHP

Сообщение Encoder » 29 сен 2013, 19:19

Советую почитать PHP 5 в подлиннике 2-е издание. Автор Д. Котеров. Глава 27. Посылка писем через PHP.
Аватара пользователя
Encoder
Модератор
 
Сообщения: 360
Зарегистрирован: 21 фев 2011, 11:15

Пред.След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 63

cron
Рейтинг@Mail.ru