|
|
|
| С помощью функции mail можно переслать адресату содержимое переменных "тема" и само тело письма. Ответ на это, если он будет, придет на сервер по протоколу РОР и будет там ждать считывания, осуществлемого почтовой программой.
А можно ли средствами РНР считать с сервера содержимое полученного письма и занести их в такие же переменные для дальнейшего использования? | |
|
|
|
|
|
|
|
для: Владимир55
(03.10.2011 в 11:14)
| | Можно, если почтовый сервер поддерживает протокол IMAP. Именно через него реализуются Web-интерфейсы почтовых служб - вы фактически получаете возможность не только читать, но и складировать письма в отдельные папки, удалять их, отмечать как прочитанные или непрочитанные, разумеется читать сами сообщения, в общем оперировать почтовым ящиком на сервере так, как если бы он был у вас на локальной машине. | |
|
|
|
|
|
|
|
для: cheops
(03.10.2011 в 11:21)
| | А с протоколом РОР это невозможно?
Разве нельзя сделать скрипт, который запускается из адресной строки или таймером, обращающийся к серверу с логином и паролем (если надо – а может и не надо пароля, ведь скрипт и сам на сервере) и считывающий всю почту. При этом из каждого письма извлекается тема, адрес отправителя и тело письма, заносится это в три переменных и сохраняется, например, в трех текстовых файлах.
В общем, подобно оператору MAIL, но не для отправки письма через сервер, а для приёма почты с сервера? | |
|
|
|
|
|
|
|
для: Владимир55
(03.10.2011 в 11:55)
| | Вообще говоря возможно, хотя менее удобно... нужно так получить почту по протоколу POP, чтобы не удалять полученные сообщения с почтового сервера. Полученные письма следует разобрать и извлечь из них сообщения. | |
|
|
|
|
|
|
|
для: cheops
(03.10.2011 в 12:25)
| | Если полученные скриптом письма удалятся с сервера, то это даже хорошо - зачем они там, если я их уже получил.
А вот как конкретно получить почту?
Есть какой-то оператор для этой цели?
Или типовой код, шаблонный скрипт?
(Хочу обеспечить посетителям автоматическую отписку от рассылки). | |
|
|
|
|
|
|
|
|
для: Владимир55
(03.10.2011 в 12:29)
| | Хочу обеспечить посетителям автоматическую отписку от рассылки
а зачем усложнять себе жизнь?
обычно в письме предоставляется ссылка которая обращается непосредственно к скрипту на вашем сервере с гет параметрами содержащими идентификатор пользователя и одноразовый пароль для идентификации | |
|
|
|
|
|
|
|
для: Valick
(03.10.2011 в 12:57)
| | Отписаться, просто послав ответное письмо, вообще говоря удобнее, не требует другой программы (браузера) и исключает возможность того, что кто посторонний отпишет человека. Вообще разумно себе немного усложнить жизнь, чтобы упростить её сотням и тысячам других людей. | |
|
|
|
|
|
|
|
для: cheops
(03.10.2011 в 13:01)
| | ну возможность отписки другим человеком существует всегда
(кстати насколько сложно подменить адрес отправителя? :) )
а вот насчет первого, я просто забыл что есть люди которые пользуются почтовыми клиентами
но даже в этом случае вряд ли существуют люди у которых не установлен браузер
поэтому клик по ссылке ничем не труднее отправки почтового сообщения
зато отписка будет происходить непосредственно (с мгновенным уведомлением о успешности отписки), а не через "десятые руки"... | |
|
|
|
|
|
|
|
для: Valick
(03.10.2011 в 14:38)
| | У почтовой отписки есть и еще одно, косвенное, но важное для меня преимущество: если адрес подписчика перестал существовать, то можно это узнать по возврату письма почтовым сервером и исключить этот адрес из списка рассылки. | |
|
|
|
|
 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 на страницу и проверяю их одним кликом. плохие адреса можно тут же удалить. | |
|
|
|
|
|
|
|
для: elenaki
(03.10.2011 в 16:41)
| | Это замечательный сервис!
Вот только я не могу понять, как эти коды использовать. Что за переменные и вообще, как вставить эту функцию в скрипт?
(С функциями РНР я толком так и не сумел разобраться - не понимаю я их).
Не могли бы Вы рассказать поподробнее? | |
|
|
|
|
|
|
|
для: Владимир55
(03.10.2011 в 21:18)
| | Предположим, что список почтовых адресов находится в массиве $m_adr. Как конкретно с помощью этой функции рассортироваться его на действующие и недействующие? | |
|
|
|
|
|
|
|
для: Владимир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; $i< sizeof($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; $i< sizeof($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; $i< sizeof($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>
|
| |
|
|
|
|
|
|
|
для: elenaki
(04.10.2011 в 10:17)
| | Замечательно, спасибо!
Правильно ли я понимаю, что адреса Вы по одному вытаскиваете из базы и помещете в переменную $users_query ? | |
|
|
|
|
|
|
|
для: Владимир55
(04.10.2011 в 12:04)
| | $users_query - MACCuB | |
|
|
|
|
|
|
|
для: elenaki
(04.10.2011 в 12:43)
| | Не вполне уверен, но создается впечатление, что проверка не затрагивает логин. К примеру, что покажет скрипт относительно заведомо несуществующих адресов типа:
qwewqewqeqweqweqwe@mail.ru
rerererererererererererer@rambler.ru | |
|
|
|
|
|
|
|
для: Владимир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
отсекаются заведомо несуществующие домены. | |
|
|
|
|
|
|
|
для: elenaki
(04.10.2011 в 13:12)
| | Вот именно это я и предполагал - отсекаются только домены. Если же на домене есть хоть один почтовый адрес, то Ваш скрипт любой произвольный адрес на данном домене посчитает существующим.
Так?
(При случае попробуте своим скриптом адреса, которые я написал) | |
|
|
|
|
|
|
|
для: Владимир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) | |
|
|
|
|
|
|
|
для: elenaki
(04.10.2011 в 14:53)
| | Лет десять назад у меня была программа, работавшая с компьютера, которая рассылала письма по списку. И в ней была подобная фишка - проверка существоввания адреса. Вероятно, она работала по такому же принципу. И после её проверки все равно часть писем возвращалось обратно с отметкой о том, что адрес не существует.
Тем не менее, польза от такой проверки всё же есть, поскольку она происходит быстрее, чем отправка, и, к тому же, не загружает сеть. | |
|
|
|
|
|
|
|
для: Владимир55
(04.10.2011 в 16:21)
| | как раз нет. если почитаете обсуждение внизу, поймете, что легче 100 писем послать в никуда, чем дожидаться и распознавать ответы серверов.
а локальная прога всяко будет работать быстрее, чем скрипт на сервере ... у меня тоже такая была. | |
|
|
|