|
|
|
| Подскажите, хочу попробовать организовать сервис почты... Все письма сыпятся в один ящик,
как мне их получить с помощью php и записать полученное в БД...
Дайте ссылок почитать, как это делается...
Ковыряла PHPMailer немного, как я понимаю он только отправляет. | |
|
|
|
|
|
|
|
|
для: heed
(03.09.2009 в 16:30)
| | Этого не достаточно ((
Есть у кого свои наработки? | |
|
|
|
|
|
|
|
для: Лена Смирнова
(03.09.2009 в 15:58)
| | Вам нужен IMAP - протокол и одноименное расширение PHP для манипулирования почтовым ящиком и его содержимым. | |
|
|
|
|
|
|
|
для: cheops
(04.09.2009 в 13:56)
| | А мне техподдержка сказала, что IMAP расширение ставить не собирается.
Что делать?
Есть другой вариант? | |
|
|
|
|
|
|
|
для: 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-WRITE] SELECT 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.
| где содержимое письма я так и не понял :) | |
|
|
|
|
|
|
|
для: heed
(07.09.2009 в 01:37)
| | Так упражняться не хочется.
Я думал, что есть в pear или ещё где-то готовые классы, которые
умеют без библиотеки посылать по IMAP-4 протоколу всё необходимое.
У вас, в приципе, уже неплохо получилось.
Только отлаживать, кажется, это долго придётся.
Меня бы устроили и самые урезанные классы с IMAP-4.
Только самые основные операции | |
|
|
|
|
|
|
|
для: Eugene77
(07.09.2009 в 07:39)
| | на pear.php.net вроде есть модули
http://pear.php.net/packages.php?catpid=14&catname=Mail&php=all
только ещё нужно узнавать какие из модулей уже есть на сервере, если там вообще есть pear в include_path, можно просто сделать свою дирректорию с модулями, но придётся разбираться с путями включения, даже возможно в коде самих модулей | |
|
|
|
|
 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();
}
|
| |
|
|
|
|
|
|
|
для: Саня
(07.09.2009 в 08:15)
| | Спасибо!
Замечательный класс!
Я и представить себе не мог, что всё так просто! | |
|
|
|