Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z kodowaniem wiadomości IMAP
tomatow
post 16.02.2012, 14:19:46
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.02.2012

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


Cześć!
To mój pierwszy post, więc nie obrażę się na żadne uwagi i porady. Co do problemu szukałem informacji przez parę ostatnich dni i nie znalazłem nic, co by mi pomogło. A jak już coś znalazłem, to nie do końca rozumiałem. Moja znajomość php jest raczej mierna. Strona jaką robię to bardziej frankenstein, który jest pozlepiany z wielu elementów, które odnajduję w sieci. Działa, ale estetyki i zaawansowania temu zdecydowanie brakuje. Do rzeczy.

Mój toporny skrypt to część strony, która zajmuje się w firmie obsługą serwisów. Wybrana część ma za zadanie sprawdzić w skrzynce mailowej, które wiadomości pochodzą od klienta, którego dotyczy dane zgłoszenie serwisowe. Identyfikuje je po adresie e-mail, a następnie wpisuje do tabeli bazy danych, w której zapisywane są treści maili. Problem dotyczy kodowania wiadomości. Otóż kiedy wiadomość została wysłana w UTF-8 wszystko jest ok. Kiedy kodowanie określone jest jako ISO-8xxx albu Undefined wted pojawiają się problemy. Zamiast polskich znaków są znaki zapytania. Jeśli zmienię kodowanie pól w bazie danych na UTF-8, wtedy wiadomości e-mail nie w UTF-8 są zapisywane jedynie do pierwszego polskiego znaku w treści. Poniżej kod:
  1. <?php
  2. include 'config.php';
  3.  
  4. $mbox = imap_open("{serwer:143}INBOX", "adres", "haslo");
  5. $ile = imap_num_msg($mbox);
  6. mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
  7. mysql_query('SET NAMES utf8');
  8. mysql_query('SET CHARACTER_SET utf8_unicode_ci');
  9.  
  10. $query = "SELECT id, imail FROM zgloszenia WHERE status != 'Zakończone'";
  11. $result = mysql_query($query);
  12. while($r=mysql_fetch_array($result)) {
  13. for($i=1;$i<$ile;$i++) {
  14. $header = imap_header($mbox, $i);
  15. $from = $header->from;
  16. foreach ($from as $id => $object) {
  17. $fromname = $object->personal;
  18. $fromaddress = $object->mailbox . "@" . $object->host;
  19. }
  20. if($fromaddress == $r[imail]) {
  21. $body = imap_fetchbody($mbox, $i, "1.1");
  22. if ($body == "") {
  23. $body = imap_fetchbody($mbox, $i, "1");
  24. }
  25. $data = $header->date;
  26. $body = quoted_printable_decode($body);
  27. $body = nl2br($body);
  28.  
  29. mysql_query("INSERT INTO maile_klientow (id, id_zgloszenia, data, tresc) VALUES ('NULL', '$r[id]', '$data', '$body')");
  30. };
  31. };
  32. };
  33. imap_close($mbox);
  34. ?>


Możecie mnie jakoś nakierować?
Go to the top of the page
+Quote Post
erix
post 16.02.2012, 16:40:45
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No to przekoduj te maile na UTF-8, w czym problem?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tomatow
post 16.02.2012, 17:37:24
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.02.2012

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


Próbowałem
  1. $body = utf8_encode($body);


Efekt bez zmian.
Go to the top of the page
+Quote Post
wNogachSpisz
post 16.02.2012, 18:44:09
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Pamiętam, kiedyś niemiłosiernie męczyłem się z imap_*(). Ostatecznie poszedłem po rozum do głowy i zaprzyjaźniłem się z http://pear.php.net/package/Mail_IMAPv2 Od tamtego czasu -- zero problemów.

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 15:48