[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вложеные файлы
Dex
Господа, вы не могли бы мне помочь?

нужно написать скрипт который подключается к удаленному почтовому ящику,
авторизуется и скачивает вложеные файлы из последнего пришедшего письма.

Исходные данные: адрес почты, пароль к ящику(задать в скрипте переменными).

пускай будет ящик на mail. ru

скачивает на сервер с которого был запущен скрипт.

если нужны уточнения, спрашивайте.



Спустя 20 часов, 16 минут, 29 секунд (24.10.2009 - 22:56) Dex написал(а):
никто не может помочь..?

Спустя 57 минут, 11 секунд (24.10.2009 - 23:54) Joker написал(а):
Цитата (Joker)
Нарушения правил.
2.4.e При оформлении сообщения с программным кодом используйте обрамляющие тэги, специфические для используемого кода (PHP, HTML, SQL), либо универсальный тэг кода.

Спустя 2 часа, 5 минут, 41 секунда (25.10.2009 - 01:59) Dex написал(а):
Вот то, что я уже написал, но и это работает некорректно. Просмотрите пожалуйста, укажите на ошибки и предложите вариант скрипта для скачки вложеного файла. Я только начинаю програппировать на php,поэтому не все получается.

Заранее благодарен.
Свернутый текст
PHP
<?PHP

$server 
= "pop.mail.ru";
$username = "user";
$port = "110";
$password = "pass";

function pop_open($server, $username, $password, $port)
{

$sh = fsockopen($server, $port=110);


if ($sh)
{

$banner = fgets($sh, 1024);

fputs($sh, "USER ".$username."\r\n");
$userresponse = fgets($sh, 1024);


if ($userresponse[0] == "+")
{

fputs($sh, "PASS ".$password."\r\n");

$passresponse = fgets($sh, 1024);
if ($passresponse[0] != "+")

{

//$passresponse = str_replace("\r","", str_replace("\n","", $passresponse));



echo ("Ошибка авторизации");


return (-1);
}
}
else
{
// Вывод ошибки имя пользователя
echo("Пользователь не существует.");
return (-1);
}
}
//если соединение не удалось
else
{
echo(
"Ошибка - не удалось соединиться с $server.");
return (-2);
}
//Возвращаем коннектор, если все получилось.
return($sh);
}






/*
Вывод количества сообщений
$sh - коннектор
*/
function pop_messagecount($sh)
{
//Посылаем команду на получение кол-ва
fputs($sh, "STAT\r\n");
//Получаем ответ сервера
$statresponse = fgets($sh, 1024);
//Извлекаем цифру
$avar = explode(" ", $statresponse);
//Выводим количество
return($avar[1]);
}


}




/*
Чтение письма
$msgcnt - количество писем
*/
function pop_message($sh, $msgcnt)
{
//отправляем команду
fputs($sh, "RETR $msgcnt \r\n");
//Читаем ответ, цикл как в pop_messageheader
while ($header_received == 0)
{
$temp = fgets($sh, 1024);
$buffer.=$temp;
if ($temp == ".\r\n")
$header_received = 1;
}
return(
$buffer);
}

pop_open("pop.mail.ru", "user", "pass", "110");

Спустя 41 секунда (25.10.2009 - 02:00) Dex написал(а):
исправил

Спустя 33 минуты, 38 секунд (25.10.2009 - 02:34) Joker написал(а):
я думаю чтоб тебе помогли нужно поставить вопрос подругому а то в первом сообщении фраза звучит так "сделайте всё заменя и дайте мне а я вам даже спасибо не скажу" но поскольку ты делаешь что то и это работает некоректно то я делаю вывод что нужно чтоб помогли исправить, поэтому попроси нормально и еще будет плюс если зарегистрируешься.

Спустя 17 часов, 2 минуты, 29 секунд (25.10.2009 - 19:36) de2x написал(а):
Господа, не могли бы вы просмотреть код скрипта, который написан выше, указать на мои ошибки и дать советы по поводу того, как можно реализовать именно скачку вложенного файла из последнего письма? Заранее благодарен!

Спустя 22 часа, 56 минут, 19 секунд (26.10.2009 - 18:32) de2x написал(а):
PHP
<?php



$ROOT 
'/usr/www/www.440hz.spb.ru/';

include(
$ROOT.'/oops/local.inc');

