Ik maar hier gebruik van VB.NET en Regular Expressions. Mocht je een oplossing in een verwante taal met of zonder RegEx hebben dan ben ik ook geinteresseerd.
Een voorbeeld van een gedeelte van een header:
Received: [23.233.233.299] by mailer
Received: Mailvirusscanner
MessageID: <34tj4tioj43t@mailhost.nl>
To: "Some One" <Someone@here.com>, Some One" <Someone@here.com>,
"Some One" <Someone@here.com>, Some One" <Someone@here.com>,
"Some One" <Someone@here.com> Some One" <Someone@here.com>,
Date: Thu, 30 Jan 2003 15:28:30 +0100
Nu gebruik ik het volgende stuk code om de header op te spliten.
De volgende problemen:
Je ziet in mijn voorbeeld header dat er meerdere Received: regels zijn. Hoe kan ik een RegEx maken die deze alle drie er uit haalt en achter elkaar plakt?
De To header bevat meerdere regels.... zoals het nu is leest de regularexpression alleen de 1e regel. Hoe kan ik dit wijzigen zodat hij alles mee pakt tot de volgende header?
De regular expression van de To header laat alleen het eerste wat tussen " " staat zien. Vb als de header zoals hierboven is krijg ik alleen "Someone",, terug.
Een voorbeeld van een gedeelte van een header:
Received: [23.233.233.299] by mailer
Received: Mailvirusscanner
MessageID: <34tj4tioj43t@mailhost.nl>
To: "Some One" <Someone@here.com>, Some One" <Someone@here.com>,
"Some One" <Someone@here.com>, Some One" <Someone@here.com>,
"Some One" <Someone@here.com> Some One" <Someone@here.com>,
Date: Thu, 30 Jan 2003 15:28:30 +0100
Nu gebruik ik het volgende stuk code om de header op te spliten.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Private Sub setHeader(ByRef m As GetMail.mailmessage, ByVal h As String)
'extract standard headers values from header string using regular expressions
'and save to the mailmessage class
m.To = Regex.Match(h, "To:(?<to>[^\n]+)\n", RegexOptions.IgnoreCase).Groups("to").Value
m.From = Regex.Match(h, "From:(?<from>[^\n]+)\n", RegexOptions.IgnoreCase).Groups("from").Value
m.Cc = Regex.Match(h, "CC:(?<cc>[^\n]+)\n", RegexOptions.IgnoreCase).Groups("cc").Value
m.Subject = Regex.Match(h, "Subject:(?<subject>[^\n]+)\n", RegexOptions.IgnoreCase).Groups("subject").Value
'clear existing header values
'this is just incase the same mailmessage instance is being reused
'for different mails
m.Headers.Clear()
'extract less standard headers values from header string using regular expressions
'and add to the mailmessage.headers.
hReplyTo = Regex.Match(h, "Reply-To:(?<ReplyTo>[^\n]+)\n", RegexOptions.IgnoreCase).Groups("ReplyTo").Value
hMessageID = Regex.Match(h, "Message-ID:(?<MessageID>[^\n]+)\n", RegexOptions.IgnoreCase).Groups("MessageID").Value
hDate = Regex.Match(h, "Date:(?<Date>[^\n]+)\n", RegexOptions.IgnoreCase).Groups("Date").Value
End Sub |
De volgende problemen:
Je ziet in mijn voorbeeld header dat er meerdere Received: regels zijn. Hoe kan ik een RegEx maken die deze alle drie er uit haalt en achter elkaar plakt?
De To header bevat meerdere regels.... zoals het nu is leest de regularexpression alleen de 1e regel. Hoe kan ik dit wijzigen zodat hij alles mee pakt tot de volgende header?
De regular expression van de To header laat alleen het eerste wat tussen " " staat zien. Vb als de header zoals hierboven is krijg ik alleen "Someone",, terug.