Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Odbieranie maili w php

136 views
Skip to first unread message

maYk

unread,
Apr 1, 2010, 10:54:52 AM4/1/10
to
Witajcie, walcze od kilku godzin ze skryptem do odbierania maili w php
i mam juz tego dosc. Jest jeden skrypt z phpclassess ktory przerobilem
pod swoje potrzeby ale nie pobiera on na przyklad zdjec wklejonych do
maila. Zalaczniki za to sciagaja sie bez problemu. Najbardziej
zenujace jest to ze przed chwila skrypt odebral maila z jednym
wklejonym zdjeciem i zdjecie poprawnie zapisal, ale juz kolejny email
ktory przyszedl przeforwardowany z 7 zdjeciami ---> po zdjec ani
sladu. Czy macie namiary na jakies uniwersalne narzedzia, skrypty
ktore moglbym uzyc zamiast pisac samemu? A moze wystarcza tylko male
poprawki i moj skrypt bedzie dzialal w porzadku? Nie znalazlem zadnych
wyczerpujacych informacji na stronie php ale przeciez ludzie ktorzy
pisza oprogramowanie typu webmail musza korzystac z jakichs
instrukcji?

Oto czesc kodu ktora nie radzi sobie z wklejonymi zdjeciami:


if(isset($structure->parts))
{


foreach($structure->parts as $key => $value)
{
$enc=$structure->parts[$key]->encoding;
if($structure->parts[$key]->ifdparameters){
print_r($structure->parts);

$name = date("YmdHis") . "_" . $account;
$name.= "_" . $structure->parts[$key]-
>dparameters[0]->value;
$message = imap_fetchbody($imap,$mid,$key+1);
if ($enc == 0)
$message = imap_8bit($message);
if ($enc == 1)
$message = imap_8bit ($message);
if ($enc == 2)
$message = imap_binary ($message);
if ($enc == 3)
$message = imap_base64 ($message);
if ($enc == 4)
$message = quoted_printable_decode($message);
if ($enc == 5)
$message = $message;
$fp=fopen($path.$name,"w");
fwrite($fp,$message);
fclose($fp);
$ar[]=$path . $name;
}
if(isset($structure->parts[$key]->parts))
{
foreach($structure->parts[$key]->parts as $keyb =>
$valueb){
$enc=$structure->parts[$key]->parts[$keyb]-
>encoding;
if($structure->parts[$key]->parts[$keyb]->ifparameters){
$name=$structure->parts[$key]->parts[$keyb]->parameters[0]-
>value;
//echo $name;
$partnro = ($key+1).".".($keyb+1);
$message = imap_fetchbody($imap,$mid,
$partnro);
if ($enc == 0)
$message = imap_8bit($message);
if ($enc == 1)
$message = imap_8bit ($message);
if ($enc == 2)
$message = imap_binary ($message);
if ($enc == 3)
$message = imap_base64 ($message);
if ($enc == 4)
$message =
quoted_printable_decode($message);
if ($enc == 5)
$message = $message;
$fp=fopen($path.$name,"w");
fwrite($fp,$message);
fclose($fp);
$ar[]=$path . $name;
}
}
}

}
}

Lemat

unread,
Apr 1, 2010, 11:15:43 AM4/1/10
to
maYk wrote:

> Witajcie, walcze od kilku godzin ze skryptem do odbierania maili w php
> i mam juz tego dosc.

yhy, 1 kwietnia mamy...

> > $fp=fopen($path.$name,"w");

nadpisujesz sobie plik kolejną częścią emaila. Wymyśl unikalną nazwę dla
każdej części osobno.
--
Pozdrawiam
Lemat

maYk

unread,
Apr 1, 2010, 11:26:18 AM4/1/10
to
On Apr 1, 11:15 am, Lemat <#...@lemat.priv.pl> wrote:

> nadpisujesz sobie plik kolejną częścią emaila. Wymyśl unikalną nazwę dla
> każdej części osobno.


To szczegol. Juz poprawilem. W folderze w ktorym powinno mi zapisac
pliki pojawil sie plik o nazwie 20100401112309_2_us-ascii i nic
wiecej. A gdzie moj wklejony obrazek?


M.

Lemat

unread,
Apr 1, 2010, 11:38:53 AM4/1/10
to
maYk wrote:

tu lecisz po wszystkich częściach emaila?

