Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отправка подтверждения на емэйл.
 
 автор: Kreg-Heg   (16.04.2007 в 21:42)   письмо автору
 
 

Здравствуйте уважаемые знатоки !!! ))))))))
Вот смотрите, есть регистрация. Данные вносятся в базу. В том числе и email. Скажите пожалуйста, как сделать так, чтобы на мыло отправлялось подтверждение о регистрации?
Спасибо!

   
 
 автор: tAleks   (16.04.2007 в 21:52)   письмо автору
 
   для: Kreg-Heg   (16.04.2007 в 21:42)
 


mail("mail@mail.ru", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru");


Примерно так.

   
 
 автор: Kreg-Heg   (17.04.2007 в 07:14)   письмо автору
 
   для: tAleks   (16.04.2007 в 21:52)
 

Я планировал увидеть более подробный код. Можбыть ктото может по шагам написать.

   
 
 автор: tAleks   (17.04.2007 в 09:19)   письмо автору
 
   для: Kreg-Heg   (17.04.2007 в 07:14)
 

А подробнее с какого места? С момента занесения данных в базу?
И что вы хотите от этого письма? Просто уведомить чела о том, что он зарегистрирован, или послать ему уникальную ссыку, пройдя по которой но должен подтвердить свою регистрацию?

   
 
 автор: Kreg-Heg   (17.04.2007 в 09:24)   письмо автору
 
   для: Kreg-Heg   (17.04.2007 в 07:14)
 

<?php
$dbcnx = mysql_connect('localhost','root','*****');
$dbname = "rega";
$dbtable = "reg";
$user = $_POST['login'];
$email = $_POST['mail'];
if (!$dbcnx){
echo(" В настоящий момент регистрация не может быть реализована, повторите попытку пойже ");
}
if ($dbcnx){
echo(" Соединение установлено");
}
if (!mysql_select_db($dbname, $dbcnx)){
echo( " В настоящий момент регистрация не может быть реализована,
повторите попытку пойже " );
}
if (mysql_select_db($dbname, $dbcnx)){
echo("Соединение прошло успешно");
}
$sql="insert into $dbtable (login, email) values ('$user', '$email')";
$go = mysql_query ($sql, $dbcnx);
if($go)echo(" Вся информация отправлена на указаный Вами при регистрации e-mail ");
if(!$go)echo(" Ошибка ");

...... и вот тут сама отправка, только как?

?>

---
А подробнее с какого места? С момента занесения данных в базу?
И что вы хотите от этого письма? Просто уведомить чела о том, что он зарегистрирован, или послать ему уникальную ссыку, пройдя по которой но должен подтвердить свою регистрацию?
---
Да, подтвердить. Желательно кнопка чтоб была, если такое возможно.

   
 
 автор: tAleks   (17.04.2007 в 13:10)   письмо автору
 
   для: Kreg-Heg   (17.04.2007 в 09:24)
 

Отправить мыло можно так:

<?php
$dbcnx 
mysql_connect('localhost','root','*****'); 
$dbname "rega"
$dbtable "reg"
$user $_POST['login']; 
$email $_POST['mail'];
if (!
$dbcnx){ 
echo(
" В настоящий момент регистрация не может быть реализована, повторите попытку пойже "); 
}
if (
$dbcnx){ 
echo(
" Соединение установлено"); 
}
if (!
mysql_select_db($dbname$dbcnx)){ 
echo( 
" В настоящий момент регистрация не может быть реализована, 
повторите попытку пойже " 
);

if (
mysql_select_db($dbname$dbcnx)){ 
echo(
"Соединение прошло успешно");

$sql="insert into $dbtable (login, email) values ('$user', '$email')";
$go mysql_query ($sql$dbcnx);

if(
$go)
{
 
$send mail("$email""Вы зарегистрированы""Поздравляю, вы зарегистрировались на сайте site.ru"); 
}

if(
$send)echo(" Вся информация отправлена на указаный Вами при регистрации e-mail ");
if(!
$send)echo(" Ошибка отправки письма");

?>


> Да, подтвердить. Желательно кнопка чтоб была, если такое возможно.

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

Я делаю так:

1. В таблицу user_reg_code записываю id_user - id зарегистрированного, но еще не подтвержденного юзера, и code - код активации (md5()).

2. Делаю письмо со ссылкой:
www.site.ru/confirm.php?id_user=$id_user&code=$code.

3. Когда юзер переходит по этой ссылке, то скрипт confirm.php удаляет запись из user_reg_code и ставит юзеру метку что он активирован.

   
 
 автор: Kreg-Heg   (17.04.2007 в 14:43)   письмо автору
 
   для: tAleks   (17.04.2007 в 13:10)
 

Хе))) Я понимаю что както так, а можно Ваш рабочий код полностью увидеть? Всмысле как само подтверждение сделать?

   
 
 автор: Kreg-Heg   (17.04.2007 в 16:03)   письмо автору
 
   для: Kreg-Heg   (17.04.2007 в 14:43)
 

Вот вставил вот это в скрипт:

if($go)
{
$send = mail("$email", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru");
}

if($send)echo(" Вся информация отправлена на указаный Вами при регистрации e-mail ");
if(!$send)echo(" Ошибка отправки письма");

ошибки не выдает но и письмо не приходит ((

   
 
 автор: tAleks   (18.04.2007 в 09:54)   письмо автору
 
   для: Kreg-Heg   (17.04.2007 в 16:03)
 

Пропробуй так:

$go = mysql_query ($sql, $dbcnx) or die(mysql_error()); 

if($go) 

 $send = mail("$email", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru");  



Может у тебя запрос не выполняется, поэтому и письмо не отправляется.

   
 
 автор: cheops   (18.04.2007 в 13:55)   письмо автору
 
   для: Kreg-Heg   (17.04.2007 в 16:03)
 

Переменная $go откуда берётся в системе?

   
 
 автор: tAleks   (18.04.2007 в 09:57)   письмо автору
 
   для: Kreg-Heg   (17.04.2007 в 14:43)
 

> Хе))) Я понимаю что както так, а можно Ваш рабочий код полностью увидеть? Всмысле как > само подтверждение сделать?


Мой код привязан к моей БД, поэтому вряд ли он подойдет вам.

Покажите ваши таблицы юзеров и кодов (если есть), я скажу как бы я на вашем месте сделал, с учетом ваших таблиц.

   
 
 автор: Kreg-Heg   (18.04.2007 в 15:28)   письмо автору
 
   для: tAleks   (18.04.2007 в 09:57)
 

Как вот этой строчкой может отправляться письмо, если в ней не вводится ни емэйл отправителя, ни пороль почты с которой отправляется письмо?

$send = mail("$email", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru");

   
 
 автор: Trianon   (18.04.2007 в 15:35)   письмо автору
 
   для: Kreg-Heg   (18.04.2007 в 15:28)
 

Считается, что эти параметры прописаны в конфиге php.ini (при работе через SMTP) или в конфиге самого sendmail'а (при работе через sendmail).

Хотя, конечно, набор заголовков (4-й параметр) неплохо было бы и сформировать.

   
 
 автор: Kreg-Heg   (18.04.2007 в 16:01)   письмо автору
 
   для: Trianon   (18.04.2007 в 15:35)
 

Такс, а если это не прописано в конфиге php.ini и если ктото не знает как это прописать, то как тогда выслать с указанием этого всего непосредственно в данном скрипте?

   
 
 автор: Gust   (18.04.2007 в 17:38)   письмо автору
 
   для: Kreg-Heg   (18.04.2007 в 16:01)
 


<?php
  
class Mail
  
{
  
// создаем переменные, в которых хранится содержимое заголовков
  
var $to '';
  var 
$from '';
  var 
$reply_to '';
  var 
$cc '';
  var 
$bcc '';
  var 
$subject '';
  var 
$msg '';
  var 
$validate_email true;
  
// проверяет допустимость почтовых адресов
  
var $rigorous_email_check true;
  
// проверяет допустимость доменных имен по записям DNS
  
var $allow_empty_subject false;
  
// допустимость пустого поля subject
  
var $allow_empty_msg false;
  
// допустимость пустого поля msg

  
var $headers = array();
  
/* массив $headers содержит все поля заголовка, кроме to и subject*/

  
function check_fields()
    
/* метод, проверяющий, переданы ли все значения заголовков
    и проверку допустимости почтовых адресов */
  
{
    if(empty(
$this -> to))
    {
      return 
false;
    }
    if(!
$this -> allow_empty_subject && empty($this -> subject))
    {
      return 
false;
    }
    if(!
$this -> allow_empty_msg && empty($this -> msg))
    {
      return 
false;
    }
    
/* если есть дополнительные заголовки, помещаем их в массив $headers*/
    
if(!empty($this -> from))
    {
      
$this->headers[] = "From: $this -> from";
    }
    if(!empty(
$this -> reply_to))
    {
      
$this -> headers[] = "Reply_to: $this -> reply_to";
    }
    
// проверяем допустимость почтового адреса
    
if ($this -> validate_email)
    {
       if (!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$this -> to))
       {
          return 
false;
       }
       return 
true;
    }
  }

  function 
send()
  
/* метод отправки сообщения */
  
{
     if(!
$this -> check_fields()) return true;
     if (
mail($this -> tohtmlspecialcharsstripslashes(trim($this -> subject))),
        
htmlspecialchars(stripslashes(trim($this -> msg)))))
     {
        return 
true;
     }else{
        return 
false;
     }
  }
}
?>

   
 
 автор: Trianon   (18.04.2007 в 18:03)   письмо автору
 
   для: Gust   (18.04.2007 в 17:38)
 

> if (mail($this -> to, htmlspecialchars( stripslashes(trim($this -> subject))),
> htmlspecialchars(stripslashes(trim($this -> msg)))))

Вот это как - серьезно?

   
 
 автор: Angel_Hranitel   (18.04.2007 в 19:12)   письмо автору
 
   для: Trianon   (18.04.2007 в 18:03)
 

А подробней о генирации ссылки для подтверждения можно?

   
 
 автор: ddhvvn   (18.04.2007 в 19:14)   письмо автору
 
   для: Angel_Hranitel   (18.04.2007 в 19:12)
 

Обычно здесь используется функция необратимого шифрования md5

   
 
 автор: Angel_Hranitel   (18.04.2007 в 19:16)   письмо автору
 
   для: Trianon   (18.04.2007 в 18:03)
 

А подробней о генирации ссылки для подтверждения можно?

   
 
 автор: ddhvvn   (18.04.2007 в 19:30)   письмо автору
 
   для: Angel_Hranitel   (18.04.2007 в 19:16)
 

Ну например:

Ссылку можно сгенерировать так:

<?php
  
//вам уже известен логин $login пользователя
  
$code_link md5($login);

  
$insert_query mysql_query("INSERT INTO users VALUES (0, '$login', '$code_link')"); //тут нужно сохранить код в БД, иначе как же Вы проверите его?

  
$code_link "http://mysite.ru/activate.php?login=$login&code=" $code_link;
//дальше отправляете письмо и все такое :))
?>


Примерно так. Вместо логина можно использовать е-майл, любую другую информацию, а еще лучше их совокупность.

   
 
 автор: Trianon   (18.04.2007 в 19:34)   письмо автору
 
   для: ddhvvn   (18.04.2007 в 19:30)
 

странный подход.
Логин - сущность открытая. С какой целью генерировать его хеш?

Если редиске захочется обойти проверку, он просто посчитает хеш самостоятельно, сформирует адрес и уйдет по ссылке. Тут rand() обычно применяют. Его есть смысл загонять в таблицу. И его всяко не засечешь со стороны клиента.

   
 
 автор: ddhvvn   (18.04.2007 в 19:36)   письмо автору
 
   для: Trianon   (18.04.2007 в 19:34)
 

Я же сказал: просто пример. Чтобы он знал, куда что подставлять.
А так, конечно, открытые данные (логин, е-майл, номер телефона) лучше не использовать.

   
 
 автор: Trianon   (18.04.2007 в 19:43)   письмо автору
 
   для: ddhvvn   (18.04.2007 в 19:36)
 

>Примерно так. Вместо логина можно использовать е-майл, любую другую информацию, а еще лучше их совокупность.
>Я же сказал: просто пример.

А я его опроверг. Вместо логина здесь нельзя использовать открытые данные, а скрытых (частных) данных нету, поскольку эккаунт окончательно не зарегистрирован. Вывод: здесь надо генерировать псевдослучайный сеансовый ключ.

Поймите, дело не в том, md5, применялся для формирования окончательной строки, base64 или простое копирование в лоб. Дело в том, откуда можно эту самую строку взять. И это - принципиально.

   
 
 автор: Kreg-Heg   (18.04.2007 в 19:31)   письмо автору
 
   для: Angel_Hranitel   (18.04.2007 в 19:16)
 

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

$send = mail("мэйл отправителя", "пороль отправителя" , "мэйл получателя", "тема", "само сообщение");

Или такого еще не придумали? =)
(я говорю про простое письмо без подтверждения)

   
 
 автор: Trianon   (18.04.2007 в 19:36)   письмо автору
 
   для: Kreg-Heg   (18.04.2007 в 19:31)
 

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

   
 
 автор: Kreg-Heg   (18.04.2007 в 19:39)   письмо автору
 
   для: Trianon   (18.04.2007 в 19:36)
 

