Inhaltsverzeichnis

24.3.2 Klasse MimePart

Die Klasse MimePart der Komponente gb.mime repräsentiert einen Teil im Text-Körper (Body) einer MimeMessage → Kapitel 24.3.3 Klasse MimeMessage. Eine Leerzeile trennt den Header einer EMail formal vom Body. Diese Klasse können Sie erzeugen.

24.3.2.1 Eigenschaften

Die Klasse MimePart hat folgende Eigenschaften:

EigenschaftDatentypBeschreibung
CountIntegerGibt die Anzahl der Teile einer MimeMessage zurück.
ContentDispositionStringSetzt das Header-Feld 'Content-Disposition' einer MimeMessage oder gibt dessen Wert zurück.
ContentEncodingIntegerGibt die Art der Kodierung eines Teils in einer MimeMessage zurück (7Bit, 8Bit, Base64, Binary, Default, QuotedPrintable, UUEncoding.
ContentTypeStringGibt den Wert des Header-Feldes 'Content-Typ' einer MimeMessage zurück.
ContentIdStringSetzt das Header-Feld 'Content-ID' einer MimeMessage oder gibt dessen Wert zurück.
DispositionStringSetzt das Header-Feld 'Disposition' einer MimeMessage oder gibt dessen Wert zurück.
FileNameStringGibt den Datei-Namen des Anhangs zurück, der im Header-Feld 'Disposition' einer MimeMessage festgelegt wurde. Wird NULL zurückgegeben, dann wurde keine Datei festgelegt.
MessageMimeMessageSetzt den Message-Teil innerhalb einer MimePart-Struktur oder gibt diesen Message-Teil zurück.
DataStringGibt die automatisch dekodierten Nutzer-Daten eines Teils einer MimeMessage zurück. Achten Sie darauf, den Typ der Daten zu überprüfen.
Headers MimePart.HeadersMimePart.Headers[fieldname] gibt die spezifizierten Header-Felder eines Teils zurück.

Tabelle 24.3.2.1.1 : Eigenschaften der Klasse MimePart

Beispiel: Quelltext-Ausschnitte einer EMail vom Typ MimeMessage

[1] ...                                                                           
[2] Return-path: <xxxx.xx@freenet.de> 
[3] ...
[4] To: xxxx.xx@freenet.de 
[5] From: YYYY <yyy.zzz@freenet.de> 
[6] Subject: Bild-Datei 
[7] Message-ID: <56828856.4070805@freenet.de> 
[8] Date: Tue, 29 Dec 2015 14:19:18 +0100 
[9] ... 
[10] MIME-Version: 1.0 
[11] Content-Type: multipart/mixed; boundary="000100040309080505050507" 
[12] ... 
[13] <LEERZEILE TRENNT HEADER UND BODY> 
[14] This is a multi-part message in MIME format. 
[15] --000100040309080505050507 
[16] Content-Type: multipart/alternative; boundary="030406090702040408090509" 
[17] 
[18] --030406090702040408090509 
[19] Content-Type: text/plain; charset=utf-8; format=flowed 
[20] Content-Transfer-Encoding: 7bit 
[21] 
[22] Hallo Hans, 
[23] im Anhang die angeforderte Bild-Datei '8.png'. 
[24] Mit freundlichem Gruss 
[25] Honsek 
[26] 
[27] --030406090702040408090509 
[28] Content-Type: text/html; charset=utf-8 
[29] Content-Transfer-Encoding: 7bit 
[30] 
[31] <html> 
[32]   <head> 
[33]     <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
[34]   </head> 
[35]   <body text="#000000" bgcolor="#FFFFFF"> 
[36]     <font size="+1">Hallo Hans,<br> 
[37]       im Anhang die angeforderte Bild-Datei '8.png'.<br> 
[38]       Mit freundlichem Gruss<br> 
[39]       Honsek<br> 
[40]     </font> 
[41]   </body> 
[42] </html> 
[43] 
[44] --030406090702040408090509-- 
[45] 
[46] --000100040309080505050507 
[47] Content-Type: image/png; name="8.png" 
[48] Content-Transfer-Encoding: base64 
[49] Content-Disposition: attachment; filename="8.png" 
[50] 
[51] iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAO0lEQVQYlX2PyQ0AMAjDnKr7 
[52] r5x+egvIEyxwZDBFOoASxJoAEWUB0J6Zhedi5QFSh/0lkDnAd/pWK2sORyMOEhaL7BAAAAAA 
[53] SUVORK5CYII= 
[54] 
[55] --000100040309080505050507-- 
Struktur:

+ multipart/mixed
| 
+-+ multipart/alternative  2
| | 
| +-- text/plain  0
| | 
| +-- text/html  0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ANHANG 1 :  8.png attachment image/png

Abbildung 24.3.2.1.1: Darstellung der Struktur der o.a. MimeMessage

Ein Parser gibt die Struktur einer MimeMessage aus. Alle Teile der MimeMessage und ihre Hierarchie werden symbolisch darstellt.

Kommentar:

24.3.2.2 Methoden

Die Klasse MimePart verfügt nur über zwei Methoden:

MethodeBeschreibung
Add ( Part As MimePart )Fügt 'Part' als Teil der aktuellen MimeMessage hinzu.
ToString ( ) Die Funktion fügt alle mit der Add-Methode erzeugten Teile zu einer MimeMessage zusammen.

Tabelle 24.3.2.2.1 : Methoden der Klasse MimePart

Eine Beschreibung des Einsatzes der beiden Methoden finden Sie in einem Projekt im Kapitel 24.4.3.

24.3.3 Beispiel Struktur-Parser

Der vorgestellte Parser erzeugt eine Sicht auf die Struktur einer MimeMessage. Untersucht werden dabei der Header und die einzelnen Teile im Body einer MimeMessage:

B1

Abbildung 24.3.3.1: Darstellung 2 der Struktur einer weiteren MimeMessage

Der Quelltext für den Parser wird vollständig angegeben:

[1] ' Gambas class file 
[2] 
[3] Private $iLevel As Integer 
[4] Private $iFlag As Integer 
[5] Private $sBodyType As String 
[6] Private $iAttachmentCount As Integer 
[7] 
[8] Public Sub Form_Open() 
[9]   FMain.Center 
[10]   FMain.Utility = True 
[11]   btnGetStructureMimeMessage.Enabled = False 
[12] End ' Form_Open() 
[13] 
[14] Public Sub btnClose_Click() 
[15]   FMain.Close 
[16] End ' btnClose_Click() 
[17] 
[18] Public Sub btnGetStructureMimeMessage_Click() 
[19]   Dim hMimeMessage As New MimeMessage 
[20]   Dim sMessage As String 
[21]   
[22]   hMimeMessage = New MimeMessage(txaMonitor.Text) 
[23] 
[24]   $sBodyType = Scan(hMimeMessage.Part.Headers["Content-Type"], "*;*")[0] 
[25]   
[26]   sMessage = ("S T R U C T U R E  M I M E - M E S S A G E") 
[27]   txaMonitor.Insert(sMessage & gb.NewLine) 
[28]   txaMonitor.Insert(String$(String.Len(sMessage), "-") & gb.NewLine) 
[29]   txaMonitor.Insert(gb.NewLine) 
[30]   
[31] ' Parser 
[32]   txaMonitor.Insert("+ " & $sBodyType & gb.NewLine) 
[33]   ParsePart(hMimeMessage.Body, True) 
[34]   ParsePart(hMimeMessage.Part, False) 
[35]   
[36]   btnGetStructureMimeMessage.Enabled = False 
[37]   
[38] End ' btnGetStructureMimeMessage_Click() 
[39] 
[40] Public Sub ParsePart(hPart As MimePart, IsBody As Boolean) 
[41]    Dim hChild As MimePart 
[42]    Dim sMessage As String 
[43] 
[44]    If IsBody = True Then 
[45]       txaMonitor.Insert(String$($iLevel, "| ") & "| " & gb.NewLine) 
[46]       txaMonitor.Insert(String$($iLevel, "| ") & "+-" & If(hPart.Count, "+ ", "- ")) 
[47]       sMessage = hPart.ContentType & " " & hPart.FileName 
[48]       sMessage &= " " & hPart.Count & gb.NewLine 
[49]       txaMonitor.Insert(sMessage) 
[50]    Else 
[51]       If hPart.Disposition = "attachment" And Str(hPart.Count) = 0 Then 
[52]          If $iFlag = 0 Then 
[53]             txaMonitor.Insert("|" & gb.NewLine) 
[54]             Inc $iFlag 
[55]          Endif 
[56]          sMessage = ("+ Attachment ") & Str($iAttachmentCount + 1) & ": " & " " & hPart.FileName 
[57]          sMessage &= " " & hPart.Disposition & " " & hPart.ContentType & gb.NewLine 
[58]          txaMonitor.Insert(sMessage) 
[59]          Inc $iAttachmentCount 
[60]       Endif 
[61]    Endif ' IsBody ? 
[62] 
[63]    Inc $iLevel 
[64]      For Each hChild In hPart 
[65]          ParsePart(hChild, IsBody) ' Recursive call!
[66]      Next 
[67]    Dec $iLevel 
[68] 
[69]    txaMonitor.Pos = txaMonitor.Length 
[70] 
[71] End ' ParsePart(...) 
[72] 
[73] Public Sub OpenMimeMessageFile_Click() 
[74]   btnGetStructureMimeMessage.Enabled = False 
[75]   Dialog.Title = ("Select a MimeMessage-File ...") 
[76]   Dialog.Filter = ["*.txt", ("Text files"), "*", ("All files")] 
[77]   Dialog.ShowHidden = False 
[78]   Dialog.Path = Application.Path &/ "InBox"  
[79]   If Dialog.Openfile(False) Then Return ' False: 'Multiselect' ist ausgeschaltet 
[80]   
[81]   txaMonitor.Clear 
[82]   txaMonitor.Text = File.Load(Dialog.Path) 
[83]   
[84]   btnGetStructureMimeMessage.Enabled = True 
[85]   $iLevel = 0 
[86]   $iFlag = 0 
[87]   $iAttachmentCount = 0  
[88]   
[89]   Catch 
[90]   Message.Info(Error.Text) 
[91]   btnGetStructureMimeMessage.Enabled = True 
[92]   
[93] End ' OpenMimeMessageFile_Click() 

Kommentar:

Minisini schrieb in diesem Zusammenhang: Moreover, a MIME message is a recursive structure. Usually mail clients hides that by displaying the message contents linearly. So you must parse the parts recursively … .

Für eigene Struktur-Analysen benötigen Sie die Quell-Texte von EMails.

Download