potrzebuje pomocy/porady.
Próbuje zrobić program, który połączy się z pocztą i ściągnie wybrane maile (np. od konkretnego nadawcy) a następnie do odpowiedniego katalogu wrzuci jeden z załączników (o konkretnym rozszerzeniu) a do podkatalogu 'zalaczniki' wrzuci całego maila (mail.eml) oraz pozostałe załączniki.
Mam z tym kilka problemy (a może więcej niż kilka :|)
1. Problem z czasem wykonania skryptu. Nie chciałabym tego rozwiązywać zwiększając wartość max_execution_time na serwerze, gdyż być może będzie to na serwerze, gdzie nie będę miała takiej możliwości.
Gdy jest mało maili to nie ma tego problemu, jednak gdy jest ich więcej to skrypt nie zdąża się wykonać.
Podejrzewam, że całe przeszukanie poczty najbardziej spowalnia polecenie imap_headerinfo
<?php for ($i = 1; $i <= imap_num_msg($con); $i++) { $naglowek = imap_headerinfo($con, $i, 80, 80); $id_wiadomosci = $naglowek->message_id; if($id_wiadomosci) { $maiboxihost = $naglowek->from[0]->mailbox . '@' . $naglowek->from[0]->host; //if $maiboxihost == $określonemu_nadawcy //to coś wykonuje ... } } ?>
które jest wywoływane dla każdej znajdującej się na poczcie wiadomości. Wydaje mi się, że nie mogę tego ominąć, gdyż potrzebuje wykonać operacje na mailach określonego nadawcy.
Czy ktoś ma jakiś pomysł jak by można było przeszukać tą pocztę, nie przeglądając wszystkich wiadomości, tylko od razu od określonego nadawcy?
2. Po ściągnięciu emla i przeglądaniu go w Outlook Express jest z nim jakiś problem z czcionką (na wp tego problemu nie ma, jakoś sobie radzą z wyświetleniem tego maila)
<?php $msg = imap_fetchheader($con,$i); $msg .= imap_body($con,$i); ... ?>
Po otworzeniu tego maila w Outlook Express mam na początku wiadomości taki komunikat:
If this email is not spam, click here to submit the signatures to FortiGuard - AntiSpam Service.
oraz czcionka wygląda nie czytelnie.
Czy ja mam na to jakiś wpływ w czasie tworzenia emla?
3. By wyróżnić załączniki mam skrypt, który jednak jest nie 'elastyczny' tzn. wyglądał mienj więcej tak:
<?php $k=0; foreach ($msg1 as $linia) { $string='Content-Disposition: attachment; filename="(.*)"'; //lub $string='name="(.*)"'; { ... $j = $nastepnywiersz; for ($j; $j< $ostatnielementtab; $j++) { { $tresc_zal .= $msg1[$j]; } else //continue; break; } ... } $k++; } ?>
Niestety określenie gdzie są załączniki wyglądało tak:
Content-Disposition: attachment; filename="(.*)" a teraz wygląda tak:
Content-Type: text/plain;
name="upo.xml"
Jak mogę zrobić to uniwersalnie?
również koniec treści załącznika wykrywałam znając wartość zmiennej boundary
Content-Type: multipart/related;
boundary="boundarymainentity"
chodź wiem, że ta wartość też może się zmieniać:
(w innym mailu)
Content-Type: multipart/mixed; boundary="part4728282b31dd5" (w jednej linii)
Jak mogę wyłowić z maila stosowaną wartość boundary?
Na ty, forum znalazłam takią poradę napisaną przez bendi:
<? $sString = 'Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"__mime_boundary_related__NEXT_PART_\" From:Marek B <bla@bla.pl>'; ?>
No i w tablicy aMatches mamy:
Kod
Array
(
[0] => Array
(
[0] => Content-Type: multipart/related;
type="multipart/alternative";
boundary="__mime_boundary_related__NEXT_PART_"
)
[1] => Array
(
[0] => multipart/related;
type="multipart/alternative";
boundary="__mime_boundary_related__NEXT_PART_
)
)
(
[0] => Array
(
[0] => Content-Type: multipart/related;
type="multipart/alternative";
boundary="__mime_boundary_related__NEXT_PART_"
)
[1] => Array
(
[0] => multipart/related;
type="multipart/alternative";
boundary="__mime_boundary_related__NEXT_PART_
)
)
No i mysle ze dobranie sie do szczegolow nie bedzie stanowilo problemu.
Ja niestety mam z tym problem, nie wiem jak miałabym wyświetlić jaką kolwiek wartość tablicy $aMatches. Próbowałam tak: print ($aMatches[0][0]); ale takie coś nic mi nie zwraca.
Za każdą pomoc dziękuje.