|
|
Author: |
SUF |
Created: |
2008.11.26. 10:30 |
|
|
Exchange ketegória |
By SUF on
2005.07.25. 7:48
Csütörtökön Bende Imre kolléga feldobott egy magas labdát. Volt egy telefonbeszélgetésünk is ezügyben. A feladat a következő:
Van egy Exchange 2000 szerver ahol tömegesen kellene felvenni domaineket a tiltott domainek listájára.
Csak, hogy pontosan jelezzem miről is van szó, ide:
Exchange System Manager/Administrative Groups/First Administrative Group/Servers//Protocols/SMTP/Default Virtual Server, Properties, Access fül, Connection..., Add..., Domain
Ezt már megkeresni se egyszerű, hátmég tömegben felvenni ide valamit. Elkezdtem keresgélni, hogy honnan veszi a beállításokat. Végigtúrtam a metabase-t (adsutil.vbs-el), a registry-t, az AD-t és nem találtam semmit. Azután hosszas keresgélés után rájöttem, hogy csak a metabase-ben tárolja a dolgokat, bináris formában egy IPSec tipusú (semmi köze az IPSEC protokolhoz) propertyben. Ezt a tipust a fent említett adsutil.vbs nem kezeli és miután az IPSec tipusnév nem kicsit félreérthető, elsiklottam felette. Végül némi küzdés árán megszültem a dolgot. VBScript (broáf) azért lett belőle mert a JScript a VBScript tipusú tömböt (azt hiszem SafeArray-nak hívják hivatalból) csak olvasni hajlandó és írni nem. Miután az adsutilban ignorálták az IPSec típus kezelését, ezért azt vettem a fejembe, hogy írok egy olyan scriptet ami teljeskörüen kezeli. A legszebb az lenne, ha beleraknám az adsutilba, de nem tudom, hogy ezzel milyen jogi macerákat vennék magamra, amihez semmi kedvem.
Az elkészült kód innen tölthető le.
|
By SUF on
2005.07.07. 10:40
Valamikor május tájékán feldobtam egy labdát a különböző levelező rendszereink levél routolásával kapcsolatban. Akkor még nem okozott nagy gondot csak piszokul zavart. Megoldani nem tudta senki, kaptam ötleteket de egyik sem volt jó.
Néhány héttel később a dolog teljesen bedőlt. Egy nap kemény szenvedés és egy rossz éjszakai alvás árán sikerült megoldani a dolgot. A tettes elsősorban én voltam. Egy helyen A osztályu IP maszk helyett C osztályut írtam be a 10.0.0.0-ás hálóhoz a mail relay kivételei közé. Ez azért okozta a korábbiakban jelzett problémát mert azoknál a domaineknél ahol kivesszük a recipient policyban a "This Exchange Organization is responsible for..." című checkboxot a befelé jövő levél is relaynek fog számítani, mert az SMTP transport csak a domaint ellenőrzi az egyedi címet nem!!!
Ez utóbbit jó tudni. Végeredményben a sör/bor osztogatás elmarad (saját magamnak is mert alapban a saját hülyeségem) 
|
By SUF on
2005.05.24. 9:40
Tegnap írtam, hogy elkezdtem csinálni egy kis scriptet ami képes kilistázni egy Outlook elem összes tulajdonságát. Na ez nem fog elkészülni mert újra ráakadtam erre:
http://www.outlookspy.com
Egyszer már láttam, de akkor nem érdekelt különösebben mert mással foglalkoztam. A mostani feladataimhoz pontosan jó.
|
By SUF on
2005.05.21. 22:05
A napokban elkezdett rendetlenkedni az egyik régi, nem Exchange mail szerver az egyik cégünknél. Pontosabban nem elkezdett, hanem láthatóan már régen ilyen volt, csak egy hibás konfiguráció rendberakására volt szükség arra, hogy ez kiderüljön. Pontosan az történik, hogy az illető szerver néha nem veszi át a leveleket egy-két órán keresztül, utána pedig minden ok nélkül megjavul. Az adott termék nem épp egy mai gyerek, eredetileg NT4-en futott, úgy tették át a kollégák w2k3-ra, és ezen a platformon nem támogatott, akár ez is okozhatja a gondot. Arra a döntésre jutottunk, hogy nem kezdjük nyomozni az okokat, hanem megy a dolog a kukába és helyette a w2k3 beépített POP3/SMTP párosa lesz (Exchange sajnos nem lehet pénzügyi okokból). Ez már a platformváltáskor is felmerült, de akkor nem lépték meg, mert hiányoltak két funkciót, az alias-okat és az átirányítást. Én még nem néztem utána, hogy valójában tudja-e ezeket a POP3/SMTP. Most elkezdem olvasni a doksit, és gyártok némi teszt konfigurációt.
Ha nem tudom vele megoldani az említett funkciókat, akkor jön a kódgyártás, mert a fejemben már megvan, hogy az említett funkciókat hogyan lehet SMTP Sink-ben megoldani. Szóval, ha szükség lesz rájuk akkor megcsinálom és publikálom a kódot.
|
By SUF on
2005.05.21. 7:46
Épp egy Outlook Formot próbálok irogatni. Eközben belefutottam egy érdekes üzenetbe. Az ember megtervezi a formot, tesz mögé valami kódot, minden szépen ketyeg, elmennek az üzenetek, ráadásul úgy ahogy szeretném, jó is lenne, de....
Amikor megérkezik az üzenet, a másik oldalon az olvasó ablakban az üzenet szövege helyett ezt találom:
"This item contains active content that cannot be displayed in the Reading Pane. Open the item to read its contents."
Na jó, ha megnyitom a levelet akkor szépen tudom olvasni, de se én, se a felhsználók nem akarják megnyitni, úgy látszik, hogy az emberek legnagyobb százaléka az olvasó ablakban szeret levelet olvasni. Akkor keressük meg, mit követtem el, hogy ez történik. Megtaláltam:
http://support.microsoft.com/?id=241205
A cikk szerint, ha egy üzenet életrajzának bármely időpillanatában a form mögött volt VBScript kód akkor a fenti kedves üzenetet kapom. Beállít valami flag-et és ez már örökre így is marad. Hurrá! 
Kipróbáltam, hogy fogtam egy egyszerű eredeti Message formot, beleraktam a kód részébe egyetlen megjegyzést, és elküldtem a levelet rögtön látszik a fenti üzenet, tehát valóban így van és nem én vagyok a hunyó.
Csináltam két referencialevelet egy jót és egy rosszat és megvizsgáltam őket ezzel az eszközzel:
http://www.microsoft.com/downloads/details.aspx?familyid=3d1c7482-4c6e-4ec5-983e-127100d71376&displaylang=en
Azt tapasztaltam, hogy egy rakás mapi property különbözik a leveleim között, ráadásul a rossz levélben RTF!!! body van, csak tudnám minek. Gyanítom, hogy ha elkezdenék bogarászni és c/c++-ban elkövetnék valami com objektumot, akkor át tudnám állítani a dolgot. Ezzel csak két bajom van:
- Az ilyen irányú programozó ismereteim elég korlátosak, tehát nagy biztonsággal hónapjaim mennének rá, ennyit meg az egész nem ér
- Amikor publikálom a saját dolgaimat, ma még nem szívesen adok ki a kezemből se bináris kódot, se olyan forrást amihez azoknak akik olvassák az oldalamat még fordítgatnijuk kell, elvégre a dolog rendszergazdáknak és nem fejlesztőknek szól
A dolognak az lett a vége, hogy készül egy VBA makró az Outlookhoz ami megoldja azt, ami a Microsoft cikk szerint lehetetlen. 
A történet a háttérben fog generálni egy az eredetivel megegyező üzenetet, és el fogja dobni az eredetit (még nincs kész, de már működget ).
Utolsó megjegyzésként azért hozzátenném a történethez, hogy láthatóan ez a működés már az Outlook 98-ban is fennált (találtam egy 1999-es OL98-as verziót is a fenti cikkből). Drága Microsoft! Miért nem lehetett ezt röpke 6 év alatt megoldani? 
|
By SUF on
2005.05.11. 12:12
Elég régóta adminisztrálok Exchange szervereket. Sok-sok bajom volt már a levelek routolásával. Most épp egy olyan környezetünk van ahol több domainben több Exchange szerver található ráadásul nem is meinden levelező rendszer Exchange (valami régi SMTP/POP3 cucc, na meg egy Notes). Ezt megfejelve a szokásos kis Exchange Event Sinkjeimmel egy elég nagy routing gubanc jön ki.
Ma reggel a fent említett Notes-től (róla migrálunk és nem lesz már sokáig, hála istennek) át akartam tenni a levelek beérkeztetéssét arra az Exchange szerverre amire a régi Notes felhasználók levelei kerültek.
Szépen átírom a DNS-t, erre a tűzfalon csücsülő sendmail elkezd balhézni, hogy Relaying denied. Megnézem telnetből és tényleg. Eldobja az INBOUND !!! leveleket RELAYING !!! denied-al.
Na én ilyet még nem láttam.
Hogy tiszta legyen, egyszerüsítve a környezet a következő. Vegyünk két Exchange szervert, legyenek EX1 és EX2. Mind a két szerveren van két-két SMTP Virtual Server legyenek EX1_def, EX1_ext, EX2_def és EX2_ext. Legyen két domainünk local.ex és corp.local.ex. Legyen egy felhasználónk akinek mind a két domainben van címe user@local.ex és user@corp.local.ex. Van még egy Notes szerver ami eredetileg a local.ex domain leveleit kezelte. Az EX1_def és az EX2_def a 25-ös porton hallgat és a 9025-ös porton csatlakozik kifelé. Az EX1_ext és az EX2_ext a 9025-ös porton hallgat és a 25-ös porton csatlakozik kifelé. Az EX1_def-nek az EX1 a smarthostja az EX2_defnek az EX2, az EX1_ext-nek és az EX2_ext-nek a tűzfal. Na ez idáig működik is mint a kisangyal.
Most jön a gáz. Ugye a recipient policy-ban a corp.local.ex domainre be van kapcsolva az, hogy "This Exchange Organization is responsible for all mail delivery to this address" a local.ex -re pedig ki van kapcsolva. Van továbbá egy olyan SMTP Connector ami átirányítja a local.ex-es leveleket a Notes szerverre és az EX1_ext virtual serveren csücsül.
Ezek után ha az EX2-re küldök levelet akár user@loacal.ex -nek akár a user@crop.local.ex -nek akkor azt átveszi a szerver, ha az EX1-re küldök levelet a user@corp.local.ex -nek akkor azt átveszi, viszont ha az EX1-re küldök levelet a user@local.ex -nek akkor azt relaying denied-al eldobja.
Na most az a kérdés, hogy valamit rosszul konfiguráltam, vagy ez egy icipici bug az Exchange-ben?
Ez az egyész egy olyan probléma amit nem tudok megoldani. A környezet E2K3SP1.
A megfejtőnek söröket/borokat osztok... 
|
By SUF on
2005.05.09. 16:04
Gondolom már mindenki unja a témát aki véletlenül olvassa ezt (csak reménykedem benne, hogy van ilyen), én legalábbis nagyon unom.
Összearktam kipróbáltam, oda akartuk adni a kedves felhasználónak aki miatt újra elővettem a témát (eredetileg egy bő éve írtam meg a kódot, de eddig a saját rendszerünkben nem kellett). Természetesen nem volt jó. Írtam a cikkben pár korlátozásról, mint például, hogy a display name nem cserélhető le vele (elvégre az adatok az AD-ból jönnek és ott nincs lehetőség arra, hogy valahol értelmesen el tudjam tárolni ezeket, schemá-t pedig majd hülye leszek bővíteni e miatt).
Na ez persze nem volt így jó. Végül is kitaláltam a megoldást. A kód nagyrészét már át is írtam ennek megfelelően, tehát lassan jön az egész megoldás következő kiadása ami már ezt is tudni fogja (talán még ezen a héten).
|
By SUF on
2005.05.09. 15:56
Na ma végre hosszas küszködés után (főleg az idővel és a lustasággal) befejeztem ezt a Sent Items szétválogató szerkezetet.
Elkészült, működik, de nem vagyok vele elégedett. Ennyit sikerült megoldanom. Ha valakinek van rá ötlete, hogyan lehetne rajta javítani (ne kelljen időzíteni és ne generáljon "Sent behalf of" tipusú leveleket), azt szívesen veszem.
Használja mindenki egészséggel akinek szüksége van rá!
|
By SUF on
2005.05.04. 6:14
Azt vettem a fejembe, hogy belenyúlok a Microsoft Exchange 2003 OWA kódjába. Ezt ugye alapvetően meg tudom tenni, hiszen az egész OWA láthatóan DHTML (HTC objektumok) alkalmazás. Azért akarom ezt megtenni, hogy ugyanúgy ahogy az Outlook-hoz az OWA-hoz is tudjak saját formokat elkövetni. Dokumenttációt nem találtam a dologhoz (ha valaki tud ilyet azt megköszönöm), összesen ennyit találtam:
"OWA customization and component reuse is not supported by Microsoft"
Tehát saját magamnak kell kibogarásznom a dolgokat. Belenéztem a kódba, hogy
Próbálok finoman fogalmazni. Nem vagyok róla meggyőződve, hogy az OWA-ban használt programozási stílus (a forráskód kinézete, dokumentáltsága) megfelel a Microsoft belső szabályainak. Ráadásul ez olyan kód ami ki is kerül, nemcsak bináris állományként. Nem akarok ítélkezni, miután nem vagyok programozó. Mindenki győződjön meg róla saját maga! Egy telepített Exchange 2003 SP1-esen érdemes megnézni ezt:
C:\Program Files\Exchsrvr\exchweb\6.5.7226.0\controls\ctrl_Message.js
Nem tudom mi lesz belőle, de megpróbálok valamit összehozni. Majd beszámolok, hogy mire jutottam.
|
By SUF on
2005.04.29. 7:56
Ma reggel leültem a gép elé, hogy megírjam a dokumentációt az elmúlt napokban reszelgetett scriptemhez, valamint belekzdtem néhány új dologba - pontosabban - csak belekezdtem volna, de ennek kapcsán észrevettem egy hibát a már publikált dolgokban amit ráadásul elég sok helyre beraktam, így most javítgatok.
Az történt, hogy a "Levelesláda méretértesítő"-höz tartozó doksi megírásakor a HTML template-jeimben használt megjegyzés tag-ekben amiket a behelyettesitendő pontokra raktam lemaradtak a felkiáltójelek így helyett <--TAG--> került oda.
A script doksi írása félrerakva, most a hibákat javítgatom.
A "Levelesláda méretértesítő", és a "Jelszó lejárat értesítő", az "Exchange Store méret" dokumentációját javítottam, valamint ez utóbbinál a scriptet és a minta htm fájlt is mert ezekbe is belekerült az idióciám.
Ez rögtön arra is lehetőséget ad, hogy az "Exchange Store méret" scriptben még a múlt héten elkövetett kis plusz funkcionalitás is kikerüljön, nevezetesen az, hogy már a levél címében is lehet használni a template tag-eket.
|
By SUF on
2005.04.28. 7:05
Mint már kedden is írtam, belekezdtem az alternatív feladó játékomhoz tartozó, az elküldött elemeket szétválogató script gyártásába. Második nekifutásra sikerült is megcsinálni a dolgot (szépséghibája az lesz, hogy időzítve kell futtatni, mert ugye Store Sink-ként nem lehet). Már össze is raktam, amikor jött az ötlet, hogy nem elég szétválogatni a leveleket és kiírtani belőlük a speciális csatolmányt (ami a valós e-mail címet tartalmazza), hanem át is kellene írni az e-mail feladóját.
Ez ugye nem jelenthet gondot, hiszen alig kell nyúlni valamihez. A CDO.Message objektumon át kell írni a From property-t és már kész is vagyunk.
Átírtam, megnéztem az eredményt és meglepetten tapasztaltam, hogy az Outlookban nem látok változást. Elkezdtem kisérletezni. Állítgattam az ide vonatkozó propertyket (From, Sender) - Semmi. Állítgattam a lehetséges httpmail és mailheader mezőket:
"urn:schemas:mailheader:from"
"urn:schemas:mailheader:sender"
"urn:schemas:httpmail:from"
"urn:schemas:httpmail:fromemail"
"urn:schemas:httpmail:fromname"
"urn:schemas:httpmail:sender"
"urn:schemas:httpmail:senderemail"
"urn:schemas:httpmail:sendername"
(Már ami ebből állítható és nem Read-Only)
Eredmény semmi.
Arra gondoltam, hogy én berakom a levelet úgy ahogy kell, ő pedig az AD alapján visszakeresi az e-mail-t és változatlanul a számomra épp nem jó AD objektumot rakja be a levélbe. Emlékeztem az Exchange ResolveP2 funkcionalitására, ami kísértetiesen ilyen. Megnéztem a KB-t. Meg is találtam az Exchange 2000-es cikket:
http://support.microsoft.com/kb/288635
Majd miután sejtettem, hogy ez nem jó a 2003-ra tovább keresve azt is megtaláltam:
http://support.microsoft.com/kb/828770
Ez utóbbiból kiderült, hogy amire gondoltam az
1. A 2003-ban már ki van kapcsolva tehát nem lehet a tettes
2. Csak a transporton beérkező levelekre vonatkozik, így az adott esetre nem.
Továbbmenve végül találtam egy ilyen névteret:
"http://schemas.microsoft.com/mapi"
Ugye ehhez a névtérhez tartoznak azok a paraméterek amik az Outlook kiegészítő információit tartalmazzák. Az Exchange ugye MIME formátumú levelekkel beszélget a nagyvilágban, az Outlook meg MAPI leveleket használ (ez utóbbi többet tud, de nem szabványos). Az az információ, hogy egy e-mail cím nem SMTP formátumú ezek között a paraméterek között keresendő. Olvasgattam az MSDN-t (CDO, Exchange schema, MAPI doksi) turkáltam a Platform SDK-ban (Mapitags.h) és meg is találtam amit kerestem. Az eredeti Exchange-es (Active Directory-ból származó) e-mail cím (pontosabban AD user object) ebben a három paraméterben található:
PR_SENDER_NAME
PR_SENDER_ADDRTYPE
PR_SENDER_EMAIL_ADDRESS
Át is írtam az értékeket megfelelően, és láss csodát működik. Legalábbis félig. Mostmár megjelenik a várt feladó, csak éppen a meghatalmazott (on behalf of) státuszban. Túrtam tovább, de nem találtam megoldást (az ide vonatkozó mezőket átírva nem történik semmi).
Ez volt az a pont ahol úgy gondolom, hogy a dolog már használható, így amint dokumentálva össze lesz rakva (remélhetőleg legkésőbb holnap reggelre) megy ki a web-re.
|
By SUF on
2005.04.26. 5:34
A múlt pénteken publikáltam az Exchange Alternatív Feladó nevű kis szösszenetemet (http://www.gomori.hu/as_hu.htm). Valahogy nagy közlési kényszerem volt így kihagytam belőle egy még el nem készült kiegészítést. Bele is írtam a szövegbe:
"A megoldáshoz tartozik még egy opcionális elem, ami megoldja, hogy a felhasználó Elküldött üzenetek (Sent Items) mappája alatt különböző mappákba szortírozza feladó szerint a leveleket. Ez a kiegészítő elem Exchange Store Sink formájában lesz elérhető, amint elkészült."
Na most gratulálhatok magamnak. Nem készült el. Ebben a formájában nem is fog.
Péntek óta írtam az igért Store Sinket folyamatosan. Tegnap reggelre már majdnem elkészült amikor rájöttem, hogy kiszúrtam magammal.
Regisztáltam a Store Sinket a teszt felhasználóm Sent Items mappájára és azzal tesztelgettem, hogy megfelelő leveleket dobáltam bele kézzel. Amikor már majdnem kész volt az egész, akkor egyszer kipróbáltam úgy is, hogy küldtem egy levelet a teszt felhasználó nevében (ami ugye bedobja a Sent Items-be a levelet) és csodáloztam rajta, hogy nem lövi el a Sinket. Több órát bohóckodtam vele, hogy mit rontottam el. Nem találtam. Feldobtam mint kérdést a levlistára is. Még mielőtt választ kaptam volna rá, ezt találtam:
http://support.microsoft.com/?id=297274
Hurrá, kiszúrtam magammal (mellesleg nem értem, hogy mi a halálért nem volt képes az MS megoldani, hogy a Sent Items-en is működjön a Store Sink, vagy inkább mondjam azt, hogy nem ártana végre ezt az RPC-s, MAPI-s bohóckodást bevágni a kukába), amit kitaláltam soha a büdös életben nem fog működni.
Ahogy egy kedves kollégám szokta mondani:
"Akkor most középkezdést hirdetünk"
Miután az, hogy a Sent Items legyen szétválogatva feladónként nem az én saját agyszüleményem volt, hanem az egyik kedves felhasználó találta ki, így nem mondhatom azt, hogy "ok, ezt felejtsük el", hanem valahogy meg kell oldanom. Nekiugrottam mégegyszer, most 80%-os állapotában van az a script ami mondjuk óránként időzítetten futtatva végigmegy a Sent Items-en és leválogatja az elemeket.
Ennyi, majd ha kész lesz kirakom.
|
By SUF on
2005.02.02. 0:00
Ez a kis script az egyik legegyszerűbb SMTP EventSink. Semmi mást nem csinál, csak a megadott könyvtárba lementi a beérkező leveleket. A levelek formátuma olyan, hogy az Outlook Express tudja olvasni. A script archiválásra, vagy levelezéssel kapcsolatos hibakeresésre használható jól. Ezt a verziót még jó néhány dologgal ki akarom egészíteni a közeljövőben.
[2009.04.10] Már nem fogom kiegészíteni. A kód innen tölthető le.
|
By SUF on
2005.01.27. 0:00
Azt hiszem a fenti feladat nagyjából mindenki előtt ismert aki vállalati környezetben Exchange Server-t használ. Bárki aki SMTP Sink-ekkel kezd foglalkozni általában ezzel a feladattal és a megoldásával találja szembe magát. Erre a Microsoft saját maga írt egy VBScript Sink-et ami a KB 317680-as cikkben található. Amikor hosszú évek után újra programozgatásra adtam a fejem nekem is ez volt az első feladatom, kicsit átírva sokáig használtam is az említett Microsoft megoldást.
Az évek során kiderültek e script hibái:
- A jogi nyilatkozat szövege nem módosítható a forrás megváltoztatása nélkül
- A script belepiszkál az elektronikusan aláírt levelekbe, ezzel tönkreteszi a biztonsági borítékot
- Ha az Exchange Server több domaint (céget) kezel, akkor nehézkes megoldani, hogy különböző jogi nyilatkozat legyen a különböző domainekre
Az itt közzétett script a fenti kérdésekre ad megoldást. Használatához mindössze:
1. El kell készíteni hozzá domainenként két fájlt ami a jogi nyilatkozat szövegét tartalmazza text és html (a html formátum csak a szöveget esetleg a formázásokat tartalmazza, se a html fejléc, se a tag-ek ne legyenek benne!) formátumban valahogy így:
.txt
.htm
Ezekből természetesen annyi kell ahány domain-hez akarunk jogi nyilatkozatot rendelni.
2. A 1. pontban létrehozott fájlok elérési útvonalát be kell írni a script-be a DisclaimerFiles változóba.
3. A levéltovábbítás eseményeinek kezelése című cikkemben vázolt módon regisztrálni kell a scriptet.
[2009.04.11] Ez a Sink az Exchange 2003-hoz használható. Az Exchange 2007-hez nem szükséges, mert ott beépített megoldás van a feladat megoldására. A Sink forrása innen tölthető le.
|
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.
|
|