foreach($structure->parts[$key]->parts as $keyb =>
$valueb){

no to tuż za { umieść echo "dupa "; i zobacz ile razy dupa została wypisana.
podobnie tuż obok tego fopen w środku tego foreacza - umieść echo $name; i
zobacz czy rzeczywiście masz wiele unikalnych nazw.

a tak na marginesie to nie sprawdzasz czy operacja fopen wykonała się
poprawnie.
--
Pozdrawiam
Lemat

maYk

unread,
Apr 1, 2010, 12:32:40 PM4/1/10
to
On Apr 1, 11:38 am, Lemat <#...@lemat.priv.pl> wrote:

> no to tuż za { umieść echo "dupa "; i zobacz ile razy dupa została wypisana.
> podobnie tuż obok tego fopen w środku tego foreacza - umieść echo $name; i
> zobacz czy rzeczywiście masz wiele unikalnych nazw.

Okay, cofnijmy sie o krok i zrobmy tak:

$structure = imap_fetchstructure($imap,$mid);
print_r($structure);

Oto wynik:


stdClass Object
(
[type] => 1
[encoding] => 0
[ifsubtype] => 1
[subtype] => ALTERNATIVE
[ifdescription] => 0
[ifid] => 0
[bytes] => 6123
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => BOUNDARY
[value] => 0016364ee30885483204832f5a4f
)

)

[parts] => Array
(
[0] => stdClass Object
(
[type] => 0
[encoding] => 0
[ifsubtype] => 1
[subtype] => PLAIN
[ifdescription] => 0
[ifid] => 0
[lines] => 36
[bytes] => 1337
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => CHARSET
[value] => ISO-8859-1
)

)

)

[1] => stdClass Object
(
[type] => 0
[encoding] => 4
[ifsubtype] => 1
[subtype] => HTML
[ifdescription] => 0
[ifid] => 0
[lines] => 67
[bytes] => 4544
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => CHARSET
[value] => ISO-8859-1
)

)

)

)

)


Gdzie sie podzialy zdjecia?

Piotr Siudak

unread,
Apr 1, 2010, 2:05:47 PM4/1/10
to
W dniu 01.04.2010 17:38, Lemat pisze:

>
> no to tuż za { umieść echo "dupa "; i zobacz ile razy dupa została wypisana.
>

sugeruje jednak "echo 'testtesttest'" albo coś innego w tym guście

debugowanie za pomocą "dupy" jest o tyle wygodne, że trudno się
spodziewać ze aplikacja wypluje z siebie taki ciąg znaków gdziekolwiek
indziej. Na minus trzeba jednak zaliczyć fakt że jeżeli ktoś się
przyzwyczai to trzeba się liczyć z faktem, że są szanse, że prędzej czy
później jakąś "dupę" zobaczy klient.

Zapomniany "testtesttest" to jednak IMHO nieco mniejszy powód do
zażenowania niż "dupa".

--
Piotr Siudak
siu...@xz.pl

maYk

unread,
Apr 1, 2010, 2:12:35 PM4/1/10
to
On Apr 1, 2:05 pm, Piotr Siudak <siu...@xz.pl> wrote:
> Zapomniany "testtesttest" to jednak IMHO nieco mniejszy powód do
> zażenowania niż "dupa".

To niewazne, tutaj sami amerykance.

M.

Paweł Piskorz

unread,
Apr 1, 2010, 3:54:15 PM4/1/10
to

Jak znają jakiegoś Polaka (czyt. Ciebie) to na bank wiedzą co znaczy
"dupa" ;)


--
message[autor="PablO"]::after {
content:"Pozdrawiam";
}

maYk

unread,
Apr 1, 2010, 4:14:28 PM4/1/10
to
On Apr 1, 3:54 pm, Paweł Piskorz <nie.ma.ma...@psikre.nie?> wrote:
> Jak znają jakiegoś Polaka (czyt. Ciebie) to na bank wiedzą co znaczy
> "dupa" ;)

Tak troche dwuznacznie to zrozumialem...

M.

andreux

unread,
Apr 1, 2010, 4:35:16 PM4/1/10
to
Paweł Piskorz pisze:

>> To niewazne, tutaj sami amerykance.
>
> Jak znają jakiegoś Polaka (czyt. Ciebie) to na bank wiedzą co znaczy
> "dupa" ;)

Zdaje się, że potrafią sporo więcej
http://www.google.pl/codesearch/p?hl=pl#iCXnLOj7beI/arch/sparc64/mm/ultra.S&q=pierdol&sa=N&cd=1&ct=rc

