Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]IMAP i GMAIL - problem z polskimi znakami.
Forum PHP.pl > Forum > PHP
wuj_stach
Witam,

Mam funkcję, która wyświetla listę wiadomoścci w skrzynce pocztowej, jest jednak mały problem pobiera wiadomości z Gmail ale niestety bez polskich znaków, podpowie mi ktoś jak przerobić tą funkcję żeby pobierała wiadomości z polskimi znakami. Pytałem w dziale "Przedszkole" ale niestety tam nikt nie jest w stanie mi pomóc. Może w tym dziale ktoś mi pomoże, Z góry wielkie dzięki.

To ta funkcja:

  1. function display_list($auth_user, $accountid)
  2. {
  3.  
  4. global $table_width;
  5.  
  6. if(!$accountid)
  7. {
  8. echo 'Nie Wybrano Żadnego Konta <br /><br /><br /><br /><br /><br />.';
  9. }
  10. else
  11. {
  12.  
  13. $imap = open_mailbox($auth_user, $accountid);
  14.  
  15. if($imap)
  16. {
  17. echo "<table width = $table_width cellspacing = 0
  18. cellpadding = 6 border = 0 align = center>";
  19.  
  20. $headers = imap_headers($imap);
  21.  
  22. $messages = sizeof($headers);
  23. for($i = 0; $i<$messages; $i++)
  24. {
  25. echo '<tr><td bgcolor = "';
  26. if($i%2)
  27. echo '#ffffff';
  28. else
  29. echo '#ffffcc';
  30. echo '"><a href ="index.php?action=view-message&messageid='.($i+1).'">';
  31. echo $headers[$i];
  32. echo "</a></td></tr>\n";
  33. }
  34. echo '</table>';
  35. }
  36. else
  37. {
  38. $account = get_account_settings($auth_user, $accountid);
  39. echo 'Otwarcie Skrzynki '.$account['Niemożliwe'].'.<br /><br /><br /><br />';
  40. }
  41. }
  42. }


A tak wyglądają wiadomości:

U 1)14-Nov-2009 =?ISO-8859-2?Q?Zesp= =?ISO-8859-2?Q?Dost=EAp_d (1808 chars)
U 2)14-Nov-2009 =?ISO-8859-2?Q?Zesp= =?ISO-8859-2?Q?Zaimportuj (2598 chars)
U 3)14-Nov-2009 =?ISO-8859-2?Q?Zesp= =?ISO-8859-2?Q?Dostosuj_G (2222 chars)


Z góry wielkie dzięki za pomoc.
akaz
Witam,
użyj funkcji imap_utf8.

W Twoim przypadku powinieneś zastosować ją w ten sposób:
  1. (...)
  2. echo imap_utf8($headers[$i]);
  3. (...)



Pozdrawiam!
wuj_stach
Hey,

Niestety nie bardzo to pomogło jedyne co się zmieniło to zamieniło wszystko na duze litery:

U 1)14-NOV-2009 =?ISO-8859-2?Q?ZESP= =?ISO-8859-2?Q?DOST=EAP_D (1808 CHARS)
U 2)14-NOV-2009 =?ISO-8859-2?Q?ZESP= =?ISO-8859-2?Q?ZAIMPORTUJ (2598 CHARS)
U 3)14-NOV-2009 =?ISO-8859-2?Q?ZESP= =?ISO-8859-2?Q?DOSTOSUJ_G (2222 CHARS)
U 4)14-NOV-2009 =?ISO-8859-2?Q?=A3UK WIADOMOSC TESTOWA (1909 CHARS)

Ma ktoś jakieś inne koncepcje. Z góry wielkie dzięki.

Pozdrawiam
akaz
A mam pytanie, z jakiej biblioteki do obsługi IMAP korzystasz?
Bo tak trochę na tą domyślną bibliotekę IMAP to trochę mi nie wygląda.

