Quantcast
Channel: Advanced Intellect Blog - aspNetPOP3
Viewing all articles
Browse latest Browse all 6

Parsing Cell Phone (mobile) generated emails

$
0
0

I have a number of customers who need to parse cell phone (mobile) generated emails. These emails come in configurations I never dreamed possible. Although they are technically Mime compliant, their individual parts can be ordered strangely, or have unique headers that normally aren't found in a standard message.

I was sent an email request from a developer (Thanks Cara!) about parsing a T-Mobile generated message. She needed to find and extract the text body part. If a text body part wasn't found, then the html body part was to be found, and converted to plain text. The other requirement was to find all of the images, and download (save) them to a directory.

Below is a code example is something I whipped up for her. She used it as a basis to get started with her application. Error checking has been left out, to keep the code short, workable, but complete.

As always, if anyone has any questions or comments, please let me know.

Thanks!
Dave Wanta

string path =  "t_mobile.eml";

MimeMessage m = MimeMessage.ParseFile( path );

MimePart textPart = m.TextMimePart;
if( textPart == null )
{
	//try and find it, by finding the first inline text part
	MimePartCollection inlineParts = m.InLineParts;
	if( ( inlineParts != null ) && ( inlineParts.Count >0 ) )
	{
		foreach( MimePart part in inlineParts )
		{
			if( (part.Name != null ) && ( part.Name.EndsWith(".txt") ) && ( part.ContentTypeString == "text/plain") )
			{
				//then we found our part
				textPart = part;
				break;
			}
		}
	}
}

string plainText = string.Empty;
if( textPart != null )
{
	plainText = textPart.DecodedText();
}

if( plainText.Length == 0 )
{
	//find the first html part.
	//get the plain text from the html part

	foreach( MimePart part in m.RetrieveAllParts() )
	{
		if( (part.ContentTypeString != null ) && ( part.ContentTypeString.ToLower() == "text/html") )
		{
			string html = part.DecodedText();
			//convert the Html to plain formatted text
			plainText = Utility.ConvertHtmlToText( html).Trim();
			break;
		}
	}
}

//extract all images, and save them to the temp directory
foreach( MimePart part in m.RetrieveAllParts() )
{
	if( part.IsImage() )
	{
		//normally, would need to check for images that already have the same filename
		//and rename accordingly
		//in this example, just save the images to the temp directory
		part.Save("c:\\temp\\");
	}
}


Viewing all articles
Browse latest Browse all 6

Trending Articles