Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][html] Błąd przy przesyłaniu html
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam

Napisalem sobie taka prostą funkcje do przesyłania maili :

  1. <?php
  2.  
  3.    class SimpleMail {
  4.        public $to = NULL;
  5.        public $cc = NULL;
  6.        public $bcc = NULL;
  7.        public $from = NULL;
  8.        public $subject = '';
  9.        public $body = '';
  10.        public $htmlbody = '';
  11.        public $send_text = TRUE;
  12.        public $send_html = FALSE;
  13.        private $message = '';
  14.        private $headers = '';
  15.        
  16.        public function send ($to = NULL, $subject = NULL, $message = NULL, $headers = NULL) {
  17.            
  18.            if(func_num_args() >= 3) {
  19.                $this->to = $to;
  20.                $this->subject = $subject;
  21.                $this->message = $message;
  22.                if ($headers) {
  23.                    $this->headers = $headers;
  24.                }
  25.            } else {
  26.                if ($this->from) {
  27.                    $this->headers .= 'From: '.$this->from."r\n";
  28.                }
  29.                if ($this->cc) {
  30.                    $this->headers .= 'Cc: '.$this->cc."r\n";
  31.                }
  32.                if ($this->bcc) {
  33.                    $this->headers .= 'Bcc: '.$this->bcc."r\n";
  34.                }
  35.                
  36.                if ($this->send_text and !$this->send_html) {
  37.                    $this->message = $this->body;
  38.                } elseif ($this->send_html and !$this->send_text) {
  39.                    $this->message = $this->htmlbody;
  40.                    $this->headers .= "MIME-Version: 1.0r\n";
  41.                    $this->headers .= 'Content-Type: text/html; charset="utf-8"'."r\n";
  42.                } else {
  43.                    $_boundary = '==MP_Bound_xyccr948x==';
  44.                    $this->headers = 'MIME-Version: 1.0'."r\n";
  45.                    $this->headers = 'Content-type: multipart/alternative; boundary='.$_boundary."r\n";
  46.                    
  47.                    $this->message = 'Jest to komunikat wieloczęściowy w formacie MIME\n';
  48.                    $this->message .= "--$_boundary\n";
  49.                    $this->message .= 'Content-Type: text/plain; charset="utf-8"'."\n";
  50.                    $this->message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
  51.                    $this->message .= $this->body."\n";
  52.                    $this->message .= "--$_boundary\n";
  53.                    $this->message .= 'Content-Type: text/html; charset="utf-8'."\n";
  54.                    $this->message .= 'Content-Transfer-Encoding: 8bit\n\n';
  55.                    $this->message .= $this->htmlbody."\n";
  56.                    $this->message .= "--$_boundary--";
  57.                }
  58.            }
  59.            
  60.            if (!mail($this->to, $this->subject, $this->message, $this->headers)) {
  61.                throw new Exception('Nieudane wysłanie listu email.');
  62.                return FALSE;
  63.            } else {
  64.                return TRUE;
  65.            }
  66.        }
  67.    }
  68. ?>


A nastepnie kruciótki skrypt aby przetestowac poprawnosć działania
  1. <?php
  2.  
  3.    require 'class.SimpleMail.php';
  4.    
  5.    $postcard = new SimpleMail();
  6.    
  7.    $postcard->to = "matewilk@gmail.com";
  8.    $postcard->subject = "Testowanie poczty z uzyciem html";
  9.    $postcard->body = "Test z użyciem tekstu HTML!";
  10.    $postcard->send_html = TRUE;
  11.    $postcard->send_text = FALSE;
  12.    
  13.    if($postcard->send()) {
  14.        echo "Udane wysłanie listu html!";
  15.    }
  16. ?>


Niestety gdy sprawdzam maila nie dochodzi wogole html tylko pusta wiadomość z tytułem, gdy uzywam skryptu do przesyłania tylko plain text wszystko jest ok, bład wystepuje przy przesylaniu html, mniemam ze bład jest gdzies w klasie SimpleMail tylko nie mam pojecia gdzie.....
Go to the top of the page
+Quote Post
maly_swd
post
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


byc moze masz tu blad:
Jest:
  1. <?php
  2. $this->headers .= 'Content-Type: text/html; charset="utf-8"'."r\n";
  3. ?>

powinno byc:
  1. <?php
  2. $this->headers .= 'Content-Type: text/html; charset=utf-8'."r\n";
  3. ?>
Go to the top of the page
+Quote Post
Wolfie
post
Post #3





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Racja byl tam błąd ale po poprawieniu nic to nie dalo.......

Mecze sie z tym od kilku dni, probowalem zamieniac \r\n tylko \n , kodowanie i inne cuda ale nic to nie dalo, jakies pomysly ?

-----------------------------------------------------------------------

Ok znalazlem błąd ktory tkwil w wywolaniu zmiennej, zamiast
  1. <?php
  2. $postcard->body = "Test z użyciem tekstu HTML!";
  3. ?>


Powinno byc
  1. <?php
  2. $postcard->htmlbody = "Test z użyciem tekstu HTML!";
  3. ?>


Pozdrawiam

---------------------------------------------------------
Niestety pojawil sie kolejny problem :

gdy chce wysłać list skladajacy sie zarówno ze zwykłego tekstu oraz tekstu html znowu dostaje pusta wiadomość

A oto skrypt :
  1. <?php
  2.  
  3.    require 'class.SimpleMail.php';
  4.    
  5.    $postcard = new SimpleMail();
  6.    
  7.    $postcard->to = "matewilk@gmail.com";
  8.    $postcard->from = "matewilk@gmail.com";
  9.    $postcard->cc = "matewilk@gmail.com";
  10.    $postcard->bcc = "matewilk@gmail.com";
  11.    $postcard->subject = "Testowanie poczty z uzyciem listu wieloczęściowego";
  12.    $postcard->body = "To czystotekstowy fragment listu";
  13.    $postcard->htmlbody = "<h1>Test z użyciem tekstu HTML!</h1>";
  14.    $postcard->send_html = TRUE;
  15.    
  16.    if($postcard->send()) {
  17.        echo "Udane wysłanie listu html!";
  18.    }
  19. ?>


Gdy patrze w źrodło maila jest tylko sam tytul bez wiadomosci....

Czy ktos ma pomysl jak to naprawic ?

Ten post edytował Wolfie 19.05.2009, 14:52:40
Go to the top of the page
+Quote Post
maly_swd
post
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


a jest mozliwe wyslanie czegos takiego?
Mi sie wydaje ze albo wysylasz text albo html (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jak sie myle to prosze o linka do dokumentacji:)
Go to the top of the page
+Quote Post
Wolfie
post
Post #5





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Mysle ze jest mozliwe bo wlasnie przerabiam ksiazke pod tytulem : "PHP5, Apache i MySQL od podstaw" no i ten kod jest zaczerpniety z tej wlasnie ksiazki wiec mysle ze autorzy by nie popełnili takiego błedu sadzac po przeczytaniu ich krotkiego zyciorysu zawarego w ksiazce.

Poza tym jest takze przyklad w dokumantacji funkcji mail()

NIe wiem jak sie odsyla do dokladnej linijki za pomoca linku ale w przykładach implementacji funkcji mail() jest to wyraznie napisane, tytuł przykładu to Geoff in Montreal 01-May-2007 10:07

Wiec uwazam ze jest to jak najbardziej mozliwe (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

---------------------
juz wiem jak sie odsyla do dokladnego przykladu zapraszam tutaj :
Przykład

---------------------------------
Tylko dlaczego przychodzi mi pusty mail ?

Ten post edytował Wolfie 19.05.2009, 15:10:34
Go to the top of the page
+Quote Post
maly_swd
post
Post #6





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


ten przyklad z php.net dziala, Ale i tak wyswietla w htmlu (poniewaz ten sposob to alternatywa dla czytnikow, jak ma wyswietlac w txt to bierze z txt a jak w html to html;)

w Twoim przykladzie sa bledy, powinno byc tak..
ale nie chce mi sie sprawdzac dokladnie, sprawdz sam z php.net -tamto dziala

  1. <?php
  2. $this->headers = 'MIME-Version: 1.0'."r\n";
  3.                   $this->headers = 'Content-type: multipart/alternative; boundary='.$_boundary."\n";
  4.                  
  5.                   $this->message = 'Jest to komunikat wieloczęściowy w formacie MIME\n';
  6.                   $this->message .= "--$_boundary\n";
  7.                   $this->message .= 'Content-Type: text/plain; charset=utf-8'."\n";
  8.                   $this->message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
  9.                   $this->message .= $this->body."\n";
  10.                   $this->message .= "--$_boundary\n";
  11.                   $this->message .= 'Content-Type: text/html; charset="utf-8'."\n";
  12.                   $this->message .= 'Content-Transfer-Encoding: 8bit\n\n';
  13.                   $this->message .= $this->htmlbody."\n";
  14.                   $this->message .= "--$_boundary--";
  15. ?>
Go to the top of the page
+Quote Post
Wolfie
post
Post #7





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Po Twojej poprawce doszedl mi mail z załącznikiem o nieokreslonym formacie

Otworzyłem załącznik a w srodu znajdowało sie to :

Cytat
Jest to komunikat wieloczęściowy w formacie MIME\n--
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

To czystotekstowy fragment listu
--
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit\n\n<h1>Test z użyciem tekstu HTML!</h1>
----


Czyli cos sie poprawilo ale nie tak jak powinno (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

---------------------------------------------------------------
A bylo to spowodowane bo przez przypadek skasowalem zmienna $_boundary

Teraz razem ze zmienna ciagle dochodzi pusta wiadomość

Zreszta tak jak mowilem testowalem juz rozne wartianty jesli chodzi o znaczniki \n\n, \r\n itp itd i nic to nie dalo
Moze jakies inne pomysly ?

Ten post edytował Wolfie 19.05.2009, 16:38:38
Go to the top of the page
+Quote Post
maly_swd
post
Post #8





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


nie kazdy czytnik (program pocztowy) obsluguje tego typu zabiegi:)

np outlook (pelen, nie expres). Wyswietla mi taka wiadomosc w HTMLu i nie mam alternatywnego (tzn zalacznik lub cos w ten desen).
Go to the top of the page
+Quote Post
Wolfie
post
Post #9





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Czyli u Ciebie ten kod dziala poprawnie ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.08.2025 - 15:25