|
|
|
| Здравствуйте уважаемые знатоки !!! ))))))))
Вот смотрите, есть регистрация. Данные вносятся в базу. В том числе и email. Скажите пожалуйста, как сделать так, чтобы на мыло отправлялось подтверждение о регистрации?
Спасибо! | |
|
|
|
|
|
|
|
для: Kreg-Heg
(16.04.2007 в 21:42)
| |
mail("mail@mail.ru", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru");
|
Примерно так. | |
|
|
|
|
|
|
|
для: tAleks
(16.04.2007 в 21:52)
| | Я планировал увидеть более подробный код. Можбыть ктото может по шагам написать. | |
|
|
|
|
|
|
|
для: Kreg-Heg
(17.04.2007 в 07:14)
| | А подробнее с какого места? С момента занесения данных в базу?
И что вы хотите от этого письма? Просто уведомить чела о том, что он зарегистрирован, или послать ему уникальную ссыку, пройдя по которой но должен подтвердить свою регистрацию? | |
|
|
|
|
|
|
|
для: 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(" Ошибка ");
...... и вот тут сама отправка, только как?
?>
---
А подробнее с какого места? С момента занесения данных в базу?
И что вы хотите от этого письма? Просто уведомить чела о том, что он зарегистрирован, или послать ему уникальную ссыку, пройдя по которой но должен подтвердить свою регистрацию?
---
Да, подтвердить. Желательно кнопка чтоб была, если такое возможно. | |
|
|
|
|
|
|
|
для: 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 и ставит юзеру метку что он активирован. | |
|
|
|
|
|
|
|
для: tAleks
(17.04.2007 в 13:10)
| | Хе))) Я понимаю что както так, а можно Ваш рабочий код полностью увидеть? Всмысле как само подтверждение сделать? | |
|
|
|
|
|
|
|
для: Kreg-Heg
(17.04.2007 в 14:43)
| | Вот вставил вот это в скрипт:
if($go)
{
$send = mail("$email", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru");
}
if($send)echo(" Вся информация отправлена на указаный Вами при регистрации e-mail ");
if(!$send)echo(" Ошибка отправки письма");
ошибки не выдает но и письмо не приходит (( | |
|
|
|
|
|
|
|
для: Kreg-Heg
(17.04.2007 в 16:03)
| | Пропробуй так:
$go = mysql_query ($sql, $dbcnx) or die(mysql_error());
if($go)
{
$send = mail("$email", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru");
}
|
Может у тебя запрос не выполняется, поэтому и письмо не отправляется. | |
|
|
|
|
|
|
|
для: Kreg-Heg
(17.04.2007 в 16:03)
| | Переменная $go откуда берётся в системе? | |
|
|
|
|
|
|
|
для: Kreg-Heg
(17.04.2007 в 14:43)
| | > Хе))) Я понимаю что както так, а можно Ваш рабочий код полностью увидеть? Всмысле как > само подтверждение сделать?
Мой код привязан к моей БД, поэтому вряд ли он подойдет вам.
Покажите ваши таблицы юзеров и кодов (если есть), я скажу как бы я на вашем месте сделал, с учетом ваших таблиц. | |
|
|
|
|
|
|
|
для: tAleks
(18.04.2007 в 09:57)
| | Как вот этой строчкой может отправляться письмо, если в ней не вводится ни емэйл отправителя, ни пороль почты с которой отправляется письмо?
$send = mail("$email", "Вы зарегистрированы", "Поздравляю, вы зарегистрировались на сайте site.ru"); | |
|
|
|
|
|
|
|
для: Kreg-Heg
(18.04.2007 в 15:28)
| | Считается, что эти параметры прописаны в конфиге php.ini (при работе через SMTP) или в конфиге самого sendmail'а (при работе через sendmail).
Хотя, конечно, набор заголовков (4-й параметр) неплохо было бы и сформировать. | |
|
|
|
|
|
|
|
для: Trianon
(18.04.2007 в 15:35)
| | Такс, а если это не прописано в конфиге php.ini и если ктото не знает как это прописать, то как тогда выслать с указанием этого всего непосредственно в данном скрипте? | |
|
|
|
|
|
|
|
для: 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 -> to, htmlspecialchars( stripslashes(trim($this -> subject))),
htmlspecialchars(stripslashes(trim($this -> msg)))))
{
return true;
}else{
return false;
}
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Gust
(18.04.2007 в 17:38)
| | > if (mail($this -> to, htmlspecialchars( stripslashes(trim($this -> subject))),
> htmlspecialchars(stripslashes(trim($this -> msg)))))
Вот это как - серьезно? | |
|
|
|
|
|
|
|
для: Trianon
(18.04.2007 в 18:03)
| | А подробней о генирации ссылки для подтверждения можно? | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(18.04.2007 в 19:12)
| | Обычно здесь используется функция необратимого шифрования md5 | |
|
|
|
|
|
|
|
для: Trianon
(18.04.2007 в 18:03)
| | А подробней о генирации ссылки для подтверждения можно? | |
|
|
|
|
|
|
|
для: 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;
//дальше отправляете письмо и все такое :))
?>
|
Примерно так. Вместо логина можно использовать е-майл, любую другую информацию, а еще лучше их совокупность. | |
|
|
|
|
|
|
|
для: ddhvvn
(18.04.2007 в 19:30)
| | странный подход.
Логин - сущность открытая. С какой целью генерировать его хеш?
Если редиске захочется обойти проверку, он просто посчитает хеш самостоятельно, сформирует адрес и уйдет по ссылке. Тут rand() обычно применяют. Его есть смысл загонять в таблицу. И его всяко не засечешь со стороны клиента. | |
|
|
|
|
|
|
|
для: Trianon
(18.04.2007 в 19:34)
| | Я же сказал: просто пример. Чтобы он знал, куда что подставлять.
А так, конечно, открытые данные (логин, е-майл, номер телефона) лучше не использовать. | |
|
|
|
|
|
|
|
для: ddhvvn
(18.04.2007 в 19:36)
| | >Примерно так. Вместо логина можно использовать е-майл, любую другую информацию, а еще лучше их совокупность.
>Я же сказал: просто пример.
А я его опроверг. Вместо логина здесь нельзя использовать открытые данные, а скрытых (частных) данных нету, поскольку эккаунт окончательно не зарегистрирован. Вывод: здесь надо генерировать псевдослучайный сеансовый ключ.
Поймите, дело не в том, md5, применялся для формирования окончательной строки, base64 или простое копирование в лоб. Дело в том, откуда можно эту самую строку взять. И это - принципиально. | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(18.04.2007 в 19:16)
| | А неужели нельзя без всяких проверок на существование почты и т.д., просто тупо одной строкой, какнибудь так
$send = mail("мэйл отправителя", "пороль отправителя" , "мэйл получателя", "тема", "само сообщение");
Или такого еще не придумали? =)
(я говорю про простое письмо без подтверждения) | |
|
|
|
|
|
|
|
для: Kreg-Heg
(18.04.2007 в 19:31)
| | Тупо одной строкой (или даже несколькими строками) Вы получите тупой результат.
Необходимость думать при разработке скриптов никто не отменял. | |
|
|
|
|
|
|
|
для: Trianon
(18.04.2007 в 19:36)
| | Ладно, тогда скажите, как получить этот самый тупой результат, просто отправить уведомление на почту без проверок и подтверждений. За два дня так никто и не написал этого! | |
|
|
|
|
|
|
|
для: Kreg-Heg
(18.04.2007 в 19:39)
| | Здрасти, приехали.
Вам написали сразу тупой пример одной строкой.
Ну да , он давал тупой результат (если на серверной стороне не настроен sendmail и/или smtp-сервер отправки. И кстати, давал другой тупой результат, если настроен.)
Но Вы же не удовлетворились?
Значит такой скрипт Вам не нужен?
А нужен, по всему видать, такой, который дает гарантированный эффект, да еще и независимо от серверных настроек. Сорри, такой , он во-первых не тупой, во-вторых ой какой непростой, а в-третьих, его на мой взгляд, еще не придумали.
Вот поэтому и не отвечают. Готовым скриптом.
У Вас тоже не получается написать? И у меня тоже.
Пытайтесь. Спрашивайте, что непонятно, и почему выходит не то, что ожидается.
Только чуть конкретнее, и без требований продукта под ключ.
Чем можем - поможем. | |
|
|
|
|
|
|
|
для: Trianon
(18.04.2007 в 19:53)
| | Таким агрессивным настроем Вы мне точно не поможете. Если я не очень конкретно ставлю вопрос или если он глупый по своей сути, то это только потому что я многого не знаю, я ещё только учусь и поэтому хочется увидеть четкий ответ, чтобы он был понятен новичку. | |
|
|
|
|
|
|
|
для: Kreg-Heg
(18.04.2007 в 20:54)
| | Вы просто взяли тему для новичка довольно сложную.
Здесь и работа с БД, и обработка входных данных, и регистрация эккаунта, и запрос подтверждения, и отправка писем, и к тому же с защищенного smtp-сервера(судя по Вашей реплике о пароле к исходящей почте). И пример всего этого Вы хотите видеть в одном четком понятном Вам ответе.
Там будет столько кода, что Вы его за раз не проглотите. И я не проглочу.
Если Вы попытаетесь разделить задачу на логические куски - окажется, что отправка e-mail - совершенно отдельная тема, в которой вопросов вагон и маленькая тележка.
Формирование подтверждения регистрации - другая отдельная тема, со своими тонкостями.
Остальное вышеперечисленное ябы не указал - не оставь Вы большую часть своего примера кодом соединения с БД.
Остановитесь на чем-нибудь одном. Напишите пример кода. Попробуйте его в действии. И задавайте вопросы по нему.
Вылизав одну часть , принимайтесь за другую. В конце концов все части соберете вместе. | |
|
|
|
|
|
|
|
для: Trianon
(18.04.2007 в 21:42)
| | Всё. Я всё сделал. На другом форуме помогли. Спасибо всем кто реально пытался мне помочь! | |
|
|
|
|
|
|
|
для: 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." ".$sitename.". "._UARELOGENID." ".$username."<br> "._INHISMAILSENDKEYAPASS."<br>"._UKEY." ".$keyreg." "._LASTINFO." "._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);
}
?>
|
Есть такое вариант формирования письма на емайл | |
|
|
|