Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > www.mail.ru + imap_open


Автор: Serge2k 15.7.2005, 23:41
Сразу хочу извиниться за то, что задал этот вопрос, т.к. тема уже обсуждалась неоднократно... Так вот.... Проблема в следующем... Написал класс для проверки наличия новой почты на pop3 серваке... И был крайне удивлен, когда imap_open не может открыть поток... Я тестил все на своем почтовом ящике c www.mail.ru... Пытался найти еррор часа два, а потом попробовал вбить параметры своего почтового ящика с работы (сайт фирмы хостится на infobox).... Моментально все заработало... Не могу понять, в чем проблема... Пусть есть ящик: user@bk.ru
На mail.ru написано следующее:
Цитата

Сервер входящей почты (POP3-сервер): POP.<домен>, где <домен> - домен Вашего почтового ящика (для почтового ящика mailname@mail.ru - pop.mail.ru, listname@list.ru - pop.list.ru, bkname@bk.ru - pop.bk.ru, inboxname@inbox.ru - pop.inbox.ru).

Имя пользователя на POP-сервере: имя почтового ящика без значка "@" и названия домена (для почтового ящика mailname@mail.ru - mailname, listname@list.ru - listname, bkname@bk.ru - bkname, inboxname@inbox.ru - inboxname).

Пароль: Ваш пароль к почтовому ящику mailname@mail.ru, listname@list.ru, bkname@bk.ru, или inboxname@inbox.ru.

Порт: POP3 - 110

Соответственно для user@bk.ru делаем

Код
 $stream = imap_open("{pop.bk.ru/pop3:110}INBOX","user","pass");


И вот здесь то у меня поток и не открывается.... У кого нить есть какие-нить соображения? Может у mail.ru какое нить шифрованное соединение надо использовать... Но я вроде по telnet'у пробовал коннектиться, все работает нормально... Вощем, подскажите плз...[code=php]

Автор: Mal Hack 15.7.2005, 23:52
POP3 сервер это не IMAP. Mail.Ru не предоставляет IMAP сервера для внешнего входа, как в принципе и другие бесплатные почтовые серверы.

Автор: Serge2k 16.7.2005, 00:02
ваще то не понял, про что ты ваще....
Цитата
POP3 сервер это не IMAP

Ясное дело... Но ф-ции применяются одни и те же...

Автор: Mal Hack 16.7.2005, 00:20
Так, туплю малость...
В чем конкретно выражается: "И вот здесь то у меня поток и не открывается....".
Ошибка или что?
В начало скрипта:
Код
error_reporting(E_ALL); 

И после попытки подключения попробуй выведи:
Код
print_r( imap_errors() );
# или
print_r( imap_alerts() );

Еще, попробуй 4 параметр указаьб у imap_open

Автор: Black 16.7.2005, 09:28
Цитата(Mal @ 15.7.2005, 23:52)
POP3 сервер это не IMAP. Mail.Ru не предоставляет IMAP сервера для внешнего входа, как в принципе и другие бесплатные почтовые серверы.


pochta.ru предоставляет и тоже бесплатна smile

Автор: Mal Hack 16.7.2005, 13:35
Эх... Давно я халявой не пользовался smile
Но mail.ru вроде не предоставляе точно

Автор: Serge2k 16.7.2005, 13:47
Очень все странно... Вчера не работало, а сеня возьми и заработай... Может у mail.ru глюки какие нить были... Но тут то я столкнулся с другой проблемой... Все сообщения на почтовом ящике имеют в заголовке Recent флаг равный 'N'. Получается что все они свежие и не прочитанные... Возникает вопрос, а когда вообще этот флаг меняется.... Я то думал что он изменяется при прочтении письма... Но вот например на моем почтовом ящике 121 письмо... мой скрипт выдает, что все они новые и не прочтенные, но веб интерфейс mail.ru как то определяет, где там новые, а где прочтенные... Никто не знает с чем может быть это связано... Может mail.ru просто в базу записывает какое письмо прочитали, а какое нет?
Кстати Mal Hack.... Цитата с mail.ru
Цитата
Почта@Mail.ru теперь поддерживает работу по протоколу IMAP!

Так вот такие пироги smile

Автор: Mal Hack 16.7.2005, 13:55
Цитата(Serge2k @ 16.7.2005, 14:47)
Так вот такие пироги

Звиняй, совсем отстал от жизни.
http://www.mail.ru/pages/help/337.html а у тебя POPовский север был прописан.

Цитата(Serge2k @ 16.7.2005, 14:47)
Может mail.ru просто в базу записывает какое письмо прочитали, а какое нет?

Думаю что вряд ли. В качестве проверки, попробуй через Аутлук зайти на ИМАП сервер и удалить (логически) там одно письмо.
Добавлено @ 13:56
Еще покажи код, как ты письмо смотришь.
А вообще, было бы не плоо зарегистрироваться на форуме smile

Автор: Serge2k 16.7.2005, 14:15
Зарегился... smile
Код

        $stream = imap_open("\{$host:110}INBOX",$login,$password,P_READONLY);
        if($stream){
            $msgs = imap_sort($stream,SORTDATE,false);
            if(is_array($msgs)){
                $not_read_letters = 0;
                foreach($msgs as $msg_no){
                    $total_letters++;
                    $msg = imap_header($this->stream,$msg_no);
                    if(($msg->Recent == 'N')||($msg->Unseen == 'U'))
                        $not_read_letters++;
                }
                echo "Новых писем на ящике $email : $not_read_letters";
                imap_close($stream);
            }
            else error(2);
        }
        else error(1);


Мог где нить опечататься, т.к. для того чтоб не выкладывать весь класс, убирал куски ООП....
Добавлено @ 14:17
Млин... Чет я туплю... вот, пример, на котором я все тестирую....
Код

<?php
    $stream = imap_open("{$host/pop3:110}INBOX","$login","$password");
    if($stream){
        echo "WELL DONE. Connected to server<br>";
        $msgs = imap_sort($stream,SORTDATE,false);
        if(is_array($msgs)){
            $total_letters = 0;
            $not_read_letters = 0;
            foreach($msgs as $msg_no){
                $total_letters++;
                $msg = imap_header($stream,$msg_no);
                                 echo "<hr>Message # $msg_no<br>";
                echo "Recent: $msg->Recent<br>";
                echo "Unseen: $msg->Unseen<br>";
                echo "From: $msg->reply_toadress<br>";
            }
            echo "Total letters : $total_letters<br>";
            echo "Not read letters : $not_read_letters<br><br>";

        }
        imap_close($stream);
    }
    else echo "Not connected";
?>

Автор: Mal Hack 16.7.2005, 14:20
Хм. Вроде по коду все правильно.
Странно, однако...
Добавлено @ 14:21
Попробуй на всякий для проверки одному письму поставить флаг Seen, через imap_setflag_full.
Что потом тебе скажет твой скрипт?

Автор: Serge2k 16.7.2005, 14:31
А у меня кстати ваще не выводится параметры
$msg->Unseen
и
$msg->reply_toadress

Выводится тока

$msg->Recent

Так что флаги я изменил, а вот теперь посмотреть, изменилось ли что нить в работе моего скрипта не могу.... smile

Автор: Mal Hack 16.7.2005, 14:43
Код

print_r(imap_headers($stream));

Автор: Serge2k 16.7.2005, 14:51
Примеры того, что получилось....
Для непрочитанного письма....
[121] => N 122)16-Jul-2005 =?koi8-r?Q?=F3=C5=D2 (764 chars) )
Для прочитанного
[120] => N 121)15-Jul-2005 Club Mnogo.ru =?koi8-r?B?7s/X2cUg0NLFxN (7826 chars)

Автор: Mal Hack 16.7.2005, 15:52
Значит флаг N все-таки на IMAP стоит.
Видать это специфика mail.ru

Автор: Serge2k 16.7.2005, 16:38
Ваще то странно.... Щас попробовал другую свою почту потестить на этом скрипте... То же самое... Получается что все сообщения непрочитанные... Непонятно... Может я проверяю как то не так....На скока я понимаю
$msg->Recent == 'N' || $msg->Unseen == 'U'
достаточно для того, чтоб сказать что сообщение непрочитанное... Или я не прав?

Автор: Serge2k 18.7.2005, 17:09
Попереписывался с mail.ru... Во что они говорят... smile
Цитата

Здравствуйте.

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

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

> POP3

>> Здравствуйте.
>>
>> Уточните, пожалуйста, по какому протоколу Ваш скрипт ходит?
>>
>> С уважением, Анастасия.
>> Служба поддержки пользователей
>> почтовой системы Mail.Ru

>> > Многоуважаемые админы mail.ru...Пишу на пхп некий скрипт, который определяет наличие
>> > на ваших ящиках новой почты... Ну так вот... Все нормально
>> > работает... Только вот не могу нормально распознать непрочитанное
>> > письмо... Проверяю Recent флаг. Если он равен 'N', то письмо -
>> > новое... Но у Вас, все письма прочитанные через web интерфейс с
>> > флагом Recent = 'N'.. В итоге у меня в скрипте получается что все
>> > письма - новые... Может подскажите, как Ваш скрипт определяет,
>> > прочитано ли письмо... Буду очень признателен, если Вы мне
>> > ответите...
>> > Сергей.

Автор: Demitrio 20.10.2006, 09:00
Serge2K ты уверен что ты с админами переписывался? smile

Судя по дате твоего сообщения, наверняка проблема уже решилась? 
Хочу вот себе скриптик такой замутить, чтобы на разных серваках почту проверять, а то их очень много, и через гпрс дороговато каждые десять минут проверять кучу ящиков smile Может готовый какой скрипт посоветуете?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)