Ладно, тогда скажите, как получить этот самый тупой результат, просто отправить уведомление на почту без проверок и подтверждений. За два дня так никто и не написал этого!

   
 
 автор: Trianon   (18.04.2007 в 19:53)   письмо автору
 
   для: Kreg-Heg   (18.04.2007 в 19:39)
 

Здрасти, приехали.
Вам написали сразу тупой пример одной строкой.
Ну да , он давал тупой результат (если на серверной стороне не настроен sendmail и/или smtp-сервер отправки. И кстати, давал другой тупой результат, если настроен.)
Но Вы же не удовлетворились?
Значит такой скрипт Вам не нужен?
А нужен, по всему видать, такой, который дает гарантированный эффект, да еще и независимо от серверных настроек. Сорри, такой , он во-первых не тупой, во-вторых ой какой непростой, а в-третьих, его на мой взгляд, еще не придумали.
Вот поэтому и не отвечают. Готовым скриптом.

У Вас тоже не получается написать? И у меня тоже.
Пытайтесь. Спрашивайте, что непонятно, и почему выходит не то, что ожидается.
Только чуть конкретнее, и без требований продукта под ключ.
Чем можем - поможем.

   
 
 автор: Kreg-Heg   (18.04.2007 в 20:54)   письмо автору
 
   для: Trianon   (18.04.2007 в 19:53)
 