;)

pozdrawiam,
Andreux

Paweł Piskorz

unread,
Apr 2, 2010, 6:02:20 AM4/2/10
to

Ups, faktycznie mogłem to lepiej sformułować. W każdym razie chodziło mi
tylko o znajomość tłumaczenia tegoż słowa :)

maYk

unread,
Apr 2, 2010, 9:13:37 AM4/2/10
to
On Apr 2, 6:02 am, Paweł Piskorz <nie.ma.ma...@psikre.nie?> wrote:
> Ups, faktycznie mogłem to lepiej sformułować. W każdym razie chodziło mi
> tylko o znajomość tłumaczenia tegoż słowa :)

Przyjmuje przeprosiny :)


W koncu sobie z tym poradzilem. Jednak zauwazylem ze w kazdym mailu
pojawia sie duzo smieci takich jak; pliki z zwartascia html wiadomosci
email. Aby wiec uniknac niepotrzebnego zapisywania ich na dysk
zastosowalem if z warunkiem:

if ((isset($structure->parts[$key]->parameters[0]->attribute)) &&
($structure->parts[$key]->parameters[0]->attribute == "NAME")){

Przykladowy obiekt ze wszystkimi danymi mozna znalezc w moim poscie
powyzej. A ponizej moja funkcja. Prosze o wskazowki, o czyms
zapomnialem?

function GetAttach($imap,$mid,$account) {
$path = "_attINCOMING/";
$inc = 0;
$structure = imap_fetchstructure($imap,$mid);
//print_r($structure);
$ar=array();


if(isset($structure->parts)){
foreach($structure->parts as $key => $value){
$enc=$structure->parts[$key]->encoding;

if($structure->parts[$key]->ifparameters){
if ((isset($structure->parts[$key]->parameters[0]->attribute)) &&
($structure->parts[$key]->parameters[0]->attribute == "NAME")){


$name = date("YmdHis") . "_" . $account;

$name.= "_" . $structure->parts[$key]->parameters[0]->value;


$message = imap_fetchbody($imap,$mid,$key+1);
if ($enc == 0)
$message = imap_8bit($message);
if ($enc == 1)
$message = imap_8bit ($message);
if ($enc == 2)
$message = imap_binary ($message);
if ($enc == 3)
$message = imap_base64 ($message);
if ($enc == 4)
$message = quoted_printable_decode($message);
if ($enc == 5)
$message = $message;
$fp=fopen($path.$name,"w");
fwrite($fp,$message);
fclose($fp);

$ar[$inc]['savepath']=$path . $name;
$inc++;


}
}
if(isset($structure->parts[$key]->parts))
{

// TA CZESC MA PODOBNO SLUZYC DO ZAPISYWANIA EMBEDDED ATTACHMENTS


foreach($structure->parts[$key]->parts as $keyb => $valueb)
{

$enc=$structure->parts[$key]->parts[$keyb]->encoding;
if($structure->parts[$key]->parts[$keyb]->ifparameters){

if ((isset($structure->parts[$key]->parts[$keyb]->parameters[0]-
>attribute)) && ($structure->parts[$key]->parts[$keyb]->parameters[0]-
>attribute == "NAME")){


$name = date("YmdHis") . "_" . $account;

$name.=$structure->parts[$key]->parts[$keyb]->parameters[0]-
>value;


$partnro = ($key+1).".".($keyb+1);
$message = imap_fetchbody($imap,$mid,$partnro);

if ($enc == 0)
$message = imap_8bit($message);
if ($enc == 1)
$message = imap_8bit ($message);
if ($enc == 2)
$message = imap_binary ($message);
if ($enc == 3)
$message = imap_base64 ($message);
if ($enc == 4)
$message = quoted_printable_decode($message);
if ($enc == 5)
$message = $message;
$fp=fopen($path.$name,"w");
fwrite($fp,$message);
fclose($fp);

if ($structure->parts[$key]->parts[$keyb]->id){
$ar[$inc]['id'] = substr($structure->parts[$key]-
>parts[$keyb]->id,1,-1);
$ar[$inc]['value'] = $structure->parts[$key]->parts[$keyb]-
>parameters[0]->value;

}
$ar[$inc]['savepath']=$path . $name;
$inc++;
}
}
}
}
}
}
return $ar;
}


Pozdro
M.

0 new messages