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

Форум PHP

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

 

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

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

тема: Вопрос по рассылке писем!
 
 автор: Silentium   (22.01.2009 в 20:19)   письмо автору
 
 

Добрый день!
Собственно вопрос состоит в том, как реализовать отписку от письма, которое приходит пользователю?
То есть, у меня есть рассылка которая приходит по Cron каждое утро пользователям, адреса которых хранятся у меня в бд....я указываю в рассылке, что то типа "Если Вы не хотите больше получать данную рассылку , перейдите по ссылке: <ссылка>" ..Вот. Как собственно определить email, который "заказал" отписку?
Наведите на мысль?!

  Ответить  
 
 автор: Zend72   (22.01.2009 в 23:42)   письмо автору
 
   для: Silentium   (22.01.2009 в 20:19)
 

Одним из параметров ссылки будет e-mail или какой либо ID отписывающегося от рассылки...

  Ответить  
 
 автор: Silentium   (23.01.2009 в 08:35)   письмо автору
 
   для: Zend72   (22.01.2009 в 23:42)
 

Как в ссылку подставить мейл отписчика?

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 10:09)   письмо автору
 
   для: Silentium   (23.01.2009 в 08:35)
 

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

  Ответить  
 
 автор: Trianon   (23.01.2009 в 10:24)   письмо автору
 
   для: Николай2357   (23.01.2009 в 10:09)
 

Это не так.
В ссылке отписки должно быть достаточно аутентифицирующей информации для выполнения отписки путем простого перехода на нее.

В противном случае человек, забывший логин/пароль к порталу, не сможет прекратить рассылку почты с портала.
Владелец почтового ящика должен иметь возможность отписаться от подписки независимо от того, является ли он владельцем логина на портале.

Само собой, это не значит, что только по данным ссылки должен вычисляться е-мэйл, логин (а уж тем паче - пароль).

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 10:40)   письмо автору
 
   для: Trianon   (23.01.2009 в 10:24)
 

Действительно, совсем не подумал... Спасибо, надо теперь исправлять, то что я успел наделать. Благо по рассылкам не много...

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 10:46)   письмо автору
 
   для: Silentium   (23.01.2009 в 08:35)
 

Тогда я Вам бы посоветовал обратить внимание на зту тему, можно сделать по такому же принципу.

  Ответить  
 
 автор: Silentium   (23.01.2009 в 11:19)   письмо автору
 
   для: Николай2357   (23.01.2009 в 10:46)
 

Спасибо я это читал до того как создать тему!
Но согласно вашим заумным рассуждениям, простите я несколько чайник, я должен при добавлении адреса рассылки в свою бд добавлять еще какойто idшник, а потом передавая письмо адресату, как то уже заложить этот ID в письме и в случае его отписки(т.е он жмет на ссылку в самом письме) приплюсовывать этот ID к ссылке...так?
Тогда встает вопрос что использовать в качестве ID? например md5($mail) может для этого подойти?
т.е
Хранится у меня в дб чтото типа
N|___mail____|__md5_________|
1 | test@test.ru | qgduyud23wgei7|

отсылаю по этому адресу рассылку и добавляю
"Если вы не хотите получать письма жми сюда: http://moysite.ru/mail.php?unsubscrybe=qgduyud23wgei7"
А дальше просто сравниваю то что пришло с тем что хранится в моей бд и тупо при совпадении удаляю...Так чтоли? или я не туда копаю?

P.S. Заранее прошу простить за ламерский язык, я только учусь!

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 12:00)   письмо автору
 
   для: Silentium   (23.01.2009 в 11:19)
 

Первое.
id - это ИДеинтификатор, то есть номер записи. Но не порядковый номер, а уникальный. Он присваивается один раз и на всегда. То есть даже если удалить эту запись из базы, то этот номер никакой больше записи присвоен не будет. Это как паспорт. Если человек умер, то паспорт с таким же номером другому не дадут, а то на него могут чужой кредит свешать. Почти каждая уважающая себя таблица в бд должна содержать поле id (можете назвать по другому) у которой включена опция auto_increment. Именно она отвечает за уникальность. На сколько я понял из Ваших рассуждений, у Вас этого нет. Поставьте auto_increment. полю № и вот его и используйте вместо id.
Второе.
Вам нужно еще одно поле, в котором должен храниться идентификатор пользователя. Не записи, а пользователя. Потому что пароль вытаскивать на всеобщее обозрение нельзя ни в коем случае, а логин всем известен, это не закрытая информация. Вычислим (или и так виден) и id записи. По этому необходим еще один параметр, уникальный (не повторяющийся) и известный только серверу и пользователю. Сделать его можно, сгенерировав случайную строку, прибавить к ней (не плюсом, конкатенацией) id записи для уникальности, и захэшировав результат. Этот ключ передать в письме пользователю и записать в учетную запись (при регистрации). Вот по этому ключу можно будет относительно безопасно идентифицировать пользователя и отключить ему рассылку.

  Ответить  
 
 автор: Silentium   (23.01.2009 в 13:25)   письмо автору
 
   для: Николай2357   (23.01.2009 в 12:00)
 