Таким агрессивным настроем Вы мне точно не поможете. Если я не очень конкретно ставлю вопрос или если он глупый по своей сути, то это только потому что я многого не знаю, я ещё только учусь и поэтому хочется увидеть четкий ответ, чтобы он был понятен новичку.

   
 
 автор: Trianon   (18.04.2007 в 21:42)   письмо автору
 
   для: Kreg-Heg   (18.04.2007 в 20:54)
 

Вы просто взяли тему для новичка довольно сложную.
Здесь и работа с БД, и обработка входных данных, и регистрация эккаунта, и запрос подтверждения, и отправка писем, и к тому же с защищенного smtp-сервера(судя по Вашей реплике о пароле к исходящей почте). И пример всего этого Вы хотите видеть в одном четком понятном Вам ответе.
Там будет столько кода, что Вы его за раз не проглотите. И я не проглочу.

Если Вы попытаетесь разделить задачу на логические куски - окажется, что отправка e-mail - совершенно отдельная тема, в которой вопросов вагон и маленькая тележка.
Формирование подтверждения регистрации - другая отдельная тема, со своими тонкостями.
Остальное вышеперечисленное ябы не указал - не оставь Вы большую часть своего примера кодом соединения с БД.

Остановитесь на чем-нибудь одном. Напишите пример кода. Попробуйте его в действии. И задавайте вопросы по нему.
Вылизав одну часть , принимайтесь за другую. В конце концов все части соберете вместе.

   
 
 автор: Kreg-Heg   (19.04.2007 в 23:18)   письмо автору
 
   для: Trianon   (18.04.2007 в 21:42)
 

