MIME levelekkel meggyűlt a bajom

MIME levelekkel meggyűlt a bajom

Hozzászólások

már megint valami charset problem... egyszerűen annyi van, hogy nem győzök megoldásokat találni.
Remélem ezzel már valakinek maggyűlt a baja és megosztja velem:
[code:1:867d21bff3]=?ISO-8859-1?Q?Bogl=E1rka_G=E1losi?=[/code:1:867d21bff3]
ez a from address..
[code:1:867d21bff3]print $headers->fromaddress." <".$headers->reply_toaddress.">";[/code:1:867d21bff3]
így iratom ki.. nem kell valamilnye kódoláson átengedni, hogy rendesen megjelenjen? az oldal maga ISO-8859-2 charsetű.

[quote:fb683cb02f="unuser"][code:1:fb683cb02f]kt=FBnhet, de az, aki nekem k=FCldte, lassan =E1t=E9rezte az = =FCzenet=E9t. N=E9zz=FCk megk=F6z=F6sen, hogy m=FBk=F6dik-e.ANGYALOK IGENIS= L=C9TEZNEK, de, mivel nem mindig van sz=E1rnyuk, nem ismerj=FCk fel=F5ket.= Ezeket a sz=E1rny n=E9lk=FCli [/code:1:fb683cb02f]
Mármint, hogy ilyen nagyon jól jelenik meg a levél tartalma. Ez mindek köszönhető? Kiiratás elött html_entity_decode -on engedem át a leveleket.

Az entity decode keves lesz (az csak a HTML entityket oldja fel gondolom, mint pl. az   ", stb.). A megfelelo codepage konverziot is el kell vegezni a karakter streamen. Vagyis valahol a levelben megvan annak az encodingja, es azt vagy azzal az encodinggal is kell megjeleniteni, vagy egy mappelest kell csinalni a ket charset kozott. (Igazabol egy ilyennek az eredmenyet latod, ha nem tevedek - a level karaktereit atmappelve a konzolod default charsetjebe.)
[quote:fb683cb02f="unuser"]már megint valami charset problem... egyszerűen annyi van, hogy nem győzök megoldásokat találni.
Remélem ezzel már valakinek maggyűlt a baja és megosztja velem:
[code:1:fb683cb02f]=?ISO-8859-1?Q?Bogl=E1rka_G=E1losi?=[/code:1:fb683cb02f]
ez a from address..
[code:1:fb683cb02f]print $headers->fromaddress." <".$headers->reply_toaddress.">";[/code:1:fb683cb02f]
így iratom ki.. nem kell valamilnye kódoláson átengedni, hogy rendesen megjelenjen? az oldal maga ISO-8859-2 charsetű.

De, mivel ugy tunik az address mezo ellenben ISO-8859-1 charsettel rendelkezik.

HTH:
Babszem.

A nem-ascii karakterábrázolást illetően az RFC 2047 a te barátod. Bár érdemes átnézni 2045-től 2049-ig a többit is...

[quote:747e05a8f1="gsimon"]A nem-ascii karakterábrázolást illetően az RFC 2047 a te barátod. Bár érdemes átnézni 2045-től 2049-ig a többit is...

és mit csináljak a barátommal? mármint, hogyan tudom használni, hogy rendesen megjelenítse a dolgokat?

Kb. valami olyasmit, hogy ha egy egyenlőségjel után kétjegyű hexa számot találsz, akkor ezt a három karaktert kivágod és a helyére az olyan kódú karaktert teszed. Gyakorlatban persze elég a space-szel és az ékezetes betűkkel törődni (1 + 2*9 db), ez egyszerű cserével megoldható, pl. "=20" -> " ", "=FC" -> "ü", "=E1" -> "á", "=E9" -> "é", "=FC" -> "ü", "=F6" -> "ö", "=FB" -> "ű", "=C9" -> "É", "=F5" -> "ő", stb. A sorvégi önálló "=" azt jelenti, hogy ott igazából nem volt sortörés, csak az elkódolt sor túl hosszú lett volna, ezért lett mégis megtörve, azaz ki kell venni, és a sort összeolvasztani a rá következővel.
Persze mindezt csak akkor, ha a szöveg tényleg így van kódolva, azaz fejlécében van ilyesmi:
[code:1:e0110c9086]
Content-Transfer-Encoding: quoted-printable
[/code:1:e0110c9086]
Mondjuk a teljes dekódolás sem egy ördöngösség, csak akkor karakterenként kell végigmenni a stringen, elemezni a számokat, és helyettesítgetni. Hogy php-ben van-e már erre előregyártott függvény, azt nem tudom, érdemes lenne a "quoted-printable"-re rákeresni, aztán hátha...

gugli keresés: +php +decode +"quoted-printable"
első találat: http://aspn.activestate.com/ASPN/docs/PHP/function.quoted-printable-decode.html

php.net keresés: quoted-printable
első találat: http://hu.php.net/manual/en/function.quoted-printable-decode.php

hát, próbáltam én már mindenhogyan. Asszem csak akkor fog sikerülni, ha én magam is megértem, hogy mi alapján készülnek el a MIME levelek, majd rendesen tudom használni az imap_fetchstructure vagy imap_fetchbody függvényeket. És nem kell az imap_headerinfo -t és az imap_body -t. Könnyebb lesz az életem asszem..
Amúgy még mindig [code:1:c9653841b1]=?x-unknown?B?QmFs4XpzIEJvZPM=?=[/code:1:c9653841b1] a küldője némelyik levélnek.

[quote:3c9c431377="unuser"]Amúgy még mindig [code:1:3c9c431377]=?x-unknown?B?QmFs4XpzIEJvZPM=?=[/code:1:3c9c431377] a küldője némelyik levélnek.

Hmm, az 'x-unknown' kódolás gyanús, mindenesetre a 'QmFs4XpzIEJvZPM=' az base64-dekódolva 'Balázs Bodó' :)...

wov cool... ha azokat a leveleket is decodolom, amik nincsenek kódolva, akkor mi lesz? semmi igaz?

mondjuk magam is kitaláltam a választ.. egyszerűen megnézetem nahy mind1.

azt szeretném kérdezni,hogy lehet az, hogy egyes e-maileknél a fromaddress és a reply_toaddress ugyan az és nem egy e-mailcím, hanem mondjuk a említette X Y? Akkor hogyan tudom meg az e-mailcímét? Meg lenne egy olyan kérdésem is, hogy:
[code:1:c2b101a771]
fromaddress (full from: line, up to 1024 characters)
from[] (returns an array of objects from the From line, containing):
personal
adl
mailbox
host[/code:1:c2b101a771]
ezt a refet találtam a php.net -en. ha a $headers->fromaddress-re hivatkozom, akkor ügy kiír, amit kiír, de amikor így csinálom, hogy $headers->from[0] vagy $headers->from['personal'] akkor nem ír ki semmt vagy error.. de akkor hogyan tudok azokra hivatkozni? remélem érthető volt a probléámám.

Üdv mindnekinek

kicsit untam a fejem, meg gondoltam, itt van ez az infó verseny, amit a sztech tanárom mondott, összerakok valamit. Megjött az elhatározás, és nekiültem vala. Ám alig egy nap múlva jöttek az első olyan problémák, amit nem tudok megoldani. Méghozzá a MIME levelek kezelése. Minden tudásomat latba vetve és a profi programozókét, akik a PEAR-t fejlesztik addig jutottam, hogy HTML és csak szöveg tartalmú leveleket faján meg tudom jeleníteni. Ámda a helyzet az, hogy van olyan levél, amiben így is és úgy is el van küldve a dolog, amikkel nem tudok mit kezdeni.
Általában egy ilyet kapok:
[code:1:ba53fc8049]This is a multi-part message in MIME format. Ez egy tobb reszbol allo, MIME formatumu level. --9258-16772-2285-1130424448 Content-type: text/plain Content-Transfer-Encoding: quoted-printable A leger=F5sebb k=EDv=E1ns=E1gAmikor a J=F3[/code:1:ba53fc8049]
és text/plain helyett text/html van xy sorral lejjebb, ugyan úgy megjelenítve. Hogyan tudom kiválasztani, hogy csak az egyiket, mondjuk a HTML-eset vagy csak a szövegeset jelenítse meg?Apropó... Ezzel tudok valamit kezdeni?
[code:1:ba53fc8049]kt=FBnhet, de az, aki nekem k=FCldte, lassan =E1t=E9rezte az = =FCzenet=E9t. N=E9zz=FCk megk=F6z=F6sen, hogy m=FBk=F6dik-e.ANGYALOK IGENIS= L=C9TEZNEK, de, mivel nem mindig van sz=E1rnyuk, nem ismerj=FCk fel=F5ket.= Ezeket a sz=E1rny n=E9lk=FCli [/code:1:ba53fc8049]
Mármint, hogy ilyen nagyon jól jelenik meg a levél tartalma. Ez mindek köszönhető? Kiiratás elött html_entity_decode -on engedem át a leveleket.

Jön a következő probléma...
Itt van nekem ez a scriptem
[code:1:f82825e1dc]$list = imap_list($mbox, $host, "*");
if (is_array($list)) {
reset($list);
while (list($key, $val) = each($list)) {
echo imap_utf7_decode($val) . "<br />\n";
}
} else {
echo "imap_list failed: " . imap_last_error() . "\n";
}
[/code:1:f82825e1dc]
és ez
[code:1:f82825e1dc] $folders=imap_list ($mbox, $host, "%" );
if (is_array($folders)){
reset ($folders);
}
print $folders[0];
foreach ($folders as $ertek) {
print $ertek." | ";
}
[/code:1:f82825e1dc]
utóbbit én írtam, az elsőt a php.net-ről copyztam. Ami az érdekes, hogy egyik sem működik, sőt se error se warning nincsen. Egyszerűen csak nincsen output vagy visszatérési érték. Mi lehet a probléma?

Sikerült megoldanom, minden karakteres problémát. Íme:
[code:1:de86c1831b] function mime_decode($s){
$elements = imap_mime_header_decode($s);
for($i = 0;$i < count($elements);$i++) {
$charset = $elements[$i]->charset;
$text =$elements[$i]->text;
if(!strcasecmp($charset, "iso-8859-2"))
{
$text = iconv($charset, "iso-8859-2", $text);
}
$decoded = $decoded . $text;
}
return $decoded;
}
[/code:1:de86c1831b]
Igaz, ez még csak a header részt tudja decodolni, de kicsit változtatással az egész üzenetet is tudja.