Vložení obrázku z jiné domény do těla emailu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
SamuelThorn
Člen | 29
+
0
-

Zdravím,

řeším problém s vložením obrázku do těla emailu. Obrázek se nachází na jiné doméně (static.domain.cz) než samotný web (domain.cz). Pokud jako druhý parametr metody setHtmlBody uvedu cestu ‚static.domain.cz‘, pak se sice sestaví správná adresa (po zkopírování do prohlížeče se obrázek zobrazí), ale běh skriptu skončí chybovým hlášením laděnky Unable to read file ‚https://static.domain.cz/path/image.png‘.

Předpokládám, že je to způsobeno právě tím, že obrázky jsou na jiné doméně než samotný web. Je to tak? Má to prosím řešení?

matopeto
Člen | 395
+
0
-

Napada ma:

  1. skontrolovat nastavenie allow_url_fopen
  2. skontrolovat certifikat na tom druhom https webe validny, nevyfailuje to prave na tom?

Editoval matopeto (2. 6. 2017 13:55)

SamuelThorn
Člen | 29
+
0
-
  1. allow_url_fopen je povolené
  2. certifikát je validní, je společný pro obě domény (www i static)
SamuelThorn
Člen | 29
+
0
-

Tak jsem o kousek dál. Doklikal jsem se skrz zdrojové soubory až ke createAttachment, které používá file_get_contents(). Pokud zavolám jen file_get_contents(url), skončím hlášením:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

SamuelThorn
Člen | 29
+
0
-

Ale viditelně tohle není problém s Nette, ale s certifikáty. Jdu pátrat. :)

matopeto
Člen | 395
+
0
-

SamuelThorn napsal(a):

Tak jsem o kousek dál. Doklikal jsem se skrz zdrojové soubory až ke createAttachment, které používá file_get_contents(). Pokud zavolám jen file_get_contents(url), skončím hlášením:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

Tzn certifikat nie je validny pre PHP/OpenSSL, pravdepodobne neaktualizovany zoznam root certifikacnych autorit teda ak to je podpisane nejakou znamou a nie custom, pokial custom tak v DEBUG mode pridat certifikacnu custom atoritu, pripadne vypnut overovanie (nedoporucujem)

Tzn stiahnut z najnovsie autority napr z: https://curl.haxx.se/…extract.html ale neviem ako je to dvoverihodne. (existuju weby, ktore to generuju z mozzila/chrome zoznamov)

a potom nastavit v php.ini

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = "c:/WAMP/PHP/cacert.pem"
openssl.cafile = "c:/WAMP/PHP/cacert.pem"

Viac info tu: http://php.net/….openssl.php

Editoval matopeto (2. 6. 2017 14:42)

SamuelThorn
Člen | 29
+
0
-

Díky. Certifikát je od SpaceSSL. Ale nakonec to vypadá, že je to nějaký problém v konfiguraci IIS serveru na lokálním stroji, na kterém vyvíjím. Když jsem si to cvičně poslal na „venkovní“ testovací server, tak se to tvářilo, že to funguje.

SamuelThorn
Člen | 29
+
+2
-

matopeto napsal(a):

a potom nastavit v php.ini

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = "c:/WAMP/PHP/cacert.pem"
openssl.cafile = "c:/WAMP/PHP/cacert.pem"

Tak jen potvrzuji, že to opravdu bylo cestami k souboru cacert.pem v php.ini. Plus mi ještě na lokálním serveru chybělo rozšíření php_fileinfo.dll. Teď už všechno šlape, jak má.

Děkuju za pomoc.