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

Форум PHP

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

 

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

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

тема: Как забрать почту средствами PHP
 
 автор: Лена Смирнова   (03.09.2009 в 15:58)   письмо автору
 
 

Подскажите, хочу попробовать организовать сервис почты... Все письма сыпятся в один ящик,
как мне их получить с помощью php и записать полученное в БД...
Дайте ссылок почитать, как это делается...
Ковыряла PHPMailer немного, как я понимаю он только отправляет.

  Ответить  
 
 автор: heed   (03.09.2009 в 16:30)   письмо автору
 
   для: Лена Смирнова   (03.09.2009 в 15:58)
 

Здесь бывали такие темы, с примерами
http://softtime.ru/forum/read.php?id_forum=1&id_theme=32102

// тут что-то насчёт pop3-протокола http://www.rfc-editor.org/rfc/rfc1939.txt
, но по английски

  Ответить  
 
 автор: Лена Смирнова   (03.09.2009 в 20:57)   письмо автору
 
   для: heed   (03.09.2009 в 16:30)
 

Этого не достаточно ((
Есть у кого свои наработки?

  Ответить  
 
 автор: cheops   (04.09.2009 в 13:56)   письмо автору
 
   для: Лена Смирнова   (03.09.2009 в 15:58)
 

Вам нужен IMAP - протокол и одноименное расширение PHP для манипулирования почтовым ящиком и его содержимым.

  Ответить  
 
 автор: Eugene77   (06.09.2009 в 19:01)   письмо автору
 
   для: cheops   (04.09.2009 в 13:56)
 

А мне техподдержка сказала, что IMAP расширение ставить не собирается.
Что делать?
Есть другой вариант?

  Ответить  
 
 автор: heed   (07.09.2009 в 01:37)   письмо автору
 
   для: Eugene77   (06.09.2009 в 19:01)
 

другой вариант всмысмле не по протоколу pop3 ?
, нужно долго читать это http://www.rfc-editor.org/rfc/rfcRFC1730.txt на непонятном языке
, чтобы понять какие конкретно комманды нужно посылать по IMAP4-протоколу
, а лучше-бы найти уже готовое решение, незнаю насчёт того есть-ли в pear-модулях.

попробовал помучать один IMAP4-сервер (назову XXXX.ru)
, смог получить ответы только на несколько комманд

//<?
# сначала был открыт сокет с ip-адресом imap4.XXXX.ru , на 143м порту
#Connected.

OK XXXX.ru IMAP4 server
a001 LOGIN user
@XXXX.ru password # незащищённый логин
a001 OK login completed

a002 
LIST "" "*" # примерно так можно получить список каталогов
* LIST () "." "INBOX"
* LIST () "." "INBOX.Draft"
* LIST () "." "INBOX.Sent"
* LIST () "." "INBOX.Spam"
* LIST () "." "INBOX.Trash"
a002 OK LIST completed

A003 SELECT INBOX 
#выбор определённого каталога
FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft)] 
1 EXISTS
1 RECENT
OK [UIDVALIDITY 2000000002]
A003 OK [READ-WRITESELECT completed

A654 FETCH 1
:5 ALL # самая простейшая комманда чтения писем
1 FETCH (FLAGS () INTERNALDATE "07-Sep-2009 00:06:00 +0400" RFC822.SIZE 3105 ENVELOPE 
  
("Mon, 7 Sep 2009 00:06:22 +0400" "x" (("gmail" NIL "xxxxxxxx" "gmail.com"))
   ((
"gmail" NIL "xxxxxxxx" "gmail.com")) (("gmail" NIL "xxxxxxxxx" gmail.com")) 
  ((NIL NIL "
user" "XXXX.ru")) NIL NIL NIL "<здесь была куча [A-Z0-9знаков @comp>"))
A654 OK FETCH completed

# без LOGOUTа был закрыт сокет
# Disconnected.
где содержимое письма я так и не понял :)

  Ответить  
 
 автор: Eugene77   (07.09.2009 в 07:39)   письмо автору
 
   для: heed   (07.09.2009 в 01:37)
 

Так упражняться не хочется.
Я думал, что есть в pear или ещё где-то готовые классы, которые
умеют без библиотеки посылать по IMAP-4 протоколу всё необходимое.
У вас, в приципе, уже неплохо получилось.
Только отлаживать, кажется, это долго придётся.
Меня бы устроили и самые урезанные классы с IMAP-4.
Только самые основные операции

  Ответить  
 
 автор: heed   (07.09.2009 в 09:01)   письмо автору
 
   для: Eugene77   (07.09.2009 в 07:39)
 

на pear.php.net вроде есть модули
http://pear.php.net/packages.php?catpid=14&catname=Mail&php=all
только ещё нужно узнавать какие из модулей уже есть на сервере, если там вообще есть pear в include_path, можно просто сделать свою дирректорию с модулями, но придётся разбираться с путями включения, даже возможно в коде самих модулей

  Ответить  
 
 автор: Саня   (07.09.2009 в 08:15)   письмо автору
2.5 Кб
 
   для: Лена Смирнова   (03.09.2009 в 15:58)
 

Когда-то давно написал для себя класс, забирающий почту по pop3. Использовать так:
<?php

include('pop3.php');

// коннект к базе
mysql_connect('localhost''root''') or die('Connect to mysql server failed');
mysql_select_db('mbox') or die('DB selection failed');

try {

  
// читаем почту
  
$pop = new pop3('pop.mail.ru'110'xxx''******');

  
// получаем количество писем
  
list($num) = $pop->count();

  
// проходимся по всем письмам
  
for ( $i 1$i <= $num$i++ ) {

    list(
$hdr$body) = $pop->retr($i); // письмо номер $i

    // mail.ru кодирует всё в base64 и кодировку koi8-r
    // обработка тела сообщения
    
$body base64_decode($body);
    
$body iconv('KOI8-R''WINDOWS-1251'$body);

    
// поиск темы письма
    
if ( preg_match("!Subject: ([^\n]+)!"$hdr$m) ) {
      list(, 
$charset, , $subj) = explode('?'$m[1]);
      
$subj base64_decode($subj);
      
$subj iconv('KOI8-R''WINDOWS-1251'$subj);
    }

    
// вставляем в базу
    
$sql 'INSERT INTO `mail` (`subj`, `body`) VALUES ('"'.$subj.'""'.$body.'")';
    mysql_query($sql);
    $pop->dele($i); // и удаляем письмо
  }

} catch (Exception $e) {
  print $e->getMessage();
}

  Ответить  
 
 автор: Eugene77   (07.09.2009 в 17:00)   письмо автору
 
   для: Саня   (07.09.2009 в 08:15)
 

Спасибо!
Замечательный класс!
Я и представить себе не мог, что всё так просто!

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

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