Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z kodowaniem wiadomości IMAP
Forum PHP.pl > Forum > Przedszkole
tomatow
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ć?
erix
No to przekoduj te maile na UTF-8, w czym problem?
tomatow
Próbowałem
  1. $body = utf8_encode($body);


Efekt bez zmian.
wNogachSpisz
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.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.