ну как раз № у меня имеет autoincrement, а как же быть с пользователями, которые не прошли регистрацию? их у меня большинство примерно 1 к 10..?

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 13:33)   письмо автору
 
   для: Silentium   (23.01.2009 в 13:25)
 

Ну а если не прошли регистрацию, то как Вы им письма шлете? В любом случае запись есть в базе. Сформируйте следующее письмо рассылки с этим условием и всё.

  Ответить  
 
 автор: Silentium   (23.01.2009 в 14:23)   письмо автору
 
   для: Николай2357   (23.01.2009 в 13:33)
 

Запись в базе есть!
Она у меня реализована как раз

<?
$mylo
=$_POST[email]; \\  -эл адрес
.......
 
mysql_query("INSERT INTO `base`.`subscrybe` (`email` ,`ip` ,`hash_mail`) VALUES (  '$mylo', '$R', '$H' );
?>

Вопрос , как при внесении из формы данных в таблицу создать уникальный идентификатор пользователя (hash_mail)?
Как я понял из Ваших рекомендаций, мне нужно взять md5(уникальный ID строки с адресом в таблице +rand(строка)) и записать этот результат в колонку напротив эл. адреса? Так?

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

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 15:22)   письмо автору
 
   для: Silentium   (23.01.2009 в 14:23)
 

Вам придется в таблицу добавить еще одно поле. И написать скрипт, который разом добавит в эти ячейки ключи. Обработать им таблицу, один раз. А так же дополнить такой функцией регистрацию. И продолжать радоваться жизни.

  Ответить  
 
 автор: serjinio   (24.01.2009 в 10:57)   письмо автору
 
   для: Silentium   (23.01.2009 в 14:23)
 

$id =  mysql_insert_id(); 

Но проблема не в этом..суть в том что в активационном key должно присутствовать хотя-бы один уникальный параметр из таблицы юзеров и ничего не передавать в не зашифрованном виде..
параметр этот может быть id таб юзеров,их емайл или имя(при этом в таб эти поля должны быть уникальными...) или все сразу(на сколько хватит воображения) пропущенные через функцию необратимого шифрования...мд5 ша1 и тп..

  Ответить  
 
 автор: Trianon   (24.01.2009 в 11:13)   письмо автору
 
   для: serjinio   (24.01.2009 в 10:57)
 

>.... и ничего не передавать в не зашифрованном виде..
Почему?

  Ответить  
 
 автор: serjinio   (24.01.2009 в 12:46)   письмо автору
 
   для: Trianon   (24.01.2009 в 11:13)
 

Был не прав...
ссылка должна выглядеть типа .php?key=user@mail.ru&login=serjinio&$pass=1234567 ;)

  Ответить  
 
 автор: Николай2357   (24.01.2009 в 12:56)   письмо автору
 
   для: serjinio   (24.01.2009 в 12:46)
 

Вообще то вопрос был "Почему?" а не как должна выглядеть ссылка.

  Ответить  
 
 автор: Trianon   (24.01.2009 в 13:56)   письмо автору
 
   для: serjinio   (24.01.2009 в 12:46)
 

Она может выглядеть и так.

  Ответить  
 
 автор: Silentium   (26.01.2009 в 13:38)   письмо автору
 
   для: Trianon   (24.01.2009 в 13:56)
 

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

  Ответить  
 
 автор: udpn   (26.01.2009 в 22:31)   письмо автору
 
   для: Silentium   (23.01.2009 в 14:23)
 

Кстати, я хотел бы вас предупредить, что ваши SQL запросы подвержены инъекциям. Просто посмотрите на то, что произойдет, если в поле $mylo напишут что-то с кавычками. И пост-метод этому не оправдание.

  Ответить  
 
 автор: Silentium   (27.01.2009 в 08:17)   письмо автору
 
   для: udpn   (26.01.2009 в 22:31)
 

ну я вообщето использую рег выражение для проверки

preg_match("|^[-0-9a-z_\.]+@[-0-9a-z\.]+\.[a-z]{2,6}$|i", $mylo)

  Ответить  
Rambler's Top100
вверх

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