WeBinstruments

Инструментарий для веб-мастеров

 

на сайте на всех сайтах для веб разработчиков везде
 
 Скрипты
  PHP скрипты   
  Flash скрипты   
  Javascript скрипты   

 Софт
  Инструменты SEO   
  Разработка сайтов   
  Серверное ПО   

 Документация
  MySQL   
  PHP   
  HTML   
  Протоколы и сервисы Internet   

 Статьи
  PHP   
  MySQL   
  Сервер   
  еще...   

 Услуги и сервисы
  Домены   
  Хостинги   
  Блоки для сайта   

 Новости


 Контакты
  icq: 158325531
  email:
  все контакты: здесь




Atom все поступления
Раздел Файлы
Раздел Услуги и сервисы
Раздел Новости
Раздел Статьи
комментарии



 Партнеры


Главная / Статьи / PHP / Чтение почты с помощью php через pop3


Чтение почты с помощью php через pop3

02.09.2007
сайт автора: http://webi.ru
публикация данной статьи разрешена только со ссылкой на сайт автора статьи

Как получать почту с помощью php, через pop3 используя сокеты.

Читать всю статью


Комментарии

RSS комментарии


20.10.2011 Jonson
Спасибо большое! А то ничего похожево не найдешь в инете!



15.11.2011 Dmitry
соединение без проблем, весь код здесь:
$pop_conn = fsockopen("pop.mail.ru", 110,$errno, $errstr, 10);
$code=fgets($pop_conn,1024);
fputs($pop_conn,"USER Toys_robotrn");
$code= fgets($pop_conn,1024);
fputs($pop_conn,"PASS Qwe123rn");
$code= fgets($pop_conn,1024);
fputs($pop_conn,"STATrn");
$count = fgets($pop_conn,1024);
$count = explode(' ',$count);
$count = $count[1];
print 'всего писем: '.$count.'<br>';
for ($j=1;$j<=$count;$j++) {
fputs($pop_conn,"RETR ".$j."rn");
$text= get_data($pop_conn);
$struct=fetch_structure($text);
$mass_header=decode_header($struct['header']);
$mass_header["subject"] = decode_mime_string($mass_header["subject"]);
$type = $ctype = $mass_header['content-type'];
$ctype = split(";",$ctype);
$types = split("/",$ctype[0]);
$maintype = trim(strtolower($types[0]));
$subtype = trim(strtolower($types[1]));

if($maintype=="multipart" and ereg($subtype,"signed,mixed,related"))
{
$boundary=get_boundary($mass_header['content-type']);
$part = split_parts($boundary,$struct['body']);
for($i=0;$i<count($part);$i++) {
$email = fetch_structure($part[$i]);
$header = $email["header"];
$body = $email["body"];
$headers = decode_header($header);
$ctype = $headers["content-type"];
$Actype = split(";",$headers["content-type"]);
$types = split("/",$Actype[0]);
$rctype = strtolower($Actype[0]);
$ctype = $headers["content-type"];
$ctype2 = explode(";",$ctype);
$ctype2 = $ctype2[0];

$Atype = split("/",$ctype);
$Acdisp = split(";",$ctype);
$fname = $Acdisp[1];
$filename='';
if(ereg("name=(.*)",$fname,$regs)) $filename = $regs[1];
$filename = trim(decode_mime_string($filename));
$filename=str_replace('"','',$filename);
if(!empty($headers['content-transfer-encoding'])) {
$body = compile_body($email["body"],'base64',$ctype2);
$ft=fopen('1.jpg',"wb");
fwrite($ft,$body);
fclose($ft);
}
}
}
}

fputs($pop_conn,"QUITrn");




в ящике одно письмо, в атаченый файл, скрипт название файла ловит, но с сохранением траблы - если файл в письме весит 50Кб, то сохраняет почему то как 80Кб.
файлик - обычный jpeg
подскажите где торможу, а то уже 3-е суток нормально не сплю
заранее спасибо



20.11.2011 general
Действительно полезная статья, автору огромное спасибо



28.11.2011 виктор
Dmitry, вы наверное сохраняете в base64, поэтому размер увеличенный.



22.12.2011 Evgeniy
Клевая статья! Большое спасибо! Подскажите пожалуйста как отметить письмо как прочитанное?



03.02.2012 Александр
Автору большое, спасибо, хотя и прибавил мне 2 дня разбирательств с кодом. Но это уже насяльника, конечно виновата, верстальщику давать пхп-эшные задания:-)

Единственное вопрос к boundary? Ведь нужно было просто получить его значение, т.о. к примеру, ------5345435_4324_34234

Тогда почему функция boundary, этого и не собирается делать, на мой скромный взгляд:-)

У автора
function get_boundary($ctype){
if(preg_match('/boundary[ ]?=[ ]?(["]?.*)/i',$ctype,$regs)) {
$boundary = preg_replace('/^\"(.*)\"$/', "\1", $regs[1]);
return trim("--$boundary");
}
}

А я просто добавил explode и у меня всё заработало, единственное, я не программер, поэтому так долго не мог понять в чём дело:-)

function get_boundary($ctype){
if(preg_match('/boundary[ ]?=[ ]?(["]?.*)/i',$ctype,$regs)) {
$boundary = preg_replace('/\"(.*)\"$/', "\\1", $regs[1]);
$boundary = explode ("\"", $boundary);
return trim("--$boundary[0]");
}
}




18.02.2012 weber
Немогу понять почему не выводится Return-Path: точнее выводит пустой заголовок. Если в заголовке From стоит адрес отправителя, то еще можно узнать откуда письмо, а если там From: Сергей Иванович то Ж. Хотя и там должно быть, как я понимаю, From: Сергей Иванович <mail@exemple.ru>



18.02.2012 weber
Кстати сервер на джино



23.04.2012 Alex
Большое спасибо!




25.08.2012 Анатолий
У меня ошибка в
Message: Undefined variable: lasthead
В функции: $decodedheaders[$lasthead] .= " $thisheader";
Подскажите пож-ста..??



25.08.2012 Анатолий
Подскажите пожалуйста, как выбрать не все письма сразу, а выбрать в массив только за последнюю неделю.
То есть не выбрать все письма из ящика в массив, а потом выбрать из них нужные по дате, А выбрать сразу только нужные последние по дате.
не кол-во, а именно за прошедшие 7дней?




25.08.2012 Анатолий
Если на почте находится 1000000000 писем, то как скрипт будет работать?
когда нам нужно выбрать письма только за эту неделю?




26.11.2012 Сергей
В функции get_data не надо делать trim при проверке точки:
if($buffer == ".") break;

По иронии судьбы мне попалось письмо, в котором в одной строке так же есть точка и на этой точке прерывается чтение строк. Когда я убрал trim все заработало нормально.

За статью огромное спасибо автору!



28.12.2012 Георгий
Замечательный материал для обучения, но уже совсем непригодный для применения с новым PHP:
1. Применение устаревших функций типа ereg
2. Использование неопределенных переменных

Просьба обновить.



16.02.2013 Ja
Toze spaasibo, to czto iskal



12.03.2013 Макс
В некоторых письмах в $mass_header["from"] только Имя а не Имя <lll@gmail.com>

From: =?KOI8-R?B?7MDEzcnMwSD0wdsXOy88=?= <lll@gmail.com>




20.04.2013 CBV
Отправителя не видно, потому что <*@*.*> - для браузера - тег. Юзайте htmlspecialchars



04.01.2014 Farkhod
bolshoe spasiba



04.01.2014 Фарход
Большое спасибо



13.01.2014 Сергей
Супер! Все по существу.


1 2 3 4 5 6 7

Добавить свой комментарий


Ваше имя(* обязательно)


Текст сообщения(* обязательно)









 
 
  запомнить

 
Copyright © 2003-2024 WeBi Constructor
Rambler's Top100