Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите допилить php скрипт

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Получение мыла на php через IMAP и добавление его в БД
Korsand
Отправлено: 15 Апреля, 2013 - 05:48:40
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Февр. 2013  
Откуда: UA Donbass


Помог: 0 раз(а)




Привет. Задача такая: каждые 10 сек. нужно проверять последние поступившие емайлы через IMAP (POP3), если есть новые записюльки - вбивать их содержание в БД, а затем удалять эти прочитанные (загруженные) письма из ящика.
Имеется у меня вот такой код. Он вроде как работает, но очень-очень коряво. И надо его конечно, допилять, правда без помощи со стороны я не справлюсь…
PHP:
скопировать код в буфер обмена
  1. <?
  2. mysql_connect('localhost', 'proba', '000') or die('Connect to mysql server failed');
  3. mysql_select_db('proba') or die('DB selection failed');
  4.  
  5. $host="{pop.i.ua:995/pop/ssl}";
  6. $login = 'user@i.ua';
  7. $password = 'trololo';
  8.  
  9. $msg=new mread($host, $login, $password);
  10. var_dump($msg->mail);
  11.  
  12. class mread {
  13.     public function __get($name){
  14.         if ($name=='mail') return $this->unread;
  15.         else return null;
  16.     }
  17.     public function mread($host, $login, $pwd) {
  18.         $messages=array();
  19.         $folder="INBOX";
  20.         $this->mbox = @imap_open ("{$host}{$folder}", $login,$pwd) or die(imap_last_error());
  21.         $arr=imap_search  ($this->mbox, 'UNSEEN');
  22.         if ($arr !== false) {
  23.             foreach ($arr as $i){
  24.                 $this->getmsg($i);
  25.                 $messages = $this->htmlmsg;
  26.                                
  27.             //  mysql_query("SET names UTF8");
  28.                 mysql_query('INSERT INTO `emails` (`messages`, `when`) VALUES ("'.$messages.'", UNIX_TIMESTAMP())');
  29.         }
  30.             $this->unread=$messages;
  31.             unset($messages);
  32.         }
  33.         imap_close($this->mbox);
  34.     }
  35.     private function getmsg($mid) {
  36.     //  $this->htmlmsg = $this->plainmsg = $this->charset = ''; // Если нам нужно отобразить только одно последнее сообщение, а не все
  37.         $s = imap_fetchstructure($this->mbox,$mid);
  38.         if (!$s->parts) $this->getpart($mid,$s,0);
  39.         else {
  40.             foreach ($s->parts as $partno0=>$p)
  41.                 $this->getpart($mid,$p,$partno0+1);
  42.         }
  43.     }
  44.  
  45.     private function getpart($mid,$p,$partno) {
  46.         $data = ($partno)? imap_fetchbody($this->mbox,$mid,$partno): imap_body($this->mbox,$mid);
  47.         if ($p->encoding==4)
  48.             $data = quoted_printable_decode($data);
  49.         if ($p->dparameters)
  50.         foreach ($p->dparameters as $x)
  51.             $params[ strtolower( $x->attribute ) ] = $x->value;
  52.         elseif ($p->type==0 && $data) {
  53.             if (strtolower($p->subtype)=='plain')
  54.                 $this->plainmsg .= trim($data);
  55.             else
  56.                 $this->htmlmsg .= $data;
  57.                 $this->charset = $params['charset'];
  58.         }
  59.         elseif ($p->type==2 && $data) {
  60.             $this->plainmsg .= trim($data);
  61.         }
  62.     }
  63. }
  64. ?>
  65.  

На данный момент этот php кодик выводит мне на страницу последние полученные-непрочитанные писма в таком формате:
CODE (html):
скопировать код в буфер обмена
  1. string(523) "<html>
  2. <head>
  3. <style><!--
  4. .hmmessage P
  5. {
  6. margin:0px;
  7. padding:0px
  8. }
  9. body.hmmessage
  10. {
  11. font-size: 12pt;
  12. font-family:Calibri
  13. }
  14. --></style></head>
  15. <body class='hmmessage'><div dir='ltr'>НвЮ бЮФХаЦРЭШХ ЯХаТЮУЮ ЯШбмЬР<br>                                          </div></body>
  16. </html><html>
  17. <head>
  18. <style><!--
  19. .hmmessage P
  20. {
  21. margin:0px;
  22. padding:0px
  23. }
  24. body.hmmessage
  25. {
  26. font-size: 12pt;
  27. font-family:Calibri
  28. }
  29. --></style></head>
  30. <body class='hmmessage'><div dir='ltr'>БЮФХаЦРЭШХ ТвЮаЮЩ ЧРЯШбоЫмЪШ<br>                                           </div></body>
  31. </html>"
  32.  
  33.  

А надо в таком:
Это содержание первого письма
Содержание второй записюльки


Т.е., без string(523) и двойных кавычек, в нормальной кодировке и без html трибухи. То что он не выводит остальные пункты письма (от кого, тему) – это так надо, мне эти пункты и не нужны, нужно только содержание письма. Пытаюсь добавить сообщения в бузу, фигня получается. Эти два сообщения добавляются, вот только они оба одинаковые добавляются, а должны быть разные. Короче, в мою БД, в одну и во вторую строку добавляется это:
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <style><!--
  4. .hmmessage P
  5. {
  6. margin:0px;
  7. padding:0px
  8. }
  9. body.hmmessage
  10. {
  11. font-size: 12pt;
  12. font-family:Calibri
  13. }
  14. --></style></head>
  15. <body class='hmmessage'><div dir='ltr'>НвЮ бЮФХаЦРЭШХ ЯХаТЮУЮ ЯШбмЬР<br>                                          </div></body>
  16.  

Если сказать по правде, то этот код для меня сплошная загадка. От куда он стили берёт? Так же, я не знаю как удалить прочитанные (загруженные) письма из ящика и настроить автозагрузку в интервал 10сек.

Помогите мне кто-нибудь, пожалуйста. [

ПС. Я не знаю, может кто подкинет более адекватный код (скрипт), который нормально работает без пиляния? Буду очень благодарен!
 
 Top
Medallion
Отправлено: 15 Апреля, 2013 - 07:31:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


Помог: 7 раз(а)




Я как раз осваиваю imap протокол, и хочу организовать что-то подобное.
 
 Top
Korsand
Отправлено: 15 Апреля, 2013 - 16:18:25
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Февр. 2013  
Откуда: UA Donbass


Помог: 0 раз(а)




Ооо, так нас с тобой по пути. Давай дружить?! Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB