Ropardo Sowftware development company

Experience software development with ROPARDO S.R.L.

RSS Feed
RSS Feed
  • Home
  • About ROPARDO S.R.L
  • Our websites

Parse MIME string to retrieve message information

The purpose is to gain access to the message information in code by extracting it from a
raw email message. For this we will parse the content of the email using the IMessage interface.

We assume we have a string containing a MIME encoded email, which we will send as input parameter to the constructor of our parsing class. Using an ADODB object, will write the string directly into a stream and then flush it in order to access the message.

  public class EmailParser
  {
    private Message _msg = null;
 
    public EmailParser(string sContent)
    {
        ADODB.StreamClass strc = new ADODB.StreamClass();
 
        strc.Open(Missing.Value,
            ADODB.ConnectModeEnum.adModeUnknown,
            ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified,
            "",
            "");
        strc.Type = ADODB.StreamTypeEnum.adTypeText;
        strc.Charset = "UTF-8";
        strc.WriteText(sContent, ADODB.StreamWriteEnum.adWriteChar);
        strc.Position = 0;
        strc.Type = StreamTypeEnum.adTypeBinary;
        strc.Flush();
        _msg = new CDO.MessageClass();
        _msg.DataSource.OpenObject(strc, "_Stream");
    }
}

The CDO Message object provides access to the email header information, bodyparts and attachments. We can then simply expose the needed properties:

    public string Subject
    {
      get { return _msg.Subject; }
    }
    public string From
    {
      get { return  _msg.From; }
    }
    public string To
    {
      get { return _msg.To }
    }
    public string ReplyTo
    {
      get { return _msg.ReplyTo; }
    }
    public string CC
    {
      get { return _msg.CC; }
    }
    public DateTime SentOn
    {
      get { return _msg.SentOn; }
    }
    public DateTime ReceivedTime
    {
      get { return _msg.ReceivedTime; }
    }

Excepting messages with a single text body part, in which case the IMessage.Fields collection can be used directly, to proper retrieve the body message, one should iterate through the BodyPart objects that make up the hierarchy of content and structural units of a message.
Another particularity are the message attachments. A simple way to retrieve them is the following:

    foreach (CDO.IBodyPart bp in _msg.Attachments)
    {
      ADODB.Stream stm = bp.GetDecodedContentStream();
      byte[] bf = (byte[])stm.Read(stm.Size);
      string sFileName = bp.FileName;
 
      if (bp.FileName == "")
      {
        switch (bp.ContentMediaType.Trim().ToLower())
        {
          case "image/jpeg":
            sFileName = "unknown" + nEmbeddedUnknownCounter + ".jpg";
            break;
          case "image/gif":
            sFileName = "unknown" + nEmbeddedUnknownCounter + ".gif";
            break;
          default:
            sFileName = "unknown" + nEmbeddedUnknownCounter;
            break;
        }
      }
    }
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Get Shareaholic
Tags: .NET CDO email message MIME parser stream

 Posted in: Microsoft.NET
November 6, 2009 | Daniel Bozdoc | One Comment

One Response

  • Matt Call
    November 15, 2009
    1

    Thanx for this interesting post. But I had difficult time navigating around your website because I kept getting 502 bad gateway error. Just thought to let you know.

Leave a Reply

 


  • « Previous post
  • Next post »
  • Recent Posts

    • Installing PyGraphviz on Windows
    • Convert python object to XML representation
    • Liferay Portlet Development
    • Norway Road Show 2011 private meeting invitation
    • Oracle OpenWorld 2011
  • Ropardo is Hiring

  • Subscribe

    • Add to Google Reader or Homepage Add to netvibes TopOfBlogs
  • Recent Comments

    • Rajkumar Pomaji on Bluetooth PC Remote Control
    • Stelian Morariu on GWT 2.1 – Uploading a file using the RPC mechanism
    • Sergio on GWT 2.1 – Uploading a file using the RPC mechanism
    • Artem on Liferay: Deployment will start in a few seconds… and how to realy start
    • rkd80 on GWT 2.1 – Uploading a file using the RPC mechanism
  • Archives

    • November 2011 (1)
    • September 2011 (4)
    • July 2011 (3)
    • June 2011 (2)
    • May 2011 (4)
    • April 2011 (4)
    • March 2011 (3)
    • February 2011 (2)
    • January 2011 (2)
    • December 2010 (1)
    • November 2010 (4)
    • October 2010 (4)
    • August 2010 (3)
    • July 2010 (3)
    • June 2010 (6)
    • May 2010 (8)
    • April 2010 (7)
    • March 2010 (9)
    • February 2010 (6)
    • January 2010 (5)
    • December 2009 (7)
    • November 2009 (9)
    • October 2009 (10)
    • September 2009 (14)
    • August 2009 (10)
    • July 2009 (1)
    • June 2009 (1)
    • May 2009 (1)
    • April 2009 (1)
    • March 2009 (1)
    • October 2008 (3)
    • October 2007 (3)
    • July 2007 (4)
    • June 2007 (1)
    • May 2007 (3)
  • Meta

    • Log in
    • Entries RSS
    • Comments RSS
    • WordPress.org
  • Categories

    • News (15)
    • Ropardo Team (8)
    • Ropardo Products (6)
      • File Tracking Client (4)
      • iManagement (2)
    • Software Development (83)
      • Microsoft.NET (22)
      • Java (40)
      • Oracle (8)
      • Power Builder (3)
      • Liferay (5)
      • Lotus Notes (9)
      • xWiki (4)
    • System Adminstration (13)
      • Linux (10)
      • Windows (3)
    • Programming (1)
    • Uncategorized (3)
    • Databases (10)
      • MSSQL (5)
      • PostgreeSQL (3)
    • Microsoft.NET (1)
    • Web Development (28)
      • ASP/ASPX (3)
      • Content Management Systems (1)
      • HTML/CSS (5)
      • Javascrip/AJAX (8)
      • PHP (7)
    • Oracle E Business Suite (6)
  • Tags

    .NET ajax blog C# certification client CMS control css database Debugging django Domino Eclipse extension file tracking filter fun gentoo google Hibernate how to html image iManagement import Java javascript jQuery liferay Linux Lotus Notes lotus script Oracle Oracle BI Publisher 11g PHP portal PostgreSQL powerbuilder Python SQL Telerik velocity xml Xwiki

© 2010 ROPARDO s.r.l..

Powered by WordPress. Styled by Ropardo