Thursday, October 6, 2016

Java Mail Inhoud - Transfer-Encoding Binêre Opsies

Hantering binêre data met Axis2 (MTOM / SWA) Inhoud Inleiding Ten spyte van die buigsaamheid, interoperabiliteit en globale aanvaarding van XML, daar is tye wanneer serializeren data in XML maak nie sin nie. Web dienste gebruikers dalk wil binêre aanhegsels van verskeie vorme soos beelde, tekeninge, XML dokumente, ens stuur saam met 'n SOAP boodskap. Sulke data is dikwels in 'n bepaalde binêre formaat. Tradisioneel, het twee tegnieke gebruik in die hantering van ondeursigtig data in XML stuur binêre data deur waarde is behaal deur die inbedding ondeursigtig data (natuurlik na een of ander vorm van kodering) as 'n element of kenmerk inhoud van die XML-komponent van data. Die grootste voordeel van hierdie tegniek is dat dit gee aansoeke die vermoë om data, wat slegs gebaseer is op die XML komponent van die data te verwerk en te beskryf. XML ondersteun ondeursigtig data as inhoud deur middel van die gebruik van óf base64 of heksadesimaal teks enkodering. Beide tegnieke opblaas die grootte van die data. Vir UTF-8 onderliggende teks enkodering, base64 verhoog die grootte van die binêre data met 'n faktor van 1.33x van die oorspronklike grootte, terwyl heksadesimale enkodering brei data met 'n faktor van 2 x. Bogenoemde faktore sal verdubbel as UTF-16 teksenkodering gebruik. Ook van belang is die oorhoofse in die verwerking koste (beide werklike en vermeende) vir hierdie formate, veral wanneer dekodering terug in rou binêre. Stuur binêre data met verwysing word bereik deur te heg suiwer binêre data as eksterne ongeveer pars algemene entiteite buite die XML-dokument en dan inbedding verwysing URI tot ondernemings as elemente of kenmerk waardes. Dit voorkom dat die onnodige blaas van data en vermorsing van verwerking krag. Die primêre struikelblok vir die gebruik van hierdie ongeveer pars entiteite is hul beduidende afhanklikheid van DTD, wat modulariteit belemmer sowel as die gebruik van XML name spaces. Daar was 'n paar spesifikasies in die web dienste wêreld bekend gestel om te gaan met hierdie binêre probleem beslaglegging deur die quotby referencequot tegniek. SOAP met aanhangsels is een so 'n voorbeeld. Sedert SOAP verbied tipe dokument verklarings (DTD) in boodskappe, dit lei tot die probleem van nie verteenwoordig data as deel van die boodskap infoset, dus die skep van twee data modelle. Hierdie scenario is soos die stuur van aanhangsels met 'n e-posboodskap. Selfs al is die aanhegsels verband hou met die boodskap inhoud het hulle is nie in die boodskap. Dit veroorsaak dat die tegnologie wat verwerk en beskryf die data wat gebaseer is op die XML komponent van die data te wanfunksioneer. Een voorbeeld is WS-Security. Waar kom MTOM Kom In MTOM (SOAP Boodskap Transmissie Optimization Meganisme) is nog 'n spesifikasie wat fokus op die oplossing van die quotAttachmentsquot probleem. MTOM probeer om die voordele van die bogenoemde twee tegnieke benut deur te probeer om die twee tegnieke om saam te smelt. MTOM is eintlik 'n quotby referencequot metode. Die draad formaat van 'n MTOM new boodskap is dieselfde as die SOAP met aanhangsels boodskap, wat dit ook backwards compatible met SWA eindpunte maak. Die mees noemenswaardige funksie van MTOM is die gebruik van die XOP: Sluit element, wat gedefinieer word in die XML Binary Geoptimaliseerd Packaging (XOP) spesifikasie om die binêre aanhegsels (eksterne ongeveer pars algemene entiteite) van die boodskap verwys. Met die gebruik van hierdie eksklusiewe element, die verbonde binêre inhoud word logies inline (volgens waarde) met die SOAP-dokument, hoewel dit eintlik apart aangeheg is. Dit paart die twee ryke deur wat dit moontlik maak om te werk net met een datamodel. Dit laat die aansoeke te verwerk en te beskryf deur net te kyk na die XML deel, maak die afhanklikheid van DTD uitgedien. Op 'n ligter noot, het MTOM die verwysing meganisme van SWA gestandaardiseer. Die volgende is 'n uittreksel uit die XOP spesifikasie. Op die konseptuele vlak, kan hierdie binêre data beskou word as synde base64-ingebou in die XML-dokument. Aangesien hierdie konseptuele vorm nodig mag wees tydens 'n verwerking van die XML-dokument (bv vir die ondertekening van die XML-dokument), is dit nodig om 'n een-tot-een ooreenkoms tussen XML Info Sets en XOP pakkette. Daarom is die konseptuele voorstelling van so 'n binêre data is asof dit base64-geënkodeerde, met behulp van die kanonieke leksikale vorm van die XML Skema base64Binary data type (sien XML Skema Deel 2: data tipes Tweede uitgawe 3.2.16 base64Binary). In die teenoorgestelde rigting, XOP in staat is om die optimalisering van net-base64 geënkodeerde Infoset data wat in die kanonieke leksikale vorm. Apache Axis2 ondersteun base64. SOAP met aanhangsels en MTOM (SOAP Boodskap Transmissie Optimization Meganisme). MTOM met Axis2 Programmering Model aksioma is (en dalk die eerste wees) Object Model wat die vermoë het om binêre data te hou het. Dit het hierdie vermoë as OMText kan rou binêre inhoud in die vorm van javax. activation. DataHandler hou. OMText is gekies vir hierdie doel met twee redes. Een daarvan is dat XOP (MTOM) in staat is om die optimalisering van net-base64 geënkodeerde Infoset data wat in die kanonieke leksikale vorm van XML Skema base64Binary data type. Ander een is om die infoset bewaar in beide die sender en ontvanger. (Om die binêre inhoud in dieselfde soort voorwerp, ongeag of dit is geskik of nie te stoor). MTOM toelaat om selektief te enkodeer gedeeltes van die boodskap, wat ons toelaat om base64encoded data sowel as ekstern aangeheg rou binêre data verwys deur die quotXOPquot element (new inhoud) in 'n SOAP boodskap gestuur word te stuur. Jy kan spesifiseer of 'n OMText knoop wat rou binêre data of base64encoded binêre data bevat gekwalifiseer is om optimale ten tyde van die konstruksie van die node of later. Vir optimale doeltreffendheid van MTOM, is 'n gebruiker aangeraai om kleiner binêre aanhegsels behulp base64encoding (nie-new) en groter aanhegsels as new inhoud te stuur. Ook, kan 'n gebruiker 'n optimizable binêre inhoud knoop met behulp van 'n base64 geënkodeerde string, wat geënkodeerde binêre inhoud bevat, gegee met die MIME-tipe van die werklike binêre voorstelling te skep. Axis2 gebruik javax. activation. DataHandler om die binêre data te hanteer. Al die new binêre inhoud nodes sal serialized as Base64 Strings as quotMTOM nie enabledquot. Jy kan ook binêre inhoud knope, wat nie sal geoptimaliseer word by elk geval. Hulle sal serialized en gestuur as Base64 Strings. Enabling MTOM Optimization op die kliënt kant in die huidige opsies, stel die eiendom quotenableMTOMquot te bewaarheid toe die stuur van boodskappe. Wanneer hierdie eiendom gestel is, enige seep koevert, ongeag of dit bevat optimizable inhoud of nie, sal serialized as MTOM new MIME boodskap. Axis2 serializes al binêre inhoud knope as Base64 gekodeerde snare ongeag of hulle daarvoor gekwalifiseer word new of nie indien die eiendom quotenableMTOMquot is ingestel op Vals. As die koevert bevat 'n element inligting items van die naam xop: Sluit (sien XML-binêre Geoptimaliseerd Packaging 3. XOP Info Sets Stel). Die gebruiker het nie nodig om enigiets te gee sodat Axis2 om MTOM new boodskappe ontvang. Axis2 sal outomaties identifiseer en de-afleveringen dienooreenkomstig, soos en wanneer 'n MTOM boodskap ontvang. Enabling MTOM Optimization op die bediener kant van die Axis 2 bediener identifiseer outomaties inkomende MTOM new boodskappe wat gebaseer is op die inhoud-tipe en de-serializes hulle dienooreenkomstig. Die gebruiker kan enableMTOM op die bediener kant vir uitgaande boodskappe, om globaal enableMTOM vir alle dienste, kan gebruikers die parameter quotenableMTOMquot gestel is in die Axis2.xml. Wanneer dit gestel is, sal alle uitgaande boodskappe word serialized en gestuur as MTOM new MIME boodskappe. As dit nie gestel, sal al die binêre data in die binêre inhoud knope word serialized as Base64 gekodeerde snare. Hierdie konfigurasie kan oorheers in services. xml op grond van per diens en per operasie. Jy moet die bediener weer te begin nadat die opstel van hierdie parameter. Toegang Ontvang binêre data (Voorbeeld Kode) Im skryf 'n eenvoudige webbediener in luislang wat toelaat dat 'n gebruiker 'n lêer op te laai met behulp multipart / form-data. Sover ek kan sê, is multipart MIME data veronderstel om lyn gebaseer. Byvoorbeeld, die grens moet wees aan die begin van 'n lyn. Ek kan nie uitvind hoe binêre data hanteer in hierdie verband. My kliënt (Firefox) is nie kodering dit in 7bit ASCII of enigiets, dit is net rou binêre data sy stuur. Is dit die data verdeel in lyne op arbitrêre plekke Is daar 'n maksimum lyn lengte wat vir multipart data Ive het probeer soek deur die RFC vir multipart / form-data, maar didnt niks vind. gevra 27 Maart 13 aan 16:54 Na grawe deur die RFCs, ek dink ek het dit al uiteindelik reguit in my kop. Die liggaamsdele (dit wil sê die liggaam inhoud van 'n individu aan 'n multipart / boodskap) moet net reël gebaseer op die grens aan die einde van die deel begin met 'n CRLF. Maar anders, die data hoef nie aanlyn gebaseer wees, en indien die inhoud gebeur met linebreaks daarin het, is daar geen maksimum afstand tussen hulle nie, en hulle moet ontsnap in elk geval (wel, tensy dalk die inhoud-oordrag - encoding aangehaal-string). Die 7-bit, 8-bit en binêre opsies vir Content-Transfer-Encoding dont eintlik daarop dui dat enige kodering is gedoen op die data (en dus moet nie enkodering om ongedaan gemaak word), hulle is net bedoel om die tipe data dui jy kan verwag om te sien in die deel van die liggaam. Wat ek regtig om by my swak uitgedruk vraag was hoe om te lees / buffer die data van die voetstuk sodat ek kan seker maak ek gevang die grens, en sonder om 'n arbitrêr groot buffer (bv as daar gebeur het nie wees linebreaks in die inhoud, en so 'n read line beland buffer die hele ding). Wat ek beland doen was buffer van die aansluiting met 'n read line met behulp van 'n maksimum lengte, sodat die buffer nooit langer as dit sou wees nie, maar sal ook seker maak om te beëindig indien 'n LINEBREAK is teëgekom. Dit het verseker dat wanneer die grens gekom (na aanleiding van 'CRLF), sou dit aan die begin van die buffer wees. Ek moes 'n bietjie ekstra monkeying rond te verseker Ek didnt sluit daardie finale CRLF in die werklike liggaam inhoud te doen nie, want volgens die RFC die vereiste voordat die grens, en dus nie deel van die inhoud self. antwoord 5 April 13 aan 12:02 Probeer hersiening RFC 2045. Tipies, binêre inhoud is in BASE64 omskep deur jou aansoek en ingesluit in die multi deel boodskap met behulp van Content-Transfer-Encoding. Base64. Daar ander meganismes om binêre data oor te dra, maar dit is redelik algemeen. Binêre data is omskep in octets en chunked in arbitary lengte snare (afhangende van die enkodering variant - sien die BASE64 skakel hierbo). Die ontvangs aansoek dekodeer dit dan in die oorspronklike binêre inhoud. Ek is nie 'n luislang programmeerder, maar ek sou verbaas dit wat jy regtig het om enige van hierdie jouself kodeer wees. Ek vermoed daar is voortgang Python biblioteek funksies om dit te doen vir jou. antwoord 27 Maart 13 aan 17:43 Dankie, ek was op soek na 'n ander RFC wat nie so insiggewend was. Ek het ook gevind RFC 2046 wat spesifiek multi-deel boodskappe definieer in artikel 5. Nota there39s 'n bietjie van 'n subtiliteit in hierdie RFCs wat deur my af: dit sê multipart boodskappe kan nie anders as 7-bit, 8-bit en binêre coderingen het (dit wil sê nie-basis 64). Maar dit gaan voort om te sê dat die individuele dele binne die multi deel hul eie inhoud-enkoderings kan hê, sodat jy korrek dat Base-64 is moontlik is. â € sh1ftst0rm 28 Maart 13 aan 13:20 Jou Antwoord 2016 stapel Exchange, IncGreetings al. Ek hoop iemand kan my werp bietjie lig oor die kwessie ek het nie. Lees die Javadoc van MimeMessages getInputStream (), sê dit terug n gedekodeer insette stroom vir hierdie Messages inhoud Maar dit is nie wat ek ervaar. Die uitset is nie ontsyfer. Byvoorbeeld, as ek 'n boodskap 'n Daarna volg, in die veronderstelling dat ek 'n voorwerp genoem m gebou met bogenoemde inhoud, dan roep m. getInputStream () en stort die uitset na die venster sien jy die 3D teken sets. Wat het ek verkeerd as ek gebruik QPDecoderStream om die uitset van m. getInputStream ontsyfer doen () dan natuurlik die gevolg sal korrek wees. Maar dit verslaan met die doel, want die Javadoc sê getInputStream () gee terug 'n gedekodeer insette stroom. gevra 30 Maart 11 van die 23:36 As 'n Content-Transfer-Encoding kop veld verskyn as deel van 'n boodskap kop, dit is van toepassing op die hele liggaam van die boodskap. As 'n Content-Transfer-Encoding kop veld verskyn as deel van 'n entitys kop, dit is net van toepassing op die liggaam van daardie entiteit. As 'n entiteit is van tipe multipart die Content-Transfer-Encoding word nie toegelaat om enige ander rede as 7bit, 8bit of binêre waarde het. Jy kan waarskynlik die top-vlak MimeMessage s gedekodeer inhoud stroom en instansieer n MimeMultipart daaruit, maar dis net inbraak rondom die fundamentele probleem van 'n gebreekte message. JavaMail Jy kan e-pos stuur of haal deur jou Java program of Servlet met behulp van die Java Mail API. Jy gebruik die Java Mail API waar as Java Mail implementering verskaffers implementeer die Java Mail API vir jou 'n Java Mail kliënt (Java JAR lêer) gee. Sun gee jou mail. jar wat Suns SMTP, POP3 en IMAP kliënt implementasies saam met die Java Mail API het. Dit is voldoende om e-pos te stuur en te ontvang, maar nie kan lees of pos aan newgroups wat NNTP gebruik. Voorbeeld Kode te stuur e-pos aan te stel en uit te voer, moet jy mail. jar (vanaf die Java Mail aflaai) en activation. jar (vanaf die Java Beans Activation Framework aflaai) in Java classpath het. Jy moet e-pos adresse en e-pos bediener te vervang met jou waardes anders vermeld. Gebruikersnaam en wagwoord is oor die algemeen nie nodig is om e-pos te stuur hoewel jou ISP kan steeds nodig om dit te verhoed spam uit gaan deur middel van sy stelsels. Dit voorbeeld kode het ontfouting aangeskakel (mail. debug) om te sien wat aan die gang is agter die skerms in Java Mail kode. Voorbeeld Kode te stuur Multi E-Mail, HTML e-pos en lêer aanhangsels tot op te stel en uit te voer, moet jy mail. jar het (van die Java Mail aflaai) en activation. jar (vanaf die Java Beans Activation Framework aflaai) in Java classpath. Jy moet e-pos adresse en e-pos bediener te vervang met jou waardes anders vermeld. Dit voorbeeld kode het ontfouting aangeskakel (mail. debug) om te sien wat aan die gang is agter die skerms in Java Mail kode. Voorbeeld Kode te haal e-pos aan te stel en uit te voer, moet jy mail. jar (vanaf die Java Mail aflaai) en activation. jar (vanaf die Java Beans Activation Framework aflaai) in Java classpath het. Jy moet e-pos bediener, gebruikersnaam en wagwoord te vervang met jou waardes anders vermeld. Dit voorbeeld kode het ontfouting aangeskakel (mail. debug) om te sien wat aan die gang is agter die skerms in Java Mail kode. Nuttige klasse of koppelvlakke 'n Sessie voorwerp verifieert die gebruiker en beheer toegang tot die pos stuur. Die sessie klas is 'n finale konkrete klas. Dit kan nie subclassed. Deur die roeping van die toepaslike fabriek metode op 'n sessie voorwerp, kan jy Vervoer en winkel voorwerpe wat spesifieke protokolle te stuur of te gaan haal e-pos onderskeidelik steun te verkry. Jy sit e-pos adres snare soos UserDomain in 'n internet adres voorwerp om dit te gebruik met Java Mail. Die internet adres klas strek die abstrakte adres klas om vorendag te kom met 'n soort rfc822 adres. Jy bou 'n e-pos boodskap as 'n voorwerp van die MimeMessage klas. Alle Java e-posse is van tipe boodskap. Elke boodskap voorwerp het 'n inhoud. Die inhoud kan óf 'n multi inhoud of nie. 'N Eenvoudige inhoud is net 'n paar gewone teks, byvoorbeeld. Daar is geen spesiale klas vir 'n eenvoudige (nie-multipart) inhoud. Jy sê net msg. setText (textString). MimeMultipart klas hanteer multipart inhoud wat voldoen aan die MIME spesifikasies. Jy skep 'n nuwe MimeMultipart voorwerp deur 'n beroep sy verstek konstruktor. Wanneer jy inhoud van 'n multi e-pos. dit 'n voorwerp van hierdie tipe opbrengste altyd. MimeMultipart tree op as 'n houer vir verskeie dele in die e-pos gestuur word. Elke deel is van tipe MimeBodyPart. MimeMultiparts getBodyPart (int indeks) metode gee die MimeBodyPart voorwerp op die gegewe indeks. Indeks begin by 0. Die addBodyPart (.) Metode voeg 'n nuwe MimeBodyPart voorwerp om dit as 'n stap in die rigting bou van 'n nuwe multi MimeMessage. Elke Bodypart tipe voorwerp kan óf 'n JAF DataHandler voorwerp of 'n ander (sub) Multi tipe voorwerp bevat. So, check die inhoud-tipe elke BodyPart voordat dit gebruik word in jou kode. Om 'n sub-Multi tipe voorwerp van 'n Mime_Part met 'n ContentType kenmerk stel om multipart / gebruik () metode Mime_Part s getContent onttrek. Sy getSubType metode gee die multipart boodskap MIME subtipe. Die subtipe definieer die verhouding tussen die individuele liggaamsdele van 'n multi-boodskap. As die inhoud van 'n boodskap voorwerp is 'n geval van die Multi-klas, beteken dit dat jy nodig het om die inhoud te gooi in 'n Multi en kyk vir tipe BodyPart voorwerpe binne die gevolglike voorwerp te bekom elke afsonderlike deel. Nog 'n boodskap voorwerp kan nie direk in 'n Multi voorwerp, moet dit ingesluit in 'n BodyPart eerste. Elke boodskap of BodyPart tipe voorwerp het ook 'n paar eienskappe. 'N Boodskap is eienskappe kan wees Van, Aan, Onderwerp, Antwoord-Aan ens Jy kan ook nie-standaard kenmerke voeg as hoofde. 'N Tipe BodyPart voorwerp doen nie eienskappe wat gestel Van, Aan, Onderwerp, ReplyTo, of ander adres kop velde het. Boodskappe word gestoor in die gids voorwerpe wat ook subgidse mag bevat. Alle e-pos stuur het die gids met die naam posbus. Die klas gids verklaar metodes wat gaan haal, voeg, te kopieer en boodskappe verwyder. 'N gids voorwerp kan ook gebeure stuur na komponente geregistreer as gebeurtenis luisteraars. fldr. getType terug of 'n gids subgidse, boodskappe, of beide kan hou. store. getDefaultFolder gee die hoofdmap. fldr. list terug al die subgidse onder die gids. fldr. getFolder (folderName) gee terug Die naam van subgids. Dit subgids hoef nie fisies bestaan ​​in die winkel. fldr. exists dui aan of hierdie gids bestaan. store. create skep 'n gids 'n Geslote gids voorwerp laat verwyder en hernoem die gids, lys en die skep van subgidse, en monitering vir nuwe boodskappe. fldr. open maak 'n gids voorwerp (slegs indien dit kan boodskappe bevat). Jy kan nie bel oop, verwyder en renameTo op 'n oop gids. Dopgehou word gestoor in 'n databasis verkry word deur 'n winkel klas wat gebruikersnaam en wagwoord benodig om toegang tot die databasis. As 'n gebruiker, sal jy skakel gerus in op die e-pos bediener deur te bel een van die drie Connect (.) Metodes op 'n winkel klas. vermelding van die bediener om toegang, gebruikersnaam en wagwoord. Boodskappe gestoor word in 'n gids voorwerp is opeenvolgend genommer, vanaf 1. Oproep msg. getMessageNumber () gee terug sy volgnommer. Jy kan 'n boodskap verwys óf deur sy volgnommer of deur die ooreenstemmende boodskap voorwerp itself. When boodskappe gemerk as geskrap is eintlik versoen, is die oorblywende boodskappe hernommer. Daar is dus geen waarborg dat 'n boodskap sal altyd dieselfde boodskap nommer in 'n gids. Sedert 'n reeks nommer binne 'n sessie kan verander, gebruik verwysings na Boodskap eerder voorwerpe as volgorde nommers soos kas verwysings na boodskappe. Gebruik FetchProfile om selektief te haal boodskap skryf / inhoud vir doeltreffendheid: Stappe om te gebruik Java Mail In die eerste plek kry die Sessie voorwerp: Die stutte Properties lêer bevat pos protokolle na gebruik, pos gasheer en hawe na konnekteer na, gebruikersnaam ens wat later sal gebruik word om toegang tot die e-pos bediener. Dit kan leeg wees, hoewel jy dalk wil mail. store. protocol stel. mail. transport. protocol. mail. host. mail. user en mail. from eienskappe. Wagwoorde kan nie beskryf met behulp van eiendomme. Hier is die verskillende eienskappe wat gebruik kan word in die voorwerp Properties en wat hulle doen: mail. store. protocol. Standaard protokol boodskappe haal. mail. transport. protocol. Standaard protokol boodskappe te stuur. pos. protokol. host. Protokol-spesifieke standaard e-pos bediener soos mail. smtp. hostsmtp2.yourisp. Standaard op whats in mail. host eiendom (sien volgende). mail. host. Standaard-pos bediener vir beide die stuur en ontvang e-pos. mail. user. E-pos bediener rekening. Standaard op die JVM stelsel eiendom user. name. Die berg en vervoer voorwerpe koppel () metode gebruik hierdie eiendom aan die gebruikersnaam te stuur na die e-pos bediener, indien die protokol-spesifieke gebruikersnaam eiendom afwesig (sien volgende). pos. protokol. user. Protokol-spesifieke standaard gebruikersnaam vir koppeling aan die e-pos bediener. Standaard op whats in mail. user eiendom. mail. from. Spesifiseer die terugkeer adres van die huidige gebruiker. Wat gebruik word deur die InternetAddress. getLocalAddress metode om die huidige gebruikers e-pos adres spesifiseer. Standaard om usernamehost. mail. debug. As gespesifiseerde as ware string, druk boodskappe te System. out wat verskillende protokol bevele uitgereik agter die skerms. Standaard is vals. Jy kan dit ignoreer later met Session. setDebug metode, maar dan sal debug boodskappe slegs aangeskakel van daardie punt af en jy sal die skepping sessie boodskappe mis. Stuur e-pos instansieer 'n nuwe boodskap: Stel boodskappe eienskappe: Stel boodskappe inhoud: Om MIME multipart inhoud te skep, eerste instansieer n MimeMultipart voorwerp. Die verstek subtipe van 'n multi-inhoud is gemeng. Jy kan ander subtipes soos alternatiewe, verwante, parallel en onderteken spesifiseer. Instansieer en stel inhoud van MimeBodyPart voorwerpe Voeg BodyPart beswaar maak teen Multi voorwerp Ten slotte, het die Multi voorwerp as die boodskappe inhoud Stuur die boodskap outomatiese proses. Dit is 'n gerief statiese metode. Dit laat nie toe dat die registrasie gebeurtenis luisteraars met die voorwerp Vervoer. Afhangende van elke ontvangers te spreek tipe, dit instantiates die toepaslike Vervoer subklas, noem msg. saveChanges () en doen 'n beroep transportObject. sendMessage (msg). Handleiding Prosedure. Verseker dat behoorlike boodskap hoofde opgedateer: Kry 'n Vervoer voorwerp wat spesifiek op die stuur protokol (gewoonlik SMTP) Registreer geval luisteraars as jy wil: Maak ontvanger adres verskeidenheid: Stuur die boodskap: Opsioneel, skryf die boodskap uit na 'n bytestream (mag wees om red as 'n konsep op skyf byvoorbeeld). Haal E-pos Kry die winkel voorwerp: Skakel gerus in op die winkel: lys dopgehou in die winkel en 'n lys / siening boodskappe in 'n gids: Kry 'n boodskappe eienskappe: Stuur die MIME-tipe van 'n boodskappe inhoud: Kry 'n boodskap inhoud: die tipe van die teruggekeer voorwerp hang af van die tipe van die werklike inhoud. 'N teks / plain inhoud terugkeer gewoonlik 'n String voorwerp. A multipart / ltwhatever heregt voorwerp terugkeer altyd 'n Multi voorwerp of sy subklas. Vir onbekende inhoud tipes, is 'n e-pos-spesifieke enkoderings ontsyfer en 'n InputStream voorwerp teruggegee. As jy klaar is, sluit alle oop dopgehou en dan die winkel. Nut Klasse Jy kan die MimeUtility klas gebruik om nie-VSA-ASCII kop-en inhoud te skakel na pos-veilige formaat. Onthou om dit te doen voordat hy setHeader (), addHeader () en addHeaderLine () metodes. Daarbenewens moet die kop velde gevou (toegedraai) voordat dit gestuur word indien hulle meer as die lyn lengte beperking vir die vervoer (1000 bytes vir SMTP). Ontvang kop mag gewees het gevou. Jou aansoek is verantwoordelik vir vou en ontvou kop soos toepaslik. Alle metodes in MimeUtility nut klas is statiese metodes. getEncoding () neem 'n JAF DATABRON voorwerp en gee die Content-Transfer-Encoding dat die data in daardie data bron voorwerp toegepas moet word om dit te laat pos-veilige. enkodeer () vou 'n encoder rondom die gegewe uitset stroom gebaseer op die gespesifiseerde Content-Transfer-Encoding. dekodeer () dekodeer die gegewe invoer stroom, gebaseer op die gespesifiseerde Content-Transfer-Encoding. Sedert RFC 822 verbied nie VSA-ASCII karakters in kop. jy moet eers bel MimeUtility. encodeText () metode op die kop name en waardes, en dan bel setHeader (), addHeader () of addHeaderLine () metodes op die geënkodeerde snare. Dit enkodeer kop waardes slegs indien hulle nie VSA-ASCII karakters bevat. Net so, bel MimeUtility. decodeText metode op kop waardes verkry uit 'n MimeMessage of MimeBodyPart met behulp van die getHeader stel metodes. Hierdie metode neem 'n kop waarde, geld RFC 2047 dekodering standaarde, en gee die gedekodeer waarde as 'n Unicode String. Jy moet altyd kop waardes loop deur die dekodeerder om veilig te wees. Die ContentType klas is 'n program klas wat kan ontleed ontvang MIME inhoud-tipe kop en ook genereer nuwe MIME inhoud-tipe kop. Boodskap Vlae As 'n gids ondersteun die spesiale GEBRUIKER vlag, kan jy arbitrêre gebruiker te definieer vlae ingestel op 'n boodskap wat aan hierdie gids. Ander vlae is: beantwoord. Boodskap is nie. KONSEP: Boodskap is 'n konsep. Gemerk. Merk 'n boodskap as gemerk. ONLANGSE. Hierdie boodskap is nuut aangekom in hierdie gids. Hierdie vlag is ingestel wanneer die boodskap die eerste keer in die gids gelewer en skoongemaak wanneer die met gids is gesluit. Kliënte kan nie stel die vlag. Gesien dui op 'n boodskap wat geopen is. Dit raak te stel wanneer die inhoud boodskap is opgespoor. DELETED. Laat herstel word gemaak boodskap te skrap. Hierdie vlag instelling vir 'n boodskap dui dit geskrap, maar nie fisies die boodskap van sy gids verwyder. Die kliënt noem die skrap metode op 'n gids om al geskrap boodskappe in die gids verwyder. Metodes om te werk op vlae van 'n boodskap Java Mail Events Java Mail gebruik JDK 1.1 tipe gebeurtenis-hantering meganisme. Jy kan jou klas te registreer as luisteraars om subklasse van MailEvent klas. Die vervoer, stoor en gids klasse te genereer sulke gebeurtenisse. 'N vervoer voorwerp genereer ConnectionEvent en TransportEvent. As die vervoer voorwerp suksesvol verbind, sal dit die ConnectionEvent met die stel om GEOPEN tipe vuur. As die verband keer uit of gesluit word, is ConnectionEvent met tipe GESLUIT gegenereer. Die sendMessage metode van 'n vervoer voorwerp genereer 'n TransportEvent wat inligting oor die metodes sukses of mislukking bevat. Die geleentheid voorwerp bevat drie skikkings van adres skikkings: validSent, validUnsent en ongeldig. MESSAGEDELIVERED. Boodskap suksesvol aan alle ontvangers gestuur. validSent bevat al die adresse. validUnsent en ongeldig is nul. MESSAGENOTDELIVERED. Wanneer ValidSent is nul, is die boodskap nie suksesvol gestuur na enige ontvangers. validUnsent kan adresse wat geldig is nie. ongeldig, kan dalk ongeldig adresse bevat. MESSAGEPARTIALLYDELIVERED. Boodskap is gestuur na 'n paar ontvangers maar nie vir almal. ValidSent hou adresse van die ontvangers aan wie die boodskap gestuur is. validUnsent hou geldige adresse maar die boodskap wasnt na hulle gestuur. ongeldig hou ongeldig adresse. 'N winkel voorwerp genereer ConnectionEvent (gegenereer op 'n suksesvolle konneksie of naby), StoreEvent (event. getMessageType metode terugkeer óf ALERT of kennisgewing), FolderEvent (op die skepping, skrap of hernoem van 'n gids). 'N gids voorwerp genereer ConnectionEvent ( 'n gids is oop of toe), FolderEvent (hierdie gids skep, skrap of herbenoem) en MessageCountEvent (boodskap telling verander, geskrap boodskap voorwerpe is in die geval). Meer oor JavaMails interne werking Java Mail ondersteun gelyktydige meervoudige sessies en elke sessie kan toegang verskeie boodskap winkels en vervoer. In 'n JVM, kan verskeie programme op dieselfde standaard pos sessie deel. Op hierdie manier, net een aansoek moet die inligting en kode wat nodig is om aan te sluit op 'n e-pos bediener en kontroleer die gebruiker het. Ander programme dan net bel stuur of haal metodes. Sessie voorwerpe getInstance (.), GetDefaultInstance (.), GetStore (.) En getTransport (.) Metodes te kyk vir jou ingestel Java Mail implementering in twee tekslêers met die name javamail. providers en javamail. default. providers. Gewoonlik, jy nie nodig het om iets te doen, want die standaard verskaffers in mail. jar lêer is voldoende. Die lyne in hierdie lêers spesifiseer watter Java klas te gebruik waarvoor protokol. Monster javamail. providers lêer: Dit soek na gekonfigureer implementering soos volg: In die eerste plek met behulp van die eiendom java. home stelsel, dit lyk vir die gewilde protokolle opset in die lêer java. home /lib/javamail. providers. Daar kan 'n mens so 'n lêer per JVM wees. Indien die bogenoemde lêer bestaan ​​nie of die gewenste protokol is nie in die bostaande lêer, dit lyk vir die gewilde protokolle opset in die meta-INF / javamail. providers lêer in jou programme gids or jar-lêer. Daar kan 'n mens so 'n lêer per aansoek wees. Indien die bogenoemde lêer bestaan ​​nie of die gewenste protokol is nie in die bostaande lêer, dit lyk vir die gewilde protokolle opset in die meta-INF / lêer javamail. default. providers in JavaMails mail. jar lêer. Daar kan 'n mens so 'n lêer per Java Mail installasie wees. Vir 'n spesifieke protokol, die eerste verskaffer gelys oorwinnings en is by verstek gebruik word. Jy kan die standaard verander deur die oprigting van die pos. eiendom protokol CLASS aan die klas naam wat jy wil wanneer jy skep die Sessie object. Or, kan jy dit verander later met behulp van sessies getProviders (), getProvider () en setProvider () metodes. 'N verskaffer voorwerp kan nie uitdruklik geskep moet word opgespoor met behulp van die session. getProviders () metode en dit is seker een van die wat in die hulpbron lêers ingestel wees. Die verskaffers in jou lêers bygevoeg voordat die kinders wat kom in mail. jar se verstek lêers. Almal is beskikbaar by jou kode via die session. getProviders () metode. Java Mail kan die korrekte Vervoer voorwerp implementering van die korrekte protokol gebaseer op die ontvangers adres instansieer. Hoe werk dit doen dat dit lyk vir adres-tipe-tot-protokol kartering in twee tekslêers met die name javamail. address. map en javamail. default. address. map. Gewoonlik, jy nie nodig het om iets te doen, want die standaard afbeeldings in mail. jar lêer is voldoende. Elke lyn van hierdie lêers kaarte 'n adres tipe na 'n vervoer protokol. Om 'n adres tipe te bepaal, gebruik metode javax. mail. Address. getType () om die adres tik. Byvoorbeeld, twee algemene tipes adres is rfc822 (internet adres klas) en nuus (NewsAddress klas). Monster javamail. address. map. Dit soek na gekonfigureer afbeeldings soos volg (Dit is dieselfde navraag as vir die lêer verskaffers hierbo): In die eerste plek met behulp van die eiendom java. home stelsel, dit lyk vir die gewenste adres tipes kartering in die java. home / lib / Java Mail. address. map lêer. Daar kan 'n mens so 'n lêer per JVM wees. Indien die bogenoemde lêer bestaan ​​nie of die gewenste adres tipe is nie in die bostaande lêer, dit lyk vir die gewenste adres tipes kartering in die meta-INF / javamail. address. map lêer in jou programme gids or jar-lêer. Daar kan 'n mens so 'n lêer per aansoek wees. Indien die bogenoemde lêer bestaan ​​nie of die gewenste adres tipe is nie in die bostaande lêer, dit lyk vir die gewenste adres tipes kartering in die meta-INF / javamail. default. address. map lêer in JavaMails mail. jar lêer. Daar kan 'n mens so 'n lêer per Java Mail installasie wees. Dopgehou kan ook verkry word deur gebruik te maak URLNames wat kan gebou word van snare spesifiseer protokol, host, port, lêer, gebruikersnaam, wagwoord. RFC 1738 spesifiseer die URL sintaksis vir IP-gebaseerde protokolle soos IMAP4 en POP3. Spesifiseer -1 as poort nommer op die standaard poort gebruik. Behoorlike maniere om 'n gids verdryf. Verdryf die gids, sluit dit. Heropen en boodskappe refetch van die gids. Reik die noue metode met die skrap parameter gestel is. Jy kan 'n gids soek (en, rekursief, die hele winkel databasis) vir die boodskappe wat jy op soek is na. Die abstrakte Zoekterm klas verteenwoordig soekterme. Dit het 'n enkele metode: boolean wedstryd openbare (Boodskap MSG) Daar is konkrete subklasse van hierdie klas om te soek op onderwerp, uit te ens en spesifiseer AND en OR criteria. The gids klas ondersteun soektogte op boodskappe: Die inhoud van 'n boodskap is 'n versameling van grepe. Daar is geen ingeboude kennis in Java Mail van die tipe data of formaat van die boodskap inhoud. In plaas daarvan, die boodskap objekklas in wisselwerking met sy eie inhoud deur middel van 'n intermediêre laag - die Java Beans Activation Framework (JAF). So, Java Mail gebruik JAF om toegang tot data wat gebaseer is op data-tipe te hanteer. Die buite-die-boks JAF bied twee baie eenvoudige JAF-bewus kyker bone: teks aansig en Image Viewer. Hierdie bone kan hanteer data waar inhoud-tipe is ingestel om teks / gewoon of image / gif. Java Mail implementering verskaffers (jy nie) nodig het om addisionele kykers dat sommige van die basiese tipes inhoud te sien op die internet soos teks / html, multipart / gemengde en boodskap / rfc822 ondersteun skryf. Hoe e-pos Werke Die eerste e-pos met 'n teken in die adres gestuur in 1971. 'n e-pos stelsel bestaan ​​uit twee verskillende bedieners wat loop op 'n bediener masjien. Jy in verbinding bly om die SMTP (Simple Mail Transfer Protocol) bediener op sy bekende poort nommer 25 tot e-pos te stuur aan ander. En, jy in verbinding bly die POP3 (Post Office Protocol weergawe 3) bediener op sy bekende poort nommer 110 op die e-pos wat jy kan ontvang haal. Die e-pos program op jou rekenaar in wisselwerking met die twee posbedieners op jou ISP (Internet Diens Verskaffer) te laat vang e-pos. Die interaksie is dood eenvoudig. Jy komponeer jou e-pos en stuur dit aan jou e-pos program. Jou e-pos program verbind oor die internet na die e-pos bediener, vra jy vir 'n gebruikersnaam en wagwoord (indien nodig), en voorrade wat aan die e-pos bediener vir jou kontroleer. Na suksesvolle verifikasie, jou e-pos programme interaksie met 'n SMTP-bediener gaan iets soos hierdie (van HowStuffWorks): Jou e-pos program: helo toets Mail bediener: 250 mx1.mindspring Hallo abc. sample 220.57.69.37, bly om jou te ontmoet jou e-pos program: pos uit: testsample Mail bediener: 250 2.1.0 testsample. Sender ok Jou e-pos program: rcpt om: jsmithmindspring Mail bediener: 250 2.1.5 JSpies. Ontvanger ok Jou e-pos program: data Mail bediener: 354 Tik pos, einde met. op 'n streep deur homself Jou e-pos program: van: testsample om: jsmithmindspring onderwerp: toets John, ek toets. . E-pos bediener: 250 2.0.0 e1NMajH24604 boodskap aanvaar vir aflewering Jou e-pos program: ophou pos bediener: 221 2.0.0 mx1.mindspring sluiting verband Verbinding gesluit deur buitelandse gasheer. Dit is so eenvoudig regtig e-pos programme doen dit agter die skerms. Hierdie transformasie kan die boodskap te reis deur ouer SMTP messaging bedieners wat net boodskappe in die VSA-ASCII-teks te ondersteun. Base64 skep 'n voorspelbare toename in grootte boodskap en is optimaal vir binêre data en nie-VSA-ASCII-teks.


No comments:

Post a Comment