Przetestowałem imap_utf8 na tym kodzie:
  1. <?php
  2. /* connect to gmail */
  3. $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
  4. $username = 'user@gmail.com';
  5. $password = 'pass';
  6.  
  7. /* try to connect */
  8. $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
  9.  
  10. /* grab emails */
  11. $emails = imap_search($inbox,'ALL');
  12.  
  13. /* if emails are returned, cycle through each... */
  14. if($emails) {
  15.  
  16. /* begin output var */
  17. $output = '';
  18.  
  19. /* put the newest emails on top */
  20. rsort($emails);
  21.  
  22. /* for every email... */
  23. foreach($emails as $email_number) {
  24.  
  25. /* get information specific to this email */
  26. $overview = imap_fetch_overview($inbox,$email_number,0);
  27.  
  28.  
  29. /* output the email header information */
  30. $output.= "Toggler: ".($overview[0]->seen ? 'read' : 'unread')."\n";
  31. $output.= "Subject: ".imap_utf8($overview[0]->subject)."\n";
  32. $output.= "From:".$overview[0]->from."\n";
  33. $output.= "Date: ".$overview[0]->date."\n";
  34. $output.= "\n\n\n ";
  35. }
  36.  
  37. echo $output;
  38. }
  39.  
  40. /* close the connection */
  41. imap_close(nbox);
  42. ?>


Otrzymywałem ten sąm błąd, co Ty:
From:=?ISO-8859-2?Q?Zesp=F3=B3_Gmaila?= <mail-noreply@google.com>

Lecz po dodaniu funkcji imap_utf8 w tej linijce:
$output.= "From:".imap_utf8($overview[0]->from)."\n";
wynik wyglądał już poprawnie:
From:ZESPOŁ GMAILA <MAIL-NOREPLY@GOOGLE.COM>.

Więc jak narazie widzę dwa wyjścia:
* przesiąść się na domyślną bibliotekę imap,
* poszukać w dokumentacji Twojej biblioteki podobnej funkcji

Pozdrawiam!
wuj_stach
Z tego co mi się wydaje to korzystam ze standardowej biblioteki imap. Korzystam z Xamppa i nic nie modyfikowałem w tej bibliotece, wiec chyba wszystko ok.
akaz
Hmm, nie mogę nigdzie znaleźć opisu funkcji z Twojego kodu w dokumentacji php,
a podczas uruchamiania kodu dostaję błędy, że te funkcje nie istnieją.
Gdzie znalazłeś te wszystkie funkcje i opis biblioteki?
wuj_stach
To nie jest funkcja z dokumentacji php. To jest funkcja utworzona w celu pobierania listy wiadomości więc nie znajdziesz jej opisu w dokumentacji. Ona jest później wywoływana w innym miejscu właśnie w celu wyświetlenia listy wiadomości.

  1. case 'view-message' :
  2. {
  3. display_list($_SESSION['auth_user'],
  4. $_SESSION['selected_account']);
  5. break;
akaz
Ah, że też się nie domyśliłem, że może to być Twoja funkcja.

A spróbuj użyć jeszcze funkcji imap_mime_header_decode
przy echo $headers[$i];,
a jeśli to nie podziała, spróbuj przerobić kod który podałem do swoich potrzeb.
wuj_stach
Hey,

Mam prośbę, podpowiesz mi jak przerobić tą moją funkcję żeby korzystała z funkcji imap_mime_header_decode. Twoją udało mi się przerobić i fajnie to działa, niestety nie bardzo wiem jak się zabrać za moją funkcję.

  1. <?php
  2. /* connect to gmail */
  3. $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
  4. $username = 'login@gmail.com';
  5. $password = 'haslo';
  6.  
  7. /* try to connect */
  8. $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
  9.  
  10. /* grab emails */
  11. $emails = imap_search($inbox,'ALL');
  12.  
  13. /* if emails are returned, cycle through each... */
  14. if($emails) {
  15.  
  16. /* begin output var */
  17. $output = '';
  18.  
  19. /* put the newest emails on top */
  20. rsort($emails);
  21.  
  22. /* for every email... */
  23. foreach($emails as $email_number) {
  24.  
  25. /* get information specific to this email */
  26. $overview = imap_fetch_overview($inbox,$email_number,0);
  27.  
  28.  
  29. /* output the email header information */
  30. //$output.= "Toggler: ".($overview[0]->seen ? 'read' : 'unread')."\n";
  31. $output.= "Subject: ".($overview[0]->subject)."\n";
  32. $output.= "From:".$overview[0]->from."\n";
  33. $output.= "Date: ".$overview[0]->date."\n";
  34. $output.= "\n\n\n ";
  35. }
  36.  
  37. //echo $output;
  38.  
  39. $elements = imap_mime_header_decode($output);
  40. for ($i=0; $i<count($elements); $i++) {
  41. echo "Charset: {$elements[$i]->charset}\n";
  42. echo " {$elements[$i]->text}\n\n";
  43. }
  44.  
  45.  
  46. }
  47.  
  48. /* close the connection */
  49. imap_close($inbox);
  50. ?>
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.