Halloj, jag börjar bli frustrerad på mitt projekt. Jag har postat åt dig i tråden men vi kan ta det här... Kan nog även skrivas såhär... Tilläg till ovan. Om du skall använda Regular Expresion i Vb Funkar tyvär inte med nån av dessa, hela mailet kommer med. Anledningen till att hela mailet tas ut är nog enbart ett fel i mönstret... Följande tar fram huvudet... Hej! YEEEESSS!!! Hej! Nedanstående kod är en förbättrad variant av koden som hämtar ut huvudet... Jag tror jag löser det här:) Låter bra, tänk dock på att man kan göra så mycket mer med Regular Expressions... Det sista du skicka funkade inte så bra, det blir 0. Testa följande... Tyvär retunerar den 0 och inga felmeddelanden. Det är nog boundary som är fel... Sorry, fel av mig, hade fått med dubbelfnuttar runt *harkel* :) Tänkte väl, borde fungera ;) Det jag inte förstår är hur ja ska få ut olika sektioner, är det samma mönster? Om du skulle kört VB.NET skulle det varit hur lätt som helst, men nu är ju inte det fallet så vi får skriva en liten översättare... Testa följande kod, den ska hämta ut data efter angivet Index som är lägst 0 och högst antalet sektioner - 1 Vi fick ju ut count 3 i detta mail. Testa funktionen igen, jag har ändrat lite i mönstret så nu ska den nog fungera... Nä du, hade du ändrat i koden ovan? Jodå, jag hade ändrat koden ovan... Ok, så gör jag ju. Ok, jag har än en gång uppdaterat funktionen ovan, la till .Global = True för att den ska fortsätta att hitta efter första och .IgnoreCase = True för att den ska strunta i om det är stor eller liten bokstav... Yeees Master Plutten har lyckats IGEN:) En sak till... Ja, din GetHead ger mig headern, sen får ja ut body:n me HTML o så bilagan. Enkelt gjort, all text i början på varje sektion är ett underhuvud som du kan ta ut med funktionen som tar ut huvudet... Jag har funderat på att skriva en artikel om Regular Expressions, men vet inte riktigt var och hur jag ska börja... Ok, ja det vore ju en bra grej o ha en artikel om det, men det kanske blir invecklat. Fast att få ut bilagor är väl en bra start, det är iaf känsligaste delen, den måste ju va korrekt. Just i läget med mailexemplet så har du ju två olika typer av text, ett med HTML och en med text... Hehe, den röda tråden kan va svår att hålla:) Hej! Godmorgon, ja jag är envis;) Gomorron! Sorry, missade att tala om VAD jag ville ha ut men det var filnamnet. Om du inte är i behov att få ut filnamnet och filändelsen i två delar kan du använda följande som även kontrollerar att det du skickar in kan innehålla ett filnamn... Hej igen:) Vad jag vet är det bättre att använda RegExp vid lite mer avancerad stränghantering för den är väldigt snabb... Hej där, det går inte så bra för mig, vissa mail innehåller inte "boundary" på det sätt som ovan, jag har stött på en som ser ut så här: Hur tar du ut boundary från huvudet då? Roggan: Jag vet, lite kul faktiskt, tänker på det varje gång jag anropar funktionen:) Jadu, om du inte får ut med ett = i boundary är det väldigt konstigt eftersom jag får ut det utan problem... Hej, jag va trött, jag har kapat inlägget nu. Visst, maila så kan jag kika lite... Och jag har svarat, dock får du byta ut "RegExp = Nothing" till "Set RegExp = Nothing"... Jag får inte koden att fungera nånstans på rätt sätt så jag får lägga ner detta, oerhört surt för jag e nästan framme men detta med regexp kan jag inte för mitt liv förstå så jag är totalt utelämnad till andra, som inte heller verkar få stil på det.REGEXP?! HUR??
Har fått höra att Regexp är det ja ska använda, har kollat lite på det men hajjar inte ett dugg.
Snälla kan NÅN ge mig lite exempelkod?
DEtta hör ihop med "formatera sträng" i denna tråd.
/BSv: REGEXP?! HUR??
Från tråden...
Följande borde fungera, har dock inte testat det eftersom jag inte kör VB6...
<code>
Private Function GetHead(Mail As String) As String
On Error Resume Next
With CreateObject("VBScript.RegExp")
.Pattern = "^([\w\W]+(?!\r\n\r\n|$))[\w\W]*"
GetHead = .Replace(Mail, "$1")
End With
End Function
</code>
Funktionen ska hämta ut huvudet från hela mailmeddelandet...
Men försök hitta exempel etc på nätet på hur du använder RegExp i VB6 på olika sätt...
Mvh,
ThomasSv: REGEXP?! HUR??
<code>
Private Function GetHead(Mail As String) As String
On Error Resume Next
With CreateObject("VBScript.RegExp")
.Pattern = "^[\w\W]+(?!\r\n\r\n|$)"
GetHead = .Execute(Mail)(0)
End With
End Function
</code>
Tror ovanstående är bättre än föregående med Replace istället för Execute...
Mvh,
ThomasSv: REGEXP?! HUR??
måste du sätta Reference till Microsoft VbScript Regular Expresion 5.5Sv: REGEXP?! HUR??
Jag kommer inte sitta vid nån dator på säkert 2 veckor från o me idag så detta får nog vila tills dess.
Jag har satt referensen.
/BSv: REGEXP?! HUR??
Ska ta fram ett mönster som jag vet fungerar...
Ett ögonblick bara...
Mvh,
ThomasSv: REGEXP?! HUR??
<code>
Private Function GetHead(Mail As String) As String
On Error Resume Next
With CreateObject("VBScript.RegExp")
.Pattern = "^(?:.+(?:\r?\n))+(?!\r?\n).+"
GetHead = .Execute(Mail)(0)
End With
End Function
</code>
Jag ska se vad jag kan göra med bilagan, men det borde inte vara för svårt...
Mvh,
ThomasSv: REGEXP?! HUR??
Jag har varit borta över natten så därför har jag inte skrivit...
<code>
Private Function GetHead(Mail As String) As String
On Error Resume Next
With CreateObject("VBScript.RegExp")
.Pattern = "^[\w\W]+?(?:\r?\n){2}"
GetHead = .Execute(Mail)(0)
End With
End Function
</code>
Ovanstående vet jag ska fungera helt perfekt...
Om det inte fungerar kan det hända att det är något fel i själva användningen av RegExp...
Kanske man måste deklarera ett objekt och sätta den till regexp...
Ungefär såhär...
<code>
Private Function GetHead(Mail As String) As String
On Error Resume Next
Dim RegExp As Object
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.Pattern = "^[\w\W]+?(?:\r?\n){2}"
GetHead = .Execute(Mail)(0)
End With
End Function
</code>
Dock vet jag inte om ovanstående kod fungerar...
Mvh,
ThomasSv: REGEXP?! HUR??
Den sista va korrekt, man tackar för det.
Hur funkar det där me mönster då?
Hur vet jag vad ja ska ha me för att få ut en bilaga då?
/BSv: REGEXP?! HUR??
Bra att det sista fungerade! =)
Om du först tar ut huvudet på meddelandet, ersätter det med "", alltså ingenting och sen kör du det här mönstret...
(----_=_NextPart_001_01C46978\.EC4BBFAE)([\w\W]*?)(?:\r?\n){2}--(?=\1)
Första delen måste bara bytas ut mot aktuellt boundary där en punkt måste ersättas med \.
Ovanstående fungerar på meddelandet du postat här...
Index 0 innehåller själva meddelandet och alla andra index innehåller bifogningarna...
Det är lite mer till det hela, men du kan ju testa själv lite så kanske du lär dig lite också ;)
Jag hjälper om du behöver hjälp...
Mvh,
ThomasSv: REGEXP?! HUR??
<code>
Private Function GetHead(Mail As String) As String
On Error Resume Next
Dim RegExp As Object
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.Pattern = "^(?:.+(?:\r?\n))*(?!\r?\n).+"
GetHead = .Execute(Mail)(0)
End With
End Function
</code>
Följande ska hämtar ut antalet totala sektioner...
<code>
Private Function GetSectionCount(Body As String, Boundary As String) As Integer
On Error Resume Next
Dim RegExp As Object
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.Pattern = "(" & Replace(Boundary, ".", "\.") & ")[\w\W]*?(?:\r?\n){2}--(?=\1)"
GetSectionCount = .Execute(Body).Count
End With
End Function
</code>
Ovanstående kan det dock finnas något fel i, men du får testa...
Mvh,
ThomasSv: REGEXP?! HUR??
har fått ut del ett av bilaga nu:)
Stooooooooooooooooooooort tack för denna hjälp, ska skriva in "Thanx to Plutten/Pellesoft" i koden.
EDIT: Jaha, det hade kommit in mera:) ska kolla det oxå.
/BSv: REGEXP?! HUR??
Du kan byta plats på textblock, ta bort valda bitar etc...
Men läs in dig lite mer på själva syntaxen så ser du vad du kan göra.
http://www.regular-expressions.info har som sagt information om det.
Dock tror jag inte VB6 versionen av regular expressions stödjer exakt allt, men det mest grundläggande och något som heter lookahead...
Mvh,
ThomasSv: REGEXP?! HUR??
jag vet inte hur ja ska fixa den biten nu men ja labbar lite så ser vi hur det går.
Ska läsa mer om detta sen, verkar va en bra sak.
/BSv: REGEXP?! HUR??
Om den fortfarande retunerar 0 kommentera bort "On Error Resume Next" och se om det blir något fel...
<code>
Private Function GetSectionCount(Body As String, Boundary As String) As Integer
On Error Resume Next
Dim RegExp As Object
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.Global = True
.IgnoreCase = True
.Pattern = "(" & Replace(Boundary, ".", "\.") & ")(?!"")[\w\W]*?(?:\r?\n){2}--(?=\1)"
GetSectionCount = .Execute(Body).Count
End With
End Function
</code>
Mvh,
ThomasSv: REGEXP?! HUR??
Kan det va Boundary som är fel?
I första koden där vi skrev in den manuellt så hade du satt ett "\" före punkten i mitten.
Jag har testat enbart strängen utan "\" och med sådan.
/BSv: REGEXP?! HUR??
Den ska skickas in i ren text, du ska inte ersätta . med \. för det gör funktionen...
Inga extra tecken förrutom det som är mellan cituationstecknen...
Mvh,
ThomasSv: REGEXP?! HUR??
Det funkar nu, retunerar 3. på ovan mail.
/BSv: REGEXP?! HUR??
Du har då grundkoden där, nästan samma mönster för att hämta ut sektionerna...
Mvh,
ThomasSv: REGEXP?! HUR??
hur sätter jag in getsectioncount? Ska jag köra den i en loop?
om jag skriver denna kod:
CompMail = Replace(CompMail, GetHead(CompMail), "")
så tar jag bort headern i mailet.
om ja sen annropar denna:
Private Function Getatt(Mail As String) As String
On Error Resume Next
Dim RegExp As Object
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.Pattern = "(" & Replace(Boundary, ".", "\.") & ")(?!"")[\w\W]*?(?:\r?\n){2}--(?=\1)"
Getatt = .Execute(Mail)(0)
End With
End Function
Då får jag ut detta: (nerbantade bilagor med flit här:)
This is a multi-part message in MIME format.
------_=_NextPart_001_01C46978.EC4BBFAE
Content-Type: audio/wav;
name="type.wav"
Content-Transfer-Encoding: base64
Content-Description: type.wav
Content-Disposition: attachment;
filename="type.wav"
UklGRl4RAABXQVZFZm10IBAAAAABAAEAESsAABErAAABAAgAZGF0YTkRAACAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIB+fHh5e3x8hJGOjI6LgX13kIpvX1xh
cHFvjY+VlJyxpGhwiJ+da0FEcX58X1+DmZyViYmDjZiVj5KhqZ+IcV9TRjgxOE9rgYuTo7vT2cuw
mY2Fdlw/Mj5adX97dXeBiIN3b3iRrLy9ta2mm4drUUI/Q0ZIT2F5kqGpr7e+va2Ue25ucW9pZmt2
fnppV1BZanqFj56yxMq/qpWHfG9eTUNETlhgaHWIm6epo52Zl5GIgH+FjpCHeGlgW1VOSlBjfpal
q6+zt7WolYJ1bmhgVVBTXmx2fICGjZKQi4eKkpugn5yYkod2YU9HSVBZYm1+kaGqqqako6CYintx
------_=_NextPart_001_01C46978.EC4BBFAE
Content-Type: audio/wav;
name="online.wav"
Content-Transfer-Encoding: base64
Content-Description: online.wav
Content-Disposition: attachment;
filename="online.wav"
UklGRggYAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YeQXAAD7/wMA9/8EAPL/4P+O
/xf/O/6R/ff8Cf3T/AL9Bv20/kkBLwSMBbwFFgXwA48H8wwCEDUPRQ2fDY0UsRqqFvIEOfOU6rTm
K9gsyL7Bd8Iwyk/dBgBFH7Io6ycXMXlFO0tlNNwaThXjETABp/JW9HT68PTT6KbsjPtT9HDdpsyr
0APTQMHntkXI/etxBLYW7i/iT2RcNFU8VYFbt1bRNnwMre4s4DzK6a9coJOfLq1Ku3PW8foMFOsU
ORJ+IUc28jkTJEAStBTpH5IkkybjJiIjixt6DZ8JPPwm24m1lqMIqT+zqbGerJzFg+8aHXM8YE4w
XSVjTGAZWdJLCCU98vHFR7YcvM60paJCnX22Zt56AmoXDyeEM1I3+j7URJ8/5ibrBnb5pAIuBtD2
ROKm2+npmvfj+ezv8+Ks1yzZGeP/6O3oMt4Y4wgAwiODOMo2nzTGP9ZPN0vpMpgRcvK738bQ6MTj
t26qFanIvgTi8v1pBq4FwhQ2LylAojpPJqoVOhMTFXwT2Q0t/jDyofLrADUNCwNl6HvYl+B17Gnr
3th9zNvVkOt9A9QSaRn+HPUnOzuJTyRPgjPSFD8FZQNY+B3Yu7QWp7Cux8C30R7c6Of49+8SYjQA
SjdFCTLNJoEq/C5oG8761+Ir3o3mieup6KrhPt5Q4iXzbALdAKLx/eT07ncFIxAECeYB1An/Hywz
------_=_NextPart_001_01C46978.EC4BBFAE--
.
Detta är ju ok, men hur jag sen ska dela dessa går jag bet på.
så föklara gärna om det finns inbyggt att få ut sektionerna som är 3 i detta fall.
MVH / BSv: REGEXP?! HUR??
Återkommer om en stund...
Mvh,
ThomasSv: REGEXP?! HUR??
<code>
Private Function GetAtt(Mail As String, Boundary As String, Index As Integer) As String
On Error Goto ErrHandler
Dim RegExp As Object
Dim Res As String
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.Global = True
.IgnoreCase = True
.Pattern = "(" & Replace(Boundary, ".", "\.") & ")(?!"")\s*(?:\r?\n)([\w\W]*?)(?:\r?\n){2}--(?=\1)"
Res = .Execute(Mail)(Index) & Boundary
Res = .Replace(Res, "$2")
End With
Set RegExp = Nothing
GetAtt = Res
Exit Function
ErrHandler:
'Om koden kommer hit är det troligen ett ogiltligt Index
GetAtt = ""
Exit Function
End Function
</code>
För att få ut allt kan du fast lägga in den i en loop eller skriva om allt, det är en bra kod att starta från, om den fungerar som den ska ;)
Fungerar den inte fixar vi det, inga problem...
Mvh,
ThomasSv: REGEXP?! HUR??
däremot kan jag inte skriva annat index än 0.
och då får jag ut body:n ur mailet.
Jag sitter och läser om regexp på sidan du skicka me så jag e inte inaktiv mellan dina svar, jag försöker greppa detta, jag lovar:)
/BSv: REGEXP?! HUR??
Har i alla fall testat mönstret, och det fungerar...
Mvh,
ThomasSv: REGEXP?! HUR??
Jag testade den och det vart inte bättre, 0 som index är allt jag kan använda.
Kör du denna kod ENBART på hela mailet eller gör du nått med det innan som jag missat?
jag testade (----_=_NextPart_001_01C46978\.EC4BBFAE)(?!")\s*(?:\r?\n)([\w\W]*?)(?:\r?\n){2}--(?=\1) i "editPad Pro" och då får jag samma resultat som i programmet.
/BSv: REGEXP?! HUR??
Gör så, skicka in hela mailet i Mail fältet, boundary i andra fältet och index i tredje...
Om du kör koden på texten du postat tidigare ska den fungera med index 0, 1 och 2...
Se bara till att boundary är satt till "----_=_NextPart_001_01C46978.EC4BBFAE", utan cituationstecken naturligtvis...
Om det inte fungerar tror jag det är något som inte riktigt är rätt i koden...
Det får vi ta och fixa då...
Mvh,
ThomasSv: REGEXP?! HUR??
jag testade i "Edit pro" detta mönster:
(----_=_NextPart_001_01C46978\.EC4BBFAE)(?!")\s*(?:\r?\n)([\w\W]*?)(?:\r?\n){2}--(?=\1)
som är resultatet av Pattern, och då hittas samma text som visas i mitt program.
OBS EDIT:
Jag testade "sök" igen och det BORDE faktiskt bli rätt som du säger...index 1 och 2 borde bli rätt.
/BSv: REGEXP?! HUR??
Tror det borde fungera med de ändringarna, testa!
Mvh,
ThomasSv: REGEXP?! HUR??
Det jag nu behöver göra är att sortera ut "skräpet", dvs alla "content" mm men jag ska testa att labba med det själv.
Återkommer när jag kört fast:)
Tack igen.
/BSv: REGEXP?! HUR??
Du ska notera att index 0 i fallet med mailet du postat hit retunerar själva meddelandet men den består ju också av två olika typer, en med ren text och den andra med HTML...
Index 1 och 2 retunerar datat från de bifogade filerna...
Mvh,
ThomasSv: REGEXP?! HUR??
Det är i sig tillräckligt, men för framtida bruk skulle jag behöva body:n i ren text.
OM du har lust att få till det så vore det perfa men du måste inte:)
Du ska kanske skriva en bra artikel om detta i forumet? På svenska.
/BSv: REGEXP?! HUR??
GetHead hette den väl? =)
Mvh,
ThomasSv: REGEXP?! HUR??
Men en artikel om mailformat och hur man ska göra för att få ut viss information skulle ju kunna vara något...
Det är en hel del att tänka på när man hanterar mail...
De kan vara i ren text, HTML och bifogningar och allt kan vara encoded som quoted-printable, base64 eller helt enkelt ingenting...
Sedan kan subject och andra saker också vara encoded med samma sak men med lite annorlunda utsende...
Har skrivit funktioner för att konvertera om dem till ren text också, men som sagt så är allt i VB.NET...
Vad menar du med att få ut body:n i ren text?
Mvh,
ThomasSv: REGEXP?! HUR??
Jag menade att få ut body-texten i den vanliga texten, inte den i html, men ja ska fixa detta:)
Ren text är väl just vad ALL är redan:)
/BSv: REGEXP?! HUR??
De är inom egna boundary sektioner och huvudet i den första sektionen säger vilken boundary de två olika meddelandeelementen använder...
Så, om du tar ut huvudet på de olika segmenten och på segment 1 (Index 0) tar du ut boundary och använder samma funktion en gång till som retunerar ett segment men slänger in nästa boundary så får du ut de två olika segmenten...
Hoppas du förstår, tappade den röda tråden för ett tag sedan när jag bara skriver det jag tänker på ;)
Mvh,
ThomasSv: REGEXP?! HUR??
Jag förstår vad du menade och det va så jag tänkte.
Jag undrar, om ja lyckas hitta "Content" strängarna, vilket jag nu lyckats me, så kan ja köra en replace på dessa för att ta bort dom, men hur får ja me efterföljande text?
Det står ju tex:
Content-Type: audio/wav;
name="type.wav"
Content-Transfer-Encoding: base64
Content-Description: type.wav
Content-Disposition: attachment;
filename="type.wav"
och dessa "Contens-" har ja lyckats hitta me regexp, hur replacear (swinglisch) jag det som kommer efter?
EDIT: "Content.*" funkade visst:)
EDIT2 : Jag vet inte hur jag ska göra för att få med alla i ett svep, alltså, jag borde ju få 4 träffar på "Content-" men får bara en. Varför?
EDIT3: (jag ger mig inte:) .Pattern = "Content-[a-zåäö].*(?:\r?\n).*(?:\r?\n).*"
Denna gör det jag vill, är den korrekt då?
EDIT4: (Ska sova efter denna...)
Den gjorde som ja ville på det mail jag postade här, ett annat däremot gick inte. Då blir bilagan korrupt. Tar jag bort ".*" så funkar en del andra mails men inte alla, så det är nått fel i det mönstret.
Gonatt tills vidare, ses vid 07-tiden:)
/BSv: REGEXP?! HUR??
Du är lite envis du, men det är bara bra för du börjar plocka upp det mer grundläggande i Regular Expressions =)
Om du vill fånga alla Content så ska du först analysera vad de är placerade efter för mönster...
Titta till exempel så ditt exempel...
Content-Type: audio/wav;
name="type.wav"
Content-Transfer-Encoding: base64
Content-Description: type.wav
Content-Disposition: attachment;
filename="type.wav"
Vad har vi för mönster här?
Jo!
1. Varje ny "egenskap" börjar på en ny rad helt i början med en stor bokstav...
2. Om något slutar på ";" så finns det fler egenskaper för "huvudegenskapen".
3. Vad är då mönstret? ;)
Ok, för det första så kan man ju skriva radbrytningar på följande sätt som jag brukar använda: <b>(?:\r?\n)</b>
Vad betyder då allt? Jo, parenteserna använder jag för att gruppera det hela.
<b>?:</b> direkt efter första parentesen säger att jag inte vill fånga dess värde...
<b>\r</b> motsvarar en "Catridge Return", alltså ett enterslag och i VB språk är det samma som en vbCr. <b>?</b> direkt efter betyder "noll eller en gång", alltså den behöver inte finnas men den får finnas en gång...
<b>\n</b> motsvarar "line-feed" som är en vbLf i VB.
Så vad säger det hela då?
Jo, <b>(?:\r?\n)</b> kommer att matcha på både vbCrLf och vbLf vilka båda betyder ny rad...
. betyder ungefär "alla tecken förrutom ny rad tecknet", så den matchar allt som är på samma rad...
+ betyder >=1 gånger
* betyder >=0 gånger
? betyder 0 eller 1 gånger
{2} betyder två gånger och {2, 10} betyder minst 2 gånger, max 10 gånger...
Ett frågetecken bakom de fyra ovanstående betyder "ta så få du kan, alltså den är lat". =)
Så, ett litet mönster som plockar ut alla en och en skulle bli liknande...
(?:^|\r?\n)Content-[^:]+:\s+((?:.+?;\s*(?:\r?\n))+.+)|(?:^|\r?\n)Content-[^:]+:\s+(.+)
Mönstret kommer att plocka ut alla "Content-" egenskaper en och en...
Jag har inte förklarar precis allt som jag har använt i mönstret, men du listar nog ut vad allt betyder med tiden ;)
Du kan nog deklarera en objekt variabel som du sen använder "Set variabel = RegExp.Execute(Huvudvariabel)"
Då blir objektvariabeln en grupp med alla matchade värden som du kan komma åt...
Testa dig fram, du listar nog ut hur det används ;)
Kika även in på DevGuru: http://www.devguru.com/Technologies/vbscript/quickref/regexp.html och läs in dig på VBScript RegExp objektet och Matches samt Match objekten så kan du nog komma långa på egen hand...
Mvh,
ThomasSv: REGEXP?! HUR??
Skönt att du inte tröttnar (än*s*)
Jag har pulat in koden nu och det fungerar mycket bra, jag ska sätta mig in i detta nu ordentligt, mycket kraftfullt.
Jag postar en liten snutt till, mest för att se om det går att lösa med Regexp:
Detta nedan ska göra om
"Content-Type: audio/wav;
name="xfiles 01-01.wav""
Som jag får ut via en funktion (GetContents(attachment, 0)
Sen splitar jag med ";" och efter det sorterar jag ut lite skräptecken.
Detta används för att skapa rätt filtyp.
'*******************************************************************
tmp = Split(GetContents(attachment, 0), ";")
tmp(1) = Replace(tmp(1), vbCrLf, "")
tmp(1) = Replace(tmp(1), Chr(9), "")
tmp(1) = Replace(tmp(1), Chr(13), "")
tmp(1) = Replace(tmp(1), Chr(34), "")
pPath = tmp(1)
längd = Len(pPath)
temp = tmp(1)
Do Until Right$(temp, 1) = "="
temp = Mid$(temp, 1, Len(temp) - 1)
start = Len(temp) + 1
Loop
stopp = längd - start
stopp = stopp + 1
temp = Mid$(pPath, start, stopp)
lblfiletype.Caption = Trim(temp)
'**********************************************************************
Du ska ha stort tack:)Sv: REGEXP?! HUR??
Nu är jag inte riktigt säker på vad du vill få ut, men jag antar att det är själva filnamnet du vill få ut...
RegExp.Pattern = "^[^=]+=\s*""([^""]+?)\.([^""\.]+)""[\w\W]*$"
Variabel = RegExp.Replace(Variabel, "$1" & vbTab & "$2")
Ovanstående ska ersätta den inskickade texten med "filnamn vbTab filändelse".
Det du skickar in måste vara en text som liknar den du postat här sist...
Mvh,
ThomasSv: REGEXP?! HUR??
Jag ska testa, funkar det bra är det ju mindre kod att göra samma sak med:)
/BSv: REGEXP?! HUR??
RegExp.Pattern = "^Content-Type[\w\W]+?name=\s*""([^""]+?)""[\w\W]*$"
Variabel = RegExp.Replace(Variabel, "$1")
Låt mig gissa, du gör en mailklient? =)
Mvh,
ThomasSv: REGEXP?! HUR??
Tack.
Det är hela namnet jag ville ha ut och JA, det är en variant av mailklient:)
/BSv: REGEXP?! HUR??
Loopar där du ska ändra en sträng hela tiden har en tendens att vara lite sega ibland samt att de kan ta upp en hel del minne eftersom du kopierar strängar hit och dit...
Tror jag ska fortsätta på min mailklient som jag även bygger in stöd för att filtrera bort SPAM i =)
Om du får fler problem eller har andra frågor är det bara att fråga...
Mvh,
ThomasSv: REGEXP?! HUR??
=_c2477bd3f9829fdd713a371c316aeaeb
den tas inte av mönstret ovan så det blir fel.
sen ser den ut så här: --=_c2477bd3f9829fdd713a371c316aeaeb
utom sista som då ser ut: --=_c2477bd3f9829fdd713a371c316aeaeb--
EDIT: Denna kom från hotmail:
"----=_NextPart_000_7d7_4f2f_4dfa"
Det verkar som "=" stör detta.
Bekräftat nu, tog bort "=" på alla och testade, då formateras det rätt.
Kan du fixa mönstret är du bussig?:)
sen finns det mail med attachment UTAN boundary, hur dessa kan funka hajjar ja inte men mitt program blir ju galet då.
/BSv: REGEXP?! HUR??
Det ska inte spela någon roll hur själva boundaryn ser ut, mönstret ska alltid lyckas hämta ut det...
Om det inte existerar boundary men det ändå finns bifogningar skulle jag nog till 99,9% säkerhet säga att det mailet är felformaterat...
Posta något exempel på hur mailen ser ut...
Mvh,
ThomasSv: REGEXP?! HUR??
Plutten:
Mailet som inte funkar ser ut så här:
Received: from hotmail.com ([xx.xx.xx.xx])
by xxxxxxxxxxxxx(Extreme Mail Server) with ESMTP id BIA74420
for <xxxxx@xxxx.xx>; Thu, 29 Jul 2004 00:04:37 +0200
Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC;
Wed, 28 Jul 2004 15:04:35 -0700
Received: from xxx.xxx.xxx.xxx by by18fd.bay18.hotmail.msn.com with HTTP;
Wed, 28 Jul 2004 22:04:35 GMT
Subject: test
Date: Wed, 28 Jul 2004 22:04:35 +0000
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_000_7d7_4f2f_4dfa"
Message-ID: <BAY18-F283Mtt8j5VH90005ec9f@hotmail.com>
X-OriginalArrivalTime: 28 Jul 2004 22:04:35.0394 (UTC) FILETIME=[DE4E7A20:01C474EE]
This is a multi-part message in MIME format.
------=_NextPart_000_7d7_4f2f_4dfa
Content-Type: text/plain; charset=iso-8859-1; format=flowed
testtest
_________________________________________________________________
Hitta rätt på nätet med MSN Sök http://search.msn.se/
------=_NextPart_000_7d7_4f2f_4dfa
Content-Type: audio/wav; name="online.wav"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="online.wav"
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgA==
------=_NextPart_000_7d7_4f2f_4dfa--
.
'*****************slut här vid punkt************''
Som du ser är det "=" med i mailets boundary, då funkar inte formateringen av bilagan.
tar jag manuellt bort "=" ur detta mail funkar det perfekt.
alla mail jag fått med ett "=" i boundary blir fel.
/BSv: REGEXP?! HUR??
Varifrån hämtar du ut boundary och hur?
Om du tänker på getHead funktionen varje gång du anropar den så kanske du ska döpa om den till getHeader ;)
1. Ta ut boundary från huvudet.
2. Kör den genom funktionen som jag postat här...
3. Om allt ändå skiter sig beskriv vilka funktioner du använder, hur du använder dem och vad du skickar in... Se även till att ditt boundary verkligen har värdet den ska ha och allt annat är rätt.
Och framöver, posta inte hela datat utan bara själva strukturen på datat...
Alltså, kapa ner innehållet överallt, börjar bli segladdat den här tråden...
Nu ska jag gå och lägga mig.
God natt!
Mvh,
ThomasSv: REGEXP?! HUR??
GetHead är väl inte fel?:)
EDIT igen...
Jag blir inte klok på detta, kan jag maila dig hela mitt projekt så du får kollla?
/BSv: REGEXP?! HUR??
Adress: thomas@eurocitynet.nu
Mvh,
ThomasSv: REGEXP?! HUR??
Mitt VS.NET tog bort "Set" och jag kom inte ihåg att sätta tillbaka det innan jag mailade dig...
Mvh,
ThomasSv: REGEXP?! HUR??
Tack för all hjälp iaf.
/B