Всё. Я всё сделал. На другом форуме помогли. Спасибо всем кто реально пытался мне помочь!

   
 
 автор: acdcee   (20.04.2007 в 01:04)   письмо автору
 
   для: Kreg-Heg   (19.04.2007 в 23:18)
 


<?php
/*Эта функция фармирует письмо в константах сами напишете что и как*/
function send_mail($email,$username,$keyreg,$password,$key_check){
global 
$db,$module_name,$admin_mail,$sitename;
$subject="".$sitename."-"._ACTIVATEACCOUNT."";
$message=""._WELCOMSITEDIS."&nbsp;".$sitename.".&nbsp;"._UARELOGENID."&nbsp;".$username."<br>&nbsp;"._INHISMAILSENDKEYAPASS."<br>"._UKEY."&nbsp;".$keyreg."&nbsp;"._LASTINFO."&nbsp;"._STEPLINK."<a href=\"http://".getenv('SERVER_NAME')."/index.php?name=login&op=activat_account&key_check=".$key_check."\">http://".getenv('SERVER_NAME')."/modules.php?name=login&op=activat_account&key_check=".$key_check."</a><br>User agent: ".getenv('HTTP_USER_AGENT')."";
mail_send($email,$admin_mail,$subject,$message);
}
/*а эта отправляет, можно и другие формирующие функции писать и  в конечном использовать эту*/
function mail_send($email$smail,$subject,$message) {
global 
$charset,$sitename;
    
$email trim($email);
    
$smail trim($smail);
    
$subject trim($subject);
    
$mheader "MIME-Version: 1.0\n"
    
."Content-Type: text/html; charset=".$charset."\n"
    
."Reply-To: \"$smail\" <$smail>\n"
    
."From: \"$smail\" <$smail>\n"
    
."Return-Path: <$smail>\n"
    
."X-Mailer: TEXNO CMS Mailer\n";
    
mail($email$subject$message$mheader);
}
?>


Есть такое вариант формирования письма на емайл

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования