Перейти к содержимому



Email как БД - возможно ли такое?

#1 Вячеслав

Вячеслав
  • Пользователь
  • 357 сообщений
  • Репутация: 0
0

Отправлено 05 Май 2010 - 23:18

Всем привет!
Такой вопрос, возможно ли использовать Email как хранилище информации? Тоесть отправляя письмо на почту, затем из этой поты извлекать содержимое писем ну например по дате или как-то парсить само тело письма на наличие в нем "ориентиров-сортировки".

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

Спасибо.

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Возможно ли хранить в БД массив
  2. Нужна помощь. Есть ли такой модуль или компонент?
  3. Возможно ли - CMS Joomla на хосте, а БД на собственном сервере?
  4. Возможно ли мне сделать такое на html сайте?
  5. Выгодно ли для заработка создание сайта такой тематики

#2 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 06 Май 2010 - 06:53

Да можно. Только для чего это? В файлах-то проще хранить. они ближе.
  • 0

#3 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 06 Май 2010 - 10:49

Супер!
Да все дело в удобстве, не все юзеры просто в состоянии даже FTP пользоватся и сохранять файлы в нужной кодировке, они там могут все поламать.
А я хочу настроит такую штуку - раздать юзерам пароли и форматы письма с контентом, если формат соответствует, то запись добавляеться на модерацию, где я например добавляю к письму определенную пометку (в тексте письма) потом проверяю с пом PHP и если есть вывожу (типо прошла модерацию-значит выводить), а если не соответствует формату, то отправляеться письмо на почту юзера с образцом-формата письма....
Вот такая задумка)) поможите реализовать, уж очень интересно, просто сайт на выделенном серваке и доступ у меня только к FTP нет там никакого PMA а со всякими PuTyy мне неохота ковыряться. А движок сайта не позволит создать такой тип контента как мне нужно.
  • 0

#4 BaCo

BaCo
  • Пользователь
  • 103 сообщений
  • Репутация: 0

Отправлено 06 Май 2010 - 14:58

Зачем так загружать сервер? Ведь если 1000 пользователей обратится к вашей странице, вы представляете какую нагрузку вы на хостера положите? Ведь придется юзать сокеты... А там такая морока с ними будет.
  • 0

#5 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 06 Май 2010 - 20:03

Да врятли там даже сотня за сутки будет, мне просто интересно это пощупать, но не знаю как это делаеться, ссокетами пользовался, но вот чтоб именно из почтового ящика письма извлекать неа...


  • 0

#6 BaCo

BaCo
  • Пользователь
  • 103 сообщений
  • Репутация: 0

Отправлено 07 Май 2010 - 14:16

Юзай вот это:

первым делом мы должны подключиться к серверу

<?
$pop_conn = fsockopen("pop.bk.ru", 110,$errno, $errstr, 10); //открываем сокет
print fgets($pop_conn,1024); //читаем ответ
?>

Если все нормально, ответ будет: +OK
далее нам необходимо авторизироваться
<? 
fputs($pop_conn,"USER code@codeismy.name\r\n"); //посылаем юзера 
print fgets($pop_conn,1024); //читаем ответ 
?>
Ответ: +OK Password required for user code@codeismy.name
Вводим пароль с помощью команды PASS
<? 
fputs($pop_conn,"PASS password\r\n"); //посылаем пароль 
print fgets($pop_conn,1024); 
?>
Ответ: +OK code@codeismy.name maildrop has 2 messages (8192 octets)
В данном ответе говорится, что в ящике 2 письма общим размером 8192 байт.
Когда авторизация пройдена и можно получить информацию командой STAT, она покажет сколько писем в ящике и их общий размер
<? 
fputs($pop_conn,"STAT\r\n"); 
print fgets($pop_conn,1024); 
?>
получить весь список писем можно командой LIST
<? 
fputs($pop_conn,"LIST\r\n"); 
print fgets($pop_conn); 
?>
Покажет такой ответ:
+OK 2 messages (8192 octets)
1 6654
2 1372
так же если для команды LIST указать номер письма то можно получить информацию только об этом письме
дальше просто приведу список наиболее часто используемых команд
TOP - имеет 2 параметра номер письма и число строк из заголовка, на пример TOP 1 10 покажет заголочки и первые 10 строк письма
DELE - помечает для удаления письмо
RSET - отменяет пометку на удаление
RETR - прочесть письмо полностью
QUIT - завершение сессии (по окончанию сессии все помеченые на удаления письма удалятся)

ну а дальше приведу ряд полезных функций:
получение ответа от сервера
<?
function get_data($pop_conn)
{
$data="";
while (!feof($pop_conn)) {
$buffer = chop(fgets($pop_conn,1024));
$data .= "$buffer\r\n"; //склеиваем строки
if(trim($buffer) == ".") break;
}
return $data; //возвращяем результат
}
?>

При отправке почты, все не латинские символы в заголовках кодируется, например тема письма может выглядеть так =?windows-1251?B?7/Du4uXw=?= вот такие тексты и будет преобразовывать эта функция
<? 
function decode_mime_string($subject) {
$string = $subject;
if(($pos = strpos($string,"=?")) === false) return $string;
while(!($pos === false)) {
$newresult .= substr($string,0,$pos);
$string = substr($string,$pos+2,strlen($string));
$intpos = strpos($string,"?");
$charset = substr($string,0,$intpos);
$enctype = strtolower(substr($string,$intpos+1,1));
$string = substr($string,$intpos+3,strlen($string));
$endpos = strpos($string,"?=");
$mystring = substr($string,0,$endpos);
$string = substr($string,$endpos+2,strlen($string));
if($enctype == "q") $mystring = quoted_printable_decode(ereg_replace("_"," ",$mystring));
else if ($enctype == "b") $mystring = base64_decode($mystring);
$newresult .= $mystring;
$pos = strpos($string,"=?");
}
$result = $newresult.$string;
if(ereg("koi8", $subject)) $result = convert_cyr_string($result, "k", "w");
if(ereg("KOI8", $subject)) $result = convert_cyr_string($result, "k", "w");
return $result;
}
?>

перекодировщик тела письма. Само письмо может быть закодировано и данная функция приводит тело письма в нормальный вид. Так же и вложенные файлы будут перекодироваться этой функцией.
<?
function compile_bоdу($bоdу,$enctype,$ctype) {
$enctype = explode(" ",$enctype); $enctype = $enctype[0];
if(strtolower($enctype) == "base64")
$bоdу = base64_decode($bоdу);
elseif(strtolower($enctype) == "quoted-printable")
$bоdу = quoted_printable_decode($bоdу);
if(ereg("koi8", $ctype)) $bоdу = convert_cyr_string($bоdу, "k", "w");
return $bоdу;
}
?>

Функция для выдергивания метки boundary из заголовка Content-Type boundary это разделитель между разным содержимым в письме, например, чтобы отделить файл от текста письма
<?
function get_boundary($ctype){
if(preg_match('/boundary[ ]?=[ ]?(["]?.*)/i',$ctype,$regs)) {
$boundary = preg_replace('/^\"(.*)\"$/', "\\1", $regs[1]);
return trim("--$boundary");
}
}
?>


  • 0

#7 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 07 Май 2010 - 23:08

Ого ничего себе))) спасибо большое, надо разобрать все это дело...
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Май 2010 - 18:42

Вячеслав, не понял что ты хочешь? Решил устроить изврат, чтение почты посредством PHP?
Мне кажется задача лишняя, Опиши точнее задачу, что есть, что делает юзер, что делает админ, зачем читать письма на почте?
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru