[php] MIME atrybuty znacznikow html ?

0

Witam,
napisalem sobie skrypt do wysylania maili - wszystko byloby bardzo fajnie gdyby nie to ze przy wyborze wysylania maila w postaci html rozpoznaje tylko podstawowe znaczniki html a juz takie ich atrybuty jak np"
background-repeat: no-repeat juz nie ( o dolaczaniu zewnetrznego arkusza styli niemam co myslec).
Kod odpowiedzialny za wysylke maila w postaci HTML:

if($attach == "NIE" && $format == "html"){
     
        $head = "From: $from\n";
        $head = $head . "Reply-To: $replyto\n";
        $head = $head . "X-Mailer: PHP\n";
        $head = $head . "X-Sender: $from\n";
        $head = $head . "MIME-version: 1.0\n";
        $head = $head . "Content-type: multipart/mixed; ";
        $head = $head . "boundary=\"$boundary\"\n";    
        
        $subject = "=?iso-8859-2?B?".base64_encode($temat)."?=\n";
        
// Tresc wiadomosci  
        $tlo = "background=\"http://moj.serwer.pl/papeteria.gif\"";
	$norep = "background-repeat: no-repeat";
        $mesg = "--" . $boundary . "\n";    //musza byc dwa minusy na poczatku
        $mesg = $mesg . "Content-Type: text/html; charset=iso-8859-2\n";
        $mesg = $mesg . "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\"></head><body style=\"font-size: 20pt; font-family: Arial;\" $tlo $norep>\n";
                
        $mesg = $mesg . "<BR><BR><BR><BR><table><tr><td>" . $wiado . "</td></tr></table>\n";
        $mesg = $mesg . "</body>\n";
        $mesg = $mesg . "</html>\n";
       
        for ($i = 0; $i < count($_POST['kontakt']); $i++) {
        mail($_POST['kontakt'][$i], $subject, $mesg, $head);
           }  
     }

wygenerowany kod wyglada tak:

<html><head><meta content="text/html; charset=iso-8859-2"></head><body background="http://moj.serwer.pl/papeteria.gif">
<BR><BR><BR><BR><table><tr><td>Czy widzisz tło i poskie znaki ?</td></tr></table>
</body>
</html>

Co zrobilem nie tak?

0

Ale przecież w kodzie HTML możesz legalnie zagnieździć definicje CSS wewnątrz znaczników <STYLE></STYLE> albo w atrybucie style. Nie trzeba do tego naginać czystości HTML..

0

podanie np w znaczniku

0

A pewien jestes, ze klient pocztowy tego nie blokuje?

0

maile sprawdzalem na 3 adresach z poziomu przegladarki i klienta - wszedzie to samo

0

Problem udalo sie rozwiazac tak: caly kod html zapisac w 1 linii

$mesg = $mesg . "KODhtml";

Wynikl jednak problem z tlem do maila - maile sa wysylane przez skrypt i podanie bezwzglednej sciezki do papeteri zalatwia sprawe pod przegladarkami ale klienty pocztowe olewaja taka sciezka - jakis pomysl co zrobic aby zadzialalo:

background="file:////home/me/papeteria/papeteria.gif" ?

0

Sprobuj wyslac papeterie jako zalacznik i w stylu dac

background-"cid:nazwaZalacznika"

o ile dobrze pamietam.

Jak wysylac zalaczniki to sobie musisz poszukac sam, ale materialow w necie jest sporo. Na pewno tak dziala, bo sam tak robilem kiedys. Plus jest taki, ze jak juz klient blokuje obrazki to zazwyczaj te z zewnetrznego serwera (zeby nie mozna bylo sledzic maili), a zalaczniki zostawia w porzadku.

0

Dzieki za dobry trop, sek w tym ze zalaczniki sa dostepne pod przegladarkami i klientami pocztowymi, ale nie wchodza jako tlo. Moze cos pominalem, niemam na razie do tego sily (widac jakis blad? ):

else if($attach != "NIE" && $format == "html"){ //jest zalacznik i format HTML   
     $head = "From: $from\n";
        $head = $head . "Reply-To: $replyto\n";
        $head = $head . "X-Mailer: PHP\n";
        $head = $head . "X-Sender: $from\n";
        $head = $head . "MIME-version: 1.0\n";
        $head = $head . "Content-type: multipart/mixed; "; 
        $head = $head . "boundary=\"$boundary\"\n";    
        $head = $head . "Content-transfer-encoding: 8BIT\n";         
        $head = $head . "X-attachments: $filename_name;\n\n"; 
        $head = $head . "X-attachments: $papeteria;\n\n"; 
        
        $subject = "=?iso-8859-2?B?".base64_encode($temat)."?=\n";
        
// Tresc wiadomosci  
        $mesg = "--" . $boundary . "\n";    //musza byc dwa minusy na poczatku 
        $mesg = $mesg . "Content-Type: text/html; charset=\"iso-8859-2\"\n\r\n";	
         
        $mesg = $mesg . "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><head><meta http-equiv=\"Content-Type\" content=\"text/html;\" charset=\"iso-8859-2\"><style>BODY {font-family: Arial;font-size: 10pt;color: 000000;margin-left: 50 px;margin-top: 100 px; background-position: top left;background-repeat: no-repeat;}</style></head><body bgColor=#ffffff background-cid:stgpapeteria.gif><div>&nbsp;</div><div>&nbsp;<BR><BR><BR><BR>$wiado<BR><BR></div><div>Pozdrawiam,<br>Krzysztof W<br></div><br></body></html>\n\r\n"; 
               
        $mesg = $mesg . "--" . $boundary . "\n";    //musza byc dwa minusy na poczatku
        $mesg = $mesg . "Content-type: " . $filename_type  . "; name=\"$filename_name\"\n";        
        $mesg = $mesg . "Content-Transfer-Encoding: base64\n";
        $mesg = $mesg . "Content-disposition: attachment; filename= \"$filename_name\"\n\n";
        $mesg = $mesg . fileopenanddecode($filename) . "\n";   //czytam i koduje plik        
        //$mesg = $mesg . "--" . $boundary . "-- \n"; //musza byc dwa minusy na poczatku i na koncu
        
        $mesg = $mesg . "--" . $boundary . "\n";    //musza byc dwa minusy na poczatku
        $mesg = $mesg . "Content-type: " . $papeteria_type . "name=\"$papeteria\"\n";        
        $mesg = $mesg . "Content-Transfer-Encoding: base64\n";
        $mesg = $mesg . "Content-disposition: attachment; filename= \"$papeteria\"\n\n";
        $mesg = $mesg . fileopenanddecode($filenamex) . "\n";   //czytam i koduje plik  TLA      
        $mesg = $mesg . "--" . $boundary . "-- \n"; //musza byc dwa minusy na poczatku i na koacu
        
        for ($i = 0; $i < count($_POST['kontakt']); $i++) {
        mail($_POST['kontakt'][$i], $subject, $mesg, $head);

Funkcja fileopenanddecode:

$papeteria = "papeteria.gif";
$papeteria_type = "image/gif";
$sciezka = "attach";  //folder gdzie trzymane sa obrazki
$filenamex = $sciezka.'/'.$papeteria;
//funkcja odczytująca plik i kodująca go d o formatu base64 zgodnie z RFC 2045
    function fileopenanddecode($file) {
        if (is_readable($file)) {
             $fd = fopen($file, "rb");
             $plik = fread($fd, filesize($file));
             $encoded = chunk_split(base64_encode($plik));
             fclose($fd);    
        }
        return $encoded;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1