include(
$ROOT.'/oops/const.inc');
include(
$ROOT.'/oops/define.inc');
include(
$ROOT.'/oops/mysql.inc');
include(
$ROOT.'/oops/system.inc');
include(
$ROOT.'/oops/error.inc');
include(
$ROOT.'/oops/foto.inc');


$OOPSGlobal["DB_CONNECT"] = new OOPSMySQL($OOPSGlobal["DB_HOST"],$OOPSGlobal["DB_DATA"],$OOPSGlobal["DB_USER"],$OOPSGlobal["DB_PASS"]);
$OOPSGlobal["DB_CONNECT"]->Connect();
$OOPSGlobal["DB_CONNECT"]->Select();

$imap_user "***";
$imap_password "***";
$imap_mailbox "{localhost:110/pop3}INBOX"

$DEBUG false;
$LOGFILE $ROOT."bin/checkmail.log.txt";
$LOGFILE '';
$FOTODIR $ROOT.'htdocs/foto/';
$WORK true;


function 
GetRandomId() {
    
# из чего генерируем
    
$alphabet "abcdefghijklmnopqrstuvwxyz1234567890";        
    
$alphalen strlen($alphabet);
    
$key="";

    
# запускаем генератор
    
mt_srand((double)microtime()*1000000);                    
    
$keylength=16;
    for (
$i=0$i<$keylength $i++) {
      
$key .= substr($alphabetmt_rand() % $alphalen1);
    }
    return 
$key;
}

function 
WriteImage($img,$w,$h) {
    global 
$FOTODIR;
    global 
$OOPSGlobal;

    
$FID $OOPSGlobal["DB_CONNECT"]->GetFreeID("fotos");

    
$size[0] = imagesx($img);
    
$size[1] = imagesy($img);
    
$size[2] = 2;

    
$EXT OOPSFotoExt($size[2]);
    
    
$OOPSGlobal["DB_CONNECT"]->Query("INSERT INTO fotos (ID,TYPE,EXT,DATA,W,H,ALT,OWNER) VALUES ('".$FID."',0,".$size[2].",".time().",".$size[0].",".$size[1].",'','')");

    
ImageJPEG($img,$FOTODIR.$FID.".jpg");

    return 
$FID;

}

function 
write_data($text,$img) {
    global 
$date;
    global 
$WORK;


    if(!empty(
$text)) {
        
$text str_replace("'","`",$text);
        
_log("W Text  [".substr($text,0,30)."] [".strlen($text)."] written in DB");
    }
    
    if(!empty(
$img )) {

        
$str base64_decode($img);
        
$src =  imagecreatefromstring($str);

        
$w imagesx($src);
        
$h imagesy($src);

        
$ww 200;

        if(
$w $ww) {
            
$delta $w $ww;
            
$nw 200;
            
$nh $h $delta;

            
$new imagecreatetruecolor(@intval($nw),@intval($nh));
            
imagecopyresampled($new,$src,0,0,0,0,$nw,$nh,$w,$h);
            
$img  WriteImage($new,$nw,$nh);
            
$imgz WriteImage($src,$nw,$nh);
        } else {
            
$img  WriteImage($src,$w,$h);
            
$imgz "";
        }

        
_log("W Image [".substr($img,0,30)."] [".strlen($img)."] written in DB");
    }

    if(
$WORK) {
        if(!empty(
$text) OR !empty($img)) {
            
$q "INSERT INTO messages (DT, TEXT, FOTOLO, FOTOHI) VALUES (".time().", '$text','$img','$imgz')";
            
mysql_query($q);
            
_log("SQLing [$img][$imgz] ...");
        }
    }
    
}


function 
_log($STR,$L=0) {
    global 
$DEBUG;
    global 
$LOGFILE;

    if(
$DEBUG) {
        if(!empty(
$LOGFILE)) {
            
$fp fopen($LOGFILE,"a");
            if(
$fp) {
                
fputs($fp,date("d.m.Y H:i")." - ".$STR."\r\n");
                
fclose($fp);
            }
        } else {
            print(
str_repeat(' ',$L*5).$STR."\n");
        }
    }
}


$mbox imap_open ($imap_mailbox$imap_user$imap_password); 
if(
$mbox == false) {
    
_log("Can't open mailbox [".$imap_mailbox."]");
    exit();
} else {
    
_log("Open mailbox [".$imap_mailbox."]");
}

$mboxcheck imap_check($mbox);

if(
$mboxcheck == false) {
    
_log("Can't check mailbox [".$imap_mailbox."]");
    exit();
} else {
    
_log("Checking mailbox ...");
    if(
$mboxcheck->Nmsgs == 0) {
        
_log("No mail in box");
        exit();
    } else {
        
_log("[".$mboxcheck->Nmsgs."] mail(s) in mailbox");
    }
}

function 
CleanCR($text) {
    
$text str_replace("\n",'',$text);
    
$text str_replace("\r",'',$text);
    return 
$text;
}


$date date('Y-m-d');

_log("Processing mail(s) ...");

function 
parse_mail($struct,$mnum,$pn="",$L=0) {
    global 
$mbox;
    global 
$date;

    global 
$gtext;
    global 
$gimg;

    
_log("Parsing ...");

    
$DOUTF false;

    switch(
$struct->type) {
        
// пришло письмо простым текстом без всяких изысков
        
case 0:
            
_log("Fetch PLAIN [".$mnum."] [1]",$L);
            
$gtext imap_fetchbody($mbox,$mnum,1);
            
$gtext CleanCR($gtext);
            break;
        
// MILTIPART
        
case 1:
            
_log("Fetch MULTIPART OR MIXED [".$mnum."] [1]",$L);
        
// MIXED
        
case 2:

            
// письмо закапсулировано
            // перебираем все части
            
$parts $struct->parts;

            for(
$p=0;$p<count($parts);$p++) {

                
$part $parts[$p];
                
_log("Part [$p] [".$part->subtype."]",$L+1);

                if(!empty(
$pn)) $ppp "$pn.".($p+1);
                else            
$ppp $p+1;


//    print_r($part);


                
switch($part->subtype) {
                    case 
"JPEG":
                        
_log("Fetch JPEG [".$mnum."] [".$ppp."]",$L+1);
                        
$gimg  imap_fetchbody($mbox,$mnum,$ppp);
                        
_log("Image JPEG [".substr($gimg,0,30)."]",$L+1);
                        break;
                    case 
"PLAIN":
                        
_log("Fetch PLAIN [".$mnum."] [".$ppp."]",$L+1);
                        
$gtext imap_fetchbody($mbox,$mnum,$ppp);
                        
_log("Text PLAIN [".substr($gtext,0,30)."]",$L+1);

                        if(!empty(
$part->parameters[0]->attribute) AND $part->parameters[0]->attribute == 'CHARSET') {
                            if(!empty(
$part->parameters[0]->value)) {
                                
_log("CHARSET [".$part->parameters[0]->value.']',$L+1);
                                if(
$part->parameters[0]->value == 'utf-8') {
                                    
$gtext iconv('utf-8','cp1251',base64_decode($gtext));;
                                    
_log("Text ICONV [".substr($gtext,0,30)."]",$L+1);
                                }

                            }
                        }
                        break;
                    case 
"MIXED":
                        
_log("Recursive MIXED ...",$L+1);
                        
parse_mail($part,$mnum,$ppp,$L++);
                        break;
                }

            }

            
_log("Cleaning ...",$L+1);
            if(!empty(
$gtext)) $gtext CleanCR($gtext);
            if(!empty(
$gimg))  $gimg CleanCR($gimg);

            break;
        case 
5:
            
_log("Fetch JPEG [".$mnum."] [1]",$L);
            
// картинка
            
$gimg imap_fetchbody($mbox,$mnum,1);
            
_log("Image JPEG [".substr($gimg,0,30)."]",$L);
            break;
        default:
            
_log("Can't check type [".$struct->type."]",$L);
            break;

    }

    if(
$DOUTF) {
        
_log("UTF8 -> ASCII",$L+1);

    }

    
_log("Parse end.");
}



for(
$i=1;$i<=$mboxcheck->Nmsgs;$i++) {
    
$struct imap_fetchstructure($mbox$i);   

    
_log("---------------------------------------------");
    
_log("Mail [$i] [".$struct->subtype."]");
    
_log("---------------------------------------------");

    
$gtext "";
    
$gimg "";

    
parse_mail($struct,$i);


    
write_data($gtext,$gimg);

    if(
$WORKimap_delete($mbox$i);

}

if(
$WORK)
    
imap_close($mboxCL_EXPUNGE);
else
    
imap_close($mbox);

_log("Close mailbox");



проверьте пожалуйста, верно ли написан скрипт?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.