Autor | Zpráva | ||
---|---|---|---|
notwist Profil |
#1 · Zasláno: 3. 9. 2015, 11:44:43
Zdravím,
potřeboval bych trochu pomoci s mým problémem. V PHP si stahuji e-maily přes IMAP funkce PHP a zobrazuji si text zprávy. Vše je OK, ale pokud HTML zpráva obsahuje vložený obrázek, tak se mi v editoru (CKEditor) zobrazí náhled zprávy, ale jen s orámovaným obrázkem, který neumí najít. Je možné toto nějak ošetřit, aby na místě, kde je obrázek vložený, se opravdu zobrazil? Předpokládám, že to nějak lze, jelikož například RoundCube mi zprávu zobrazí korektně. Programuji si své řešení pro příjem zpráv. Velice děkuji za případný postup, jak problém vyřešit. |
||
Keeehi Profil |
#2 · Zasláno: 3. 9. 2015, 12:32:34
A co je v tom kódu uvedeno za URL?
|
||
notwist Profil |
Je tam toto:
<img alt="Popis: Popis: Logo.gif" id="obrázek_x0020_1" src="cid:image001.png@01D0E4CF.E4174D80" style="height:68px; width:162px" /> A v tom Roudcube, kde to jde: <img width="162" height="68" id="obrázek_x0020_1" src="./?_task=mail&_uid=2&_mbox=INBOX&_action=get&_part=2&_embed=1&_mimeclass=image" alt="Popis: Popis: Logo.gif"> |
||
Keeehi Profil |
#4 · Zasláno: 3. 9. 2015, 14:06:24
Musíš si stáhnout přílohy, což by se mělo snad dělat pomocí php.net/manual/en/function.imap-fetchstructure.php. Uložit je třeba do složky attachments a pak v kódu nahradit podobně jako to dělá roundcube
<img alt="Popis: Popis: Logo.gif" id="obrázek_x0020_1" src="cid:image001.png@01D0E4CF.E4174D80" style="height:68px; width:162px" /> za <img alt="Popis: Popis: Logo.gif" id="obrázek_x0020_1" src="attachments/image001.png" style="height:68px; width:162px" /> |
||
notwist Profil |
#5 · Zasláno: 3. 9. 2015, 16:16:35
Děkuji, ale nejsem z toho moudrý. Není ta funkce použitelná spíše na přílohy z mailu? Pokud se mýlím, nemáte odkaz na kód, který by ukládal obrázky z těla zprávy? Díky.
|
||
Keeehi Profil |
#6 · Zasláno: 4. 9. 2015, 01:06:27
notwist:
Jenže on v těle žádný obrázek není. V klasickém HTML kódu taky není žádný obrázek. Jen tag s atributem který popisuje, kde se má ten obrázek hledat. V tomto případě to je cid:image001.png@01D0E4CF.E4174D80 . Nejsem odborník na posílání emailů ale přijde mi to, že to říká, že obrázek je v příloze.
|
||
notwist Profil |
Tak jsem provedl nahrazení:
$find = '#src="cid:([^"@]*)@([^"]*)"#'; $replace = 'src="prilohyzprav/$1"'; $html_part = preg_replace($find, $replace, $body); Teď bych ještě potřeboval ty soubory i fyzicky uložit. To zatím nevím jak... |
||
Keeehi Profil |
#8 · Zasláno: 4. 9. 2015, 13:22:10
Google mi na dotaz "imap php download attachment" vrací celkem použitelné výsledky.
|
||
notwist Profil |
#9 · Zasláno: 4. 9. 2015, 14:24:41
To ano. Umím uložit klasickou přílohu. To jde. Ale pokud má mail vložený obrázek, jak píši, tak skript nepozná přílohu a neuloží jí. Je to asi nějak omezené na přílohy. Pravděpodobně bude nutné někde něco změnit, aby to bralo (i) vložené obrázky.
|
||
notwist Profil |
#10 · Zasláno: 4. 9. 2015, 16:06:05
Tak pro info, jak jsem uspěl :-)
$structure = imap_fetchstructure($messagemap, $msg); $parts = $structure->parts; $num_parts = sizeof($parts); if($num_parts>0) $attachment = 1; // příloha existuje else $attachment = 0; // příloha neexistuje $encoding = $structure->encoding; $parts = $structure->parts; $num_parts = sizeof($parts); // KOLIK má ZPRÁVA částí if($num_parts>0){ echo "Přílohy:<br><br>"; for($i=1;$i<$num_parts;$i++){ $info = get_info($parts[$i]); $name = $info['name']; $mime = $info['mime']; $transfer = $info['transfer']; $size = $info['size']; echo "<a href='test_imap_download.php?id=$msg&part=".($i+1)."&mime=$mime&filename=$name&transfer=$transfer'>"; echo $name."</a> ".$mime." ".$size." kB"; echo "<br />"; $file = imap_fetchbody($messagemap, $msg, ($i+1)); if ($transfer == 'BASE64') $file = imap_base64($file); elseif($transfer == 'QUOTED-PRINTABLE') $file = imap_qprint($file); file_put_contents('prilohyzprav/'.$name, $file); } } |
||
Časová prodleva: 9 let
|
0