|
|
By SUF on
2005. 09. 28. 13:05
Sok más egyéb mellett elkezdtem belepiszkálni némi statisztika gyártásba az Exchange Store-ra vonatkozóan. Miután levelekre, csatolmányokra időpontokra vonatkozó adatokra van szükségem, kénytelen vagyok beleolvasni a mailboxokba. Ezt tehetném WebDav-al, vagy az Exchange OLE DB providerrel ADO-n keresztül. Ez utóbbit választottam, mert ezzel már játszottam korábban. Úgy gondoltam, hogy tesztelgetni egyszerűbb a kliens oldalon, így elindítottam az első kis tesztprogramomat, ami valami ilyesmi volt:
BaseURLStr = "http://mail1/exchange/zoli/";
Folder = "Inbox";
var SelectStr;
var ExchConn = new ActiveXObject("ADODB.Connection");
var ExchRS = new ActiveXObject("ADODB.Recordset");
SelectStr = "SELECT \"DAV:displayname\", "+
"FROM SCOPE('SHALLOW TRAVERSAL OF \"" +
encodeURI(BaseURLStr + Folder) + "\"') "+
"WHERE \"DAV:ishidden\" = false";
ExchConn.Provider = "ExOLEDB.DataSource";
ExchConn.Open(BaseURLStr);
ExchRS.Open(SelectStr, ExchConn);
for(;!ExchRS.EOF;ExchRS.MoveNext())
{
WScript.Echo(ExchRS.Fields("DAV:displayname").Value);
}
ExchRS.Close();
ExchConn.Close();
Meglepetten tapasztaltam a következő hibaüzenetet:
ADODB.Connection: Provider cannot be found. It may not be properly installed.
Hoppá, ezek szerint az ExOLEDB provider csak az Exchange szerveren van telepítve. Elkezdtem túrkálni a neten, hogyan lehetne felrakni ezt a kliensre. Arra jutottam, hogy sehogy. Helyette az MSDAIPP providert lehet használni. Ezek után a fenti kód egyetlen sorában módosul:
ExchConn.Provider = "ExOLEDB.DataSource";
helyett
ExchConn.Provider = "msdaipp.dso";
Ezzel a kliens oldalról is el lehet érni a szervert, mindösszesen arra kell odafogyelni, hogy csak a http:// uri-t szabad használni a file:// uri-t nem.
Infók hozzá:
|
|
|
By SUF on
2005. 09. 22. 9:57
Ilyet nem szoktam írni, de mostmár piszokul bosszant. Ismét rájöttem, hogy az internet szolgáltatónk a T-Offline (http://www.domain.hu/domain/domainsearch/?domain=t-offline&tld=hu). Megint nincs netünk, bérelt vonalon rengeteg pénzért. Unom. (Ezt a PDAmról írom)
|
By SUF on
2005. 09. 21. 15:24
Egy régi problémám volt az, hogy hogyan találjunk meg egy felhsználót az Active Directoryban az e-mail címe alapján. Volt erről egy hosszú thread a technetklub levlistán ( http://listmanager.technetklub.hu/read/messages?id=122959) amiből az derült ki, hogy valamelyik proxyAddress alapján nehéz megtalálni a felhasználót, ráadásul lassú is. A probléma alapja, hogy azt gondoltom (gondoltuk többen), hogy a proxyAddresses propertyben nem lehet keresni mert az egy multivalue property. Már tervezgettem, hogy írok valami szolgáltatást a dologra. Egy progi megadott időközönként végigtúrja az AD-t épít belőle egy adatbázist amiben utána én tudok gyorsan keresni.
...use objectCategory rather than objectClass because objectCategory is single-valued and ideal for servicing search requests...
Várjunk csak, ezek szerint lehet multivalue propertyben keresni. Kipróbáltam. Íme az eredmény:
var SearchMail = "test@domain.hu";
var ADConnect = new ActiveXObject("ADODB.Connection");
var ADCommand = new ActiveXObject("ADODB.Command");
var rootDSE, ForestRoot, ADRS;
rootDSE = GetObject("LDAP://rootDSE");
ForestRoot = rootDSE.Get("rootDomainNamingContext");
ADConnect.Open("Provider=ADsDSOObject;");
ADCommand.ActiveConnection = ADConnect;
ADCommand.CommandText = "
|
By SUF on
2005. 09. 20. 12:10
Az elmúlt két hétben szabadidőmben leginkább a már korábban emlegetett listaszerverrel kapcsolatos kódokat, adatbázist reszelgettem. Sikerült összehoznom egy egész jó kis storage engine-t (kidobálja a duplikált csatolmányokat, opcionálisan tömörít, opcionálisan fájlban, vagy az adatbázisban tárolja a levelet). Most elkezdtem játszani a levél fogadással és küldéssel. Ennek kapcsán az egyik igen érdekes probléma, hogy hogyan kezeljük a válaszleveleket, a thread-hierarchiát. Azt látom, hogy a lyris hol megtalálja az összetartozó darabokat, hol nem. Én szeretném elérni, hogy ez a dolog ne legyen ennyire esetleges. Egyenlőre a következő ötleteim voltak:
1. A levél fejlécében lévő Reply-To: mezőbe nem az adott levlista címét írom, hanem valamit amivel azonosítani tudom a levelet. Ilyesmire gondoltam a_levél_adatbázisbeli_guid-ja@lista_domainneve . Ez ugye reply esetén egész pontosan azonosítja az eredeti levelet, ugyanakkor ha valaki normál levél küldéshez véletlenül ezt a címet használja akkor az alaposan összekavarhatja a dolgokat. Ezt az ügyet egyenlőre félretettem, arra az esetre ha nem lesz más megoldás.
2. Használom az RFC-ben megadott Message-ID:, In-Reply-To:, References: mezőket. Az RFC-822 -ben úgy tűnik, hogy ez opcionális az RFC-2822 -ben mintha kötelező lenne. Biztos az én angol tudásommal van baj, de ebből nem tudom eldönteni (23.oldal 3.6.4-es pont):
Though optional, every message SHOULD have a "Message-ID:" field. Furthermore, reply messages SHOULD have "In-Reply-To:" and "References:" fields as appropriate, as described below. ...
Azt értem, hogy igazából ezt kellene használni, de megnézve a lyris-es leveleket igen kevésben találtam meg az In-Reply-To: mezőben a szülő levél azonosítóját, ráadásul az Exchange 2003 / Outlook 2003 páros sem teszi bele a levélbe.  (Valaki megmondhatná, hogy valójában ezt kötelező-e megcsinálni és ha igen akkor az Exchange/Outlook miért nem teszi? Vagy ha teszi akkor nekem miért nem?)
3. Találni valami olyan fejlécmezőt ami a levél továbbítását nem befolyásolja, viszont reply esetén benne marad. Ezt kipróbáltam egy általam kreált X- mezővel, de nem működött.
4. Belegenerálok valamit a levél szövegébe és amikor visszajött akkor megkeresem benne. Ezzel több bajom is van. Mi van akkor, ha több ilyen van benne? Mi van a digitálisan aláírt levelekkel (ugye ezeket nem szabad módosítani, ezt sajnos nem minden listaszerver tartja be).
Egyenlőre tanácstalan vagyok, keresem tovább a megoldást.
|
By SUF on
2005. 09. 18. 19:26
Ma elszórakoztam egy rég problémám megoldásával. Az oldalamon két helyen is használtam a WMI repositoryba fordított mof fájl olyan eseménykezelőkhöz amik a rendszer újraindítása után is tovább működnek:
http://www.gomori.hu/elog_db_hu.htm
http://www.gomori.hu/storesize_hu.htm
Felmerült az a kérdés, hogy mi van akkor, ha el szeretnénk távolítani az így regisztrált eseménykezelőt. Eddig csak egy Microsoft WMI adminisztrációs eszközzel, kézzel tudtam eltávolítani. Most elkövettem egy eszközt ami képes ezt eltávolítani. Majd később az oldalra is ki fogom rakni. Ez a fentiek közül az elsőhöz készült.
A kód innen tölthető le
|
By SUF on
2005. 09. 13. 20:04
Pár napja írtam már a fenti címről. Akkor úgy gondoltam, hogy egy JScript példa elég lesz. Közben rájöttem, hogy .Net környezetben ez kevés (a típusosság miatt jóval több dolgot meg kell adni). Ezért most itt egy C# metódusként megírt példa (a referenciák közé fel kell venni az ADO és a CDO COM Objektumokat):
public static CDO.Message LoadMsgFile(string FileName)
{
CDO.Message Msg = new CDO.MessageClass();
ADODB.Stream MsgStream = new ADODB.Stream();
MsgStream.Type = ADODB.StreamTypeEnum.adTypeBinary;
MsgStream.Open((object)System.Type.Missing,
ADODB.ConnectModeEnum.adModeUnknown,
ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified,
"","");
MsgStream.LoadFromFile(FileName);
Msg.DataSource.OpenObject(MsgStream,"_Stream");
return Msg;
}
|
By SUF on
2005. 09. 12. 7:41
Abba a problémába futottam a levlista program fejlesztgetése során, hogy hogyan dolgozzuk fel azokat a leveleket amik az SMTP szerver drop könyvtárába érkeznek, vagy bármilyen más MIME formátumú levelet. Ha ez a levél eml kiterjesztéssel rendelkezik és egyszerűen rákattintunk akkor jön az Outlook Express és megmutatja a levelet. Természetesen ha programból kell csinálnunk valamit vele, akkor ez nem lesz ilyen egyszerű. Például mi van akkor, ha szükségünk van egy From egy To vagy egy Subject mezőre? Esetleg a levél törzsét (HTML Body) szeretnénk letárolni egy adatbázisba?
Megtehetjük azt, hogy reguláris kifejezésekkel kiszedjük a fájlból amire szükségünk van. Megtehetjük, hogy írunk egy feldolgozó programot ami megfelelően szétszedi a levelet az igényeinknek megfelelően. Egyik megoldás sem egyszerű, ráadásul szükségtelen. A Microsoftnak van egy megfelelő objektum könyvtára erre. Ez a CDO (vagy CDOEX).
A feladatunk annyi, hogy a levelet betültsük egy CDO.Message objektumba. Ezzel csak egy probléma van. Ez az objektum nem kínál közvetlenül olyan lehetőséget, hogy fájlból betöltsük a tartalmát. Ezért azt tehetjük meg, hogy a fájlt megnyitjuk egy ADODB.Stream-ként és ezt adjuk meg adatforrásként a CDO.Message objektumnak. Ez JScriptben így fog kinézni:
function LoadMsgFile(FileName)
{
var adTypeBinary = 1;
var Msg;
var MsgStream;
Msg = new ActiveXObject("CDO.Message");
MsgStream = new ActiveXObject("ADODB.Stream");
MsgStream.Type = adTypeBinary;
MsgStream.Open();
MsgStream.LoadFromFile(FileName);
Msg.DataSource.OpenObject(MsgStream,"_Stream");
return Msg;
}
|
By SUF on
2005. 09. 08. 12:14
Amióta a technetklub levelezőlista a régi (gyanítom Exchange OWA tetejére fejlesztett) verziójából átkerült a Lyris-re azóta foglalkoztat, hogy érdemes lenne írni egy levlista motort.
A Lyris rossz (Nem szeretnék ennél csúnyábbat leírni, bár lenne kedvem. Mindenkinek a piszkos fantáziájára bízom).
A múltkori Geek Dineren feldobtam, mint a technetklubos közösség összekovácsolására használható eszközt, hogy mi lenne, ha a listán lévő emberkék közösen fejlesztenének egy levlista motort és a Microsoft mögé állna. Lehet, hogy én vettem le rosszul, de nem úgy néz ki, hogy ez meg fog történni.
Végeredményben oda jutottam, hogy nekem kéne ezt elkövetnem.
Folyamatosan azt érzem, hogy nagy falat ez nekem. Ugyanakkor bújkál bennem a kisördög, hogy hátha mégis képes vagyok rá. Egy nagy kupac dolog foglalkoztat a levelezés tájékán, amik mindenképp az érdekes kihívás kategóriájába tartoznak. Ezen dolgok egy jórésze egy esetleges levlista motorban is jól hasznosítható.
Belevágtam. Nem tudom mi sül ki belőle, meglátjuk.
Egyenlőre kiizzadtam magamból egy adatbázistervet, a fejemben kavarog, hogy miket kellene megvalósítani. Irogattam hozzá ezt-azt, de lehet, hogy mélyebben kellene tervezni. Meglátjuk.
Egyenlőre az eszközök amit használni akarok:
- MS SQL Server 2000
- JScript
- ASP ???
- MS SMTP Service
- Index Server ???
- CDO
Itt tartok most. Folytatás következik ... (remélem)
|
By SUF on
2005. 09. 08. 11:46
A PDAs külföldi bohóckodásaimhoz írtam, hogy kíváncsi vagyok a telefonszámlámra. Ma megérkezett az e-mail tömeg a szolgáltatótól. Félve adtam össze a saját részletezőmet.
Sok.
De ezt tudtam bár ennél többtől tartottam. 50eFt. Talán ezért még nem vernek meg a cégnél. 
|
Ahhoz, hogy megjegyzést tégy a bejegyzésekhez, regisztrálnod szükséges. Egyszerűen válaszd ki a regisztráció linket a jobb felső sarokban és add meg a szükséges információkat. Ha bejelentkeztél, fűzhetsz megjegyzést a bejegyzésekhet.
Már regisztráltál? Kattints ide a bejelentkezéshez.
|
|