Autor Zpráva
notwist
Profil
Zdravím,

používám imap_fetchbody pro zobrazení zprávy.

$body = imap_fetchbody($messagemap, $msg, "1.2");
    if ($body == "") {
            $body = imap_fetchbody($messagemap, $msg, "1");
    }
    
    $body = quoted_printable_decode($body);

Pokud mi přijde jakákoliv zpráva, kde není přiložená příloha nebo je příloha vložená přes CID, tak je vše v pořádku. Zpráva může být HTML nebo text.
Pokud ale přijde zpráva, kde je přiložená příloha (jako v Outlooku přes sponku), tak se mi nezobrazí korektní text, ale pravděpodobně textově část přílohy (plno znaků).

Ukázka:
iVBORw0KGgoAAAANSUhEUgAAAKIAAABECAYAAAAC7+6EAAAAAXNSR0ICQMB9xQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUATWljcm9zb2Z0IE9mZmljZX/tNXEAABXxSURBVHja 7Z0LVFN3nsdp7bY+quUVQkBAw0MIIUDCQ0QEaQhJSEICBOQRoVDBUhZfY/E5orWWtj5KrVV8QniF h1BFZFzOWZldu+u0tD2d2e4sTul0zky704puW9tabeW/v99NwgCGyCNCoNdzfod4c+//3pv/535/ j///3muze/duG9pom2qjfwTaaBBv3rw5t7Gxcd7Vq1cDm5ubU7VabfJgO3funPqjjz7yw3UIIY/Q HUaDaBEDmOZ1dHQEAVjPtba2VgB8PdXV1dfq6+u/hmWkrq6OwGfK8DMug899sM4nOp3uckNDw77O zs41LS0tbLrzaBDHbADPCgDreQDrHQDrDgBIACYCcBGAi4KupqaG1NbWDjFcht/hOk1NTQQUktoO vvs7bNsK3+e2tbW50h1Jg2jWwL1GAyxvA0w/I3wIlBEwULlxGyqmsT0A8sb58+frAPIwukNpEIcY qFY0wNcAwFHqZwn4TBm2iVCePXsWlfO7ixcvVvb09NBA/tJBBAV0AXXSAXiUAqJbtTR8IxnuC4EE uwPuehfEowvoDv4FggiuUQbq9B7GcJMJ4HBD9UUg4XguAZBedCf/QkAE5ZkFScQhAOAuquBUATjc ZWNyAxfG5xBDSuiOnuEglpeXPwGdfmqqVXAkM2Tldy5duvQa3dkzFESA8DFQwRNY63sYiYglY0dU R4hfX6E7fIaBCPDNgo49Ze0QDo4bDaWe/XSnzxAQAb450LnHpguEg2HEGLarq2sb3fEzAERwdbuw Q6cThIPdNCQw34AyrqQ7fxqDCCq4FJTlljUmJmNJYMA+gXOxpwGYhiB2dnY6gQq+g7HWdIVw8BAh
atd...

Je možné nějak ošetřit, aby v tomto případě se zobrazil text zprávy? Přílohy mám pak vyřešené dalším kódem (zobrazení příloh přes CID v textu mailu, možnost stažení příloh přes odkaz...).

Díky.


EDIT:

Tak jsem to nakonec udělal podle tohoto: www.electrictoolbox.com/php-imap-message-body-attachments a je to OK.

Možná se zdejších odborníků ale zeptám na to, jak řeší zobrazování INLINE obrázků z různých serverů (Google, Outlook...). Zdá se mi, že mail je pokaždé v jiné struktuře, jelikož můj kód pro nahrazení příznaku CID na cestu k serveru funguje jen někdy.
Používám:

$find = '#src="cid:([^"@]*)@([^"]*)"#';
    $replace = 'src="prilohyzprav/'.$slozka.'/$1"';
    $html_part = preg_replace($find, $replace, $body);
    $body = $html_part;

Neřešil jste to již někdo?

Díky.
Davex
Profil
notwist:
můj kód pro nahrazení příznaku CID na cestu k serveru funguje jen někdy
Content-ID nemusí obsahovat zavináč.
notwist
Profil
Davex:
A uměl by někdo navrhnout string tak, aby to bralo k úvahu i tuto variantu? Bohužel se zrovna v této problematice moc neorientuji. Díky.
Davex
Profil
Zjednodušeně asi nějak takto:
$find = "~\bsrc=(['\"])cid:(.+?)\\1~i";
$replace = 'src="prilohyzprav/'.$slozka.'/$2"';

Pro větší spolehlivost by asi bylo lepší použít plnohodnotný HTML parser.
notwist
Profil
Davex:
Děkuji za rychlou reakci. Vyzkouším...
notwist
Profil
Tak toto bohužel nefunguje. Vrátí to prázdný řetězec...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: