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

Форум PHP

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

 

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

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

тема: Как организовать почтовый диалог?
 
 автор: Владимир55   (03.10.2011 в 11:14)   письмо автору
 
 

С помощью функции mail можно переслать адресату содержимое переменных "тема" и само тело письма. Ответ на это, если он будет, придет на сервер по протоколу РОР и будет там ждать считывания, осуществлемого почтовой программой.

А можно ли средствами РНР считать с сервера содержимое полученного письма и занести их в такие же переменные для дальнейшего использования?

  Ответить  
 
 автор: cheops   (03.10.2011 в 11:21)   письмо автору
 
   для: Владимир55   (03.10.2011 в 11:14)
 

Можно, если почтовый сервер поддерживает протокол IMAP. Именно через него реализуются Web-интерфейсы почтовых служб - вы фактически получаете возможность не только читать, но и складировать письма в отдельные папки, удалять их, отмечать как прочитанные или непрочитанные, разумеется читать сами сообщения, в общем оперировать почтовым ящиком на сервере так, как если бы он был у вас на локальной машине.

  Ответить  
 
 автор: Владимир55   (03.10.2011 в 11:55)   письмо автору
 
   для: cheops   (03.10.2011 в 11:21)
 

А с протоколом РОР это невозможно?

Разве нельзя сделать скрипт, который запускается из адресной строки или таймером, обращающийся к серверу с логином и паролем (если надо – а может и не надо пароля, ведь скрипт и сам на сервере) и считывающий всю почту. При этом из каждого письма извлекается тема, адрес отправителя и тело письма, заносится это в три переменных и сохраняется, например, в трех текстовых файлах.

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

  Ответить  
 
 автор: cheops   (03.10.2011 в 12:25)   письмо автору
 
   для: Владимир55   (03.10.2011 в 11:55)
 

Вообще говоря возможно, хотя менее удобно... нужно так получить почту по протоколу POP, чтобы не удалять полученные сообщения с почтового сервера. Полученные письма следует разобрать и извлечь из них сообщения.

  Ответить  
 
 автор: Владимир55   (03.10.2011 в 12:29)   письмо автору
 
   для: cheops   (03.10.2011 в 12:25)
 

Если полученные скриптом письма удалятся с сервера, то это даже хорошо - зачем они там, если я их уже получил.

А вот как конкретно получить почту?
Есть какой-то оператор для этой цели?
Или типовой код, шаблонный скрипт?

(Хочу обеспечить посетителям автоматическую отписку от рассылки).

  Ответить  
 
 автор: cheops   (03.10.2011 в 12:52)   письмо автору
 
   для: Владимир55   (03.10.2011 в 12:29)
 

Возможно вам будет интересна тема по ссылке http://softtime.ru/forum/read.php?id_forum=1&id_theme=26011.

  Ответить  
 
 автор: Valick   (03.10.2011 в 12:57)   письмо автору
 
   для: Владимир55   (03.10.2011 в 12:29)
 

Хочу обеспечить посетителям автоматическую отписку от рассылки
а зачем усложнять себе жизнь?
обычно в письме предоставляется ссылка которая обращается непосредственно к скрипту на вашем сервере с гет параметрами содержащими идентификатор пользователя и одноразовый пароль для идентификации

  Ответить  
 
 автор: cheops   (03.10.2011 в 13:01)   письмо автору
 
   для: Valick   (03.10.2011 в 12:57)
 

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

  Ответить  
 
 автор: Valick   (03.10.2011 в 14:38)   письмо автору
 
   для: cheops   (03.10.2011 в 13:01)
 

ну возможность отписки другим человеком существует всегда
(кстати насколько сложно подменить адрес отправителя? :) )
а вот насчет первого, я просто забыл что есть люди которые пользуются почтовыми клиентами
но даже в этом случае вряд ли существуют люди у которых не установлен браузер
поэтому клик по ссылке ничем не труднее отправки почтового сообщения
зато отписка будет происходить непосредственно (с мгновенным уведомлением о успешности отписки), а не через "десятые руки"...

  Ответить  
 
 автор: Владимир55   (03.10.2011 в 16:20)   письмо автору
 
   для: Valick   (03.10.2011 в 14:38)
 

У почтовой отписки есть и еще одно, косвенное, но важное для меня преимущество: если адрес подписчика перестал существовать, то можно это узнать по возврату письма почтовым сервером и исключить этот адрес из списка рассылки.

  Ответить  
 
 автор: elenaki   (03.10.2011 в 16:41)   письмо автору
16 Кб
 
   для: Владимир55   (03.10.2011 в 16:20)
 

а проверить существование адреса и не посылать на него слабо? три строчки кода...


// proverka MX-zapisi
function detect_email($strmail="")
{
if($strmail=="") return 0;
$email_arr = explode("@", $strmail); 
$host = $email_arr[1];
$mxhostsarr="";
if(!getmxrr($host, $mxhostsarr))  return 0;
else  return 1;
}


можно проверять прямо при посылке, но я побоялась, что при больших списках адресов эта функция может подвесить скрипт, и вынесла ее в отдельную тему админки. вызываю по 20 на страницу и проверяю их одним кликом. плохие адреса можно тут же удалить.

  Ответить  
 
 автор: Владимир55   (03.10.2011 в 21:18)   письмо автору
 
   для: elenaki   (03.10.2011 в 16:41)
 

Это замечательный сервис!

Вот только я не могу понять, как эти коды использовать. Что за переменные и вообще, как вставить эту функцию в скрипт?

(С функциями РНР я толком так и не сумел разобраться - не понимаю я их).

Не могли бы Вы рассказать поподробнее?

  Ответить  
 
 автор: Владимир55   (04.10.2011 в 09:52)   письмо автору
 
   для: Владимир55   (03.10.2011 в 21:18)
 

Предположим, что список почтовых адресов находится в массиве $m_adr. Как конкретно с помощью этой функции рассортироваться его на действующие и недействующие?

  Ответить  
 
 автор: elenaki   (04.10.2011 в 10:17)   письмо автору
 
   для: Владимир55   (04.10.2011 в 09:52)
 

BOT BAM BECb check_emails.php (KPOME config'a)


<?
$on_page
=20;
// proverka MX-zapisi
function detect_email($strmail="")
{
if(
$strmail=="") return 0;
$email_arr explode("@"$strmail); 
$host $email_arr[1];
$mxhostsarr="";
if(!
getmxrr($host$mxhostsarr))  return 0;
else  return 
1;
}

///////////// vibor ploxix adresov
$i 0
/// nomer stranicu
if (!isset($_GET["page_tit1"]) or empty($_GET["page_tit1"]) or $_GET["page_tit1"]<=0$page_tit1=1;
else 
$page_tit1=$_GET["page_tit1"]; 
$page_query_tit1 intval($page_tit1) - 1
$lpos_tit1 $page_query_tit1 $on_page;
/// vubor iz bazu (list_name peredaem v URL)
$users_query mysql_query ("select email from nl_mail_lists  where list_name = '".$_GET["list_name"]."' order by email limit  $lpos_tit1,$on_page") or die (mysql_error());
while (
$users mysql_fetch_array($users_query)){
    
$email $users['email'];

    
//// vizov funkcii proverki
    
if (detect_email($email)) { 
                      
/////// esli OK
    
    
$good_mails[] = $email;
    }
    else { 
                     
///////// esli ne OK
    
    
$bad_mails[] = $email;
    }
}
/// esli xotim ydalit' ploxoy address
if (isset($action) && $action == "delete_bad") {
/////// deleting bad addresses
//nachalo perebora massiva
for ($i=0$isizeof($bad_mails); $i++) {
    
    
$sqlquery "delete from nl_mail_lists where email = "
    
$sqlquery .= '"' .trim($bad_mails[$i]). '"';  // email
    //echo $sqlquery; 
    
$result mysql_query($sqlquery) or die(mysql_error());
    
}
echo 
"<br>Ydaleno ".sizeof($bad_mails)." ploxix e-mail adresa!<br><br>";
}
/// dal'she postroenie tablicu
?>
page: <?=$page_tit1?>
<table width="100%">
<tr bgcolor="#D3D3D3">
<td class="theme">Good e-mails</td>
<td class=red_text><b>Bad e-mails:</b></td>
<td class="theme">Action</td>
</tr>
<tr>
<td valign="top" class="sm_text" bgcolor="EAEAEA">
<?///////// vivod xoroshix adresov

reset ($good_mails);
for (
$i=0$isizeof($good_mails); $i++) {
$j = ($i+($page_tit1-1)*$on_page) + 1;
echo 
$j.". ".$good_mails[$i]."<br>";
}
?>
</td>
<td valign="top" class="red_text" bgcolor="dcdcdc">
<?///////// vivod ploxix adresov

reset ($bad_mails);

for (
$i=0$isizeof($bad_mails); $i++) {
$j $i 1;
echo 
$j.". ".$bad_mails[$i]."<br>";
}
?>
</td>
<td valign="top" align="right"  bgcolor="D3D3D3">
<a href="check_emails.php?list_name=<?=$_GET["list_name"]?>&page_tit1=<?=$_GET["page_tit1"]+1?>&letter=<?=$_GET["letter"]?>"  class="theme"><b>CHECK e-mails <br>(from next page N<sup><u>o</u></sup> <?=$_GET["page_tit1"]+1?>)</b></a><br><br>
<a href="check_emails.php?action=delete_bad&list_name=<?=$_GET["list_name"]?>&page_tit1=<?=$_GET["page_tit1"]?>&letter=<?=$_GET["letter"]?>"  class="theme">DELETE bad e-mails (<?=sizeof($bad_mails)?>)</a><br><br>
</td>
</tr>
</table>

  Ответить  
 
 автор: Владимир55   (04.10.2011 в 12:04)   письмо автору
 
   для: elenaki   (04.10.2011 в 10:17)
 

Замечательно, спасибо!

Правильно ли я понимаю, что адреса Вы по одному вытаскиваете из базы и помещете в переменную $users_query ?

  Ответить  
 
 автор: elenaki   (04.10.2011 в 12:43)   письмо автору
 
   для: Владимир55   (04.10.2011 в 12:04)
 

$users_query - MACCuB

  Ответить  
 
 автор: Владимир55   (04.10.2011 в 12:47)   письмо автору
 
   для: elenaki   (04.10.2011 в 12:43)
 

Не вполне уверен, но создается впечатление, что проверка не затрагивает логин. К примеру, что покажет скрипт относительно заведомо несуществующих адресов типа:

qwewqewqeqweqweqwe@mail.ru
rerererererererererererer@rambler.ru

  Ответить  
 
 автор: elenaki   (04.10.2011 в 13:12)   письмо автору
 
   для: Владимир55   (04.10.2011 в 12:47)
 

логин тут ни при чем. проверяется MX-запись

http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8C_MX

отсекаются заведомо несуществующие домены.

  Ответить  
 
 автор: Владимир55   (04.10.2011 в 13:20)   письмо автору
 
   для: elenaki   (04.10.2011 в 13:12)
 

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

Так?

(При случае попробуте своим скриптом адреса, которые я написал)

  Ответить  
 
 автор: elenaki   (04.10.2011 в 14:53)   письмо автору
 
   для: Владимир55   (04.10.2011 в 13:20)
 

а меня не интересует, куда идет e-mail, если адрес не существует (в космос, наверно)

BOT:
http://twixed.ru/2010/11/14/112


Ready to receive mail -=- 
Check report: 
220 Mail.Ru ESMTP EHLO example.com 
250-mx3.mail.ru ready to serve 
250-SIZE 31457280 
250 8BITMIME MAIL FROM: info@e-membership-holmesplace.gr 
250 OK RCPT TO: qwewqewqeqweqweqwe@mail.ru 
250 OK QUIT 
221 mx3.mail.ru 
closing connection 


xuxuxu (OTBET - OK)

  Ответить  
 
 автор: Владимир55   (04.10.2011 в 16:21)   письмо автору
 
   для: elenaki   (04.10.2011 в 14:53)
 

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

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

  Ответить  
 
 автор: elenaki   (04.10.2011 в 16:24)   письмо автору
 
   для: Владимир55   (04.10.2011 в 16:21)
 

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

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

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

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