MIME Code Example: Recursive decoding
C#
private void MimeDecode(string EntityHeaders, string Entity)
{
Mime mime1 = new Mime();
mime1.MessageHeadersString = EntityHeaders;
mime1.Message = Entity;
mime1.DecodeFromString();
for (int i = 0; i <= mime1.Parts.Count - 1; i++)
{
//If the Content-Type is "Multipart/????", then that part is an encoded entity
if (mime1.Parts[i].ContentType.ToLower().StartsWith("multipart"))
{
MimeDecode(mime1.Parts[i].Headers, mime1.Parts[i].DecodedString);
}
//If the part is plain text
if (mime1.Parts[i].Filename == "" &&
mime1.Parts[i].ContentType.ToString() == "text/plain")
{
//At this point we could check the ContentTypeAttr field for the charset
//and use the charset (if set) when displaying the text.
//For simplicity we will skip checking the charset in this example.
Console.WriteLine("Plain text: " + mime1.Parts[i].DecodedString);
}
//If the part has an associated Filename, it is an attachment
if (!mime1.Parts[i].Filename.Equals(""))
{
Console.WriteLine("Attachment: " + mime1.Parts[i].Filename);
}
}
}
VB6
Private Function MimeDecode(EntityHeaders As String, Entity As String)
Dim mime1 As New MIME
Dim i As Integer
mime1.MessageHeadersString = EntityHeaders
mime1.Message = Entity
mime1.DecodeFromString
For i = 0 To mime1.PartCount - 1
If (InStr(LCase(mime1.PartContentType(i)), "multipart") > 0) Then
MimeDecode mime1.PartHeaders(i), mime1.PartDecodedString(i)
ElseIf (mime1.PartFilename(i) = "" And mime1.PartContentType(i) = "text/plain") Then
Debug.Print "Plain text: " & mime1.PartDecodedString(i)
ElseIf (mime1.PartFilename(i) <> "") Then
Debug.Print "Attachment: " & mime1.PartFilename(i)
End If
Next i
End Function
This can of course be expanded to check for other ContentTypes or conditions. This should provide you with a basic idea of how to approach decoding nested MIME entities recursively.
Note: The above code examples use the API of IPWorks Version 8. This code will need to be modified slightly if you are using an older version of IPWorks
We appreciate your feedback. If you have any questions, comments, or suggestions about this article please contact our support team at support@nsoftware.com.