Welcome Guest! To enable all features please Login or Register.

Notification

Icon
Error

Options
Go to last post Go to first unread
ivan  
#1 Posted : Monday, May 2, 2011 12:28:49 AM(UTC)
ivan

Rank: Administration

Groups: Administrators
Joined: 11/11/2010(UTC)
Posts: 1,022

Thanks: 9 times
Was thanked: 41 time(s) in 41 post(s)
Delphi Example

The following code demonstrates how to convert email to a HTML page and display it using Web browser in C#.

After the email was converted to HTML page, you can browse it with web browser. You can get everything in the HTML page such as From, To, Cc, Subject, Date, Attachments and Embedded images.

Code:

// The following example codes demonstrate converting email to HTML page
// To get full sample projects, please download and install EAGetMail on your machine.
// To run it correctly, please change email server, user, password, folder, file name value to yours

Unit Unit1; 

Interface 

Uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, StrUtils, EAGetMailObjLib_TLB; // Add EAGetMail Unit 

Type 
  TForm1 = Class(TForm) 
    Button1: TButton; 
    Procedure Button1Click(Sender: TObject); 

    Procedure ConvertMailToHtml(fileName: WideString); 
    Procedure GenerateHtmlForEmail(htmlName: WideString; 
              emlFile: WideString; tempFolder: WideString); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  End; 

Const 
  MailServerPop3 = 0; 
  MailServerImap4 = 1; 

  CRYPT_MACHINE_KEYSET = 32; 
  CRYPT_USER_KEYSET = 4096; 
  CERT_SYSTEM_STORE_CURRENT_USER = 65536; 
  CERT_SYSTEM_STORE_LOCAL_MACHINE = 131072; 

Var 
  Form1: TForm1; 

Implementation 

{$R *.dfm} 

Procedure TForm1.ConvertMailToHtml(fileName: WideString); 
Var 
  mainName, htmlName, tempFolder: WideString; 
  oTools: TTools; 
Begin 
  // Remove .eml extension
  mainName := LeftStr( fileName, length(fileName)-4 ); 
  htmlName := mainName + '.htm'; 
  tempFolder := mainName; 

  oTools := TTools.Create(Application); 
  If Not oTools.ExistFile(htmlName) Then 
  Begin 
    // We haven't generate the html for this email, generate it now.
    GenerateHtmlForEmail(htmlName, fileName, tempFolder ); 
  End; 

End; 

Procedure TForm1.GenerateHtmlForEmail(htmlName: WideString; 
emlFile: WideString; tempFolder: WideString); 
Var 
  oMail: TMail; 
  oTools: TTools; 
  i, x, UBound, XBound: Integer; 
  att, tatt: IAttachment; 
  addr: IMailAddress; 
  addrs, atts, tatts: OleVariant; 
  html, hdr, attname, tattname: WideString; 
Begin 
  oTools := TTools.Create(Application); 
  oMail := TMail.Create(Application); 
  oMail.LicenseCode := 'TryIt'; 

  oMail.LoadFile( emlFile, false ); 

  Try 
    If oMail.IsEncrypted Then 
      oMail.Load(oMail.Decrypt(nil).Content); 
  Except 
    On ep:Exception Do 
      ShowMessage( 'Decrypt Error: ' + ep.Message ); 
  End; 

  Try 
    If oMail.IsSigned Then 
      oMail.VerifySignature(); 
  Except 
    On ep:Exception Do 
      ShowMessage( 'Verify Digital Signature Error: ' + ep.Message ); 
  End; 

  html := oMail.HtmlBody; 
  hdr := hdr + '<font face="Courier New,Arial" size="2">'; 
  hdr := hdr + '<b>From:</b> ' + oMail.From.Name + '&lt;' + 
      oMail.From.Address + '&gt;' + '<br>'; 

  addrs := oMail.ToAddr; 
  UBound := VarArrayHighBound( addrs, 1 ); 
  If( UBound >= 0) Then 
  Begin 
    hdr := hdr + '<b>To:</b>'; 
    For i:= 0 To UBound Do 
    Begin 
      addr := IDispatch(VarArrayGet(addrs, i)) As IMailAddress; 
      hdr := hdr + addr.Name + '&lt;' + addr.Address + '&gt'; 
      If( i < UBound ) Then 
        hdr := hdr + ';'; 
    End; 
    hdr := hdr + '<br>' + #13#10; 
  End; 

  addrs := oMail.Cc; 
  UBound := VarArrayHighBound( addrs, 1 ); 
  If( UBound >= 0) Then 
  Begin 
    hdr := hdr + '<b>Cc:</b>'; 
    For i:= 0 To UBound Do 
    Begin 
      addr := IDispatch(VarArrayGet(addrs, i)) As IMailAddress; 
      hdr := hdr + addr.Name + '&lt;' + addr.Address + '&gt'; 
      If( i < UBound ) Then 
        hdr := hdr + ';'; 
    End; 
    hdr := hdr + '<br>' + #13#10; 
  End; 

  hdr := hdr + '<b>Subject:</b>' + oMail.Subject + '<br>' + #13#10; 

  // Parse attachment
  atts := oMail.Attachments; 
  UBound := VarArrayHighBound( atts, 1 ); 
  If( UBound >= 0 ) Then 
  Begin 
    // Create a temporal folder to store attachments.
    If Not oTools.ExistFile(tempFolder) Then 
      oTools.CreateFolder(tempFolder); 

    hdr := hdr + '<b>Attachments:</b>'; 
    For i:= 0 To UBound Do 
    Begin 
      att := IDispatch(VarArrayGet(atts, i)) As IAttachment; 
      If LowerCase(att.Name) = 'winmail.dat' Then 
      Begin 
        // this is outlook rtf (TNEF) attachment, decode it here
        tatts := oMail.ParseTNEF(att.Content, true ); 
        XBound := VarArrayHighBound(tatts, 1 ); 
        For x:= 0 To XBound Do 
        Begin 
          tatt := IDispatch(VarArrayGet(tatts,x)) As IAttachment; 
          tattname := tempFolder + \' + tatt.Name; 
          tatt.SaveAs(tattname, true); 
          hdr := hdr + '<a href="' + tattname + '" target="_blank">' 
            + tatt.Name + '</a> '; 
        End; 
      End 
      Else 
      Begin 
        attname := tempFolder + \' + att.Name; 
        att.SaveAs(attname, true); 
        hdr := hdr + '<a href="' + attname + '" target="_blank">' 
            + att.Name + '</a> '; 
        // show embedded images
        If att.ContentID <> '' Then 
        Begin 
          // StringReplace doesn't support some non-ascii characters very well.
          html := StringReplace( html, 'cid:' + att.ContentID, attname, 
             [rfReplaceAll, rfIgnoreCase]); 
        End 
        Else If Pos('image/', att.ContentType ) = 1 Then 
        Begin 
          html := html + '<hr><img src="' + attname + '">'; 
        End; 

      End; 
    End; 
  End; 

  hdr := '<meta http-equiv="Content-Type" content="text-html; charset=utf-8">' + hdr; 
  html := hdr + '<hr>' + html; 
  oTools.WriteTextFile( htmlName, html, 65001 ); 

End; 

Procedure TForm1.Button1Click(Sender: TObject); 
Begin 
  Try 
      ConvertMailToHtml('c:\my folder\test.eml'); 
  Except 
    On ep:Exception Do 
      ShowMessage( 'Error: ' + ep.Message ); 
  End; 

End; 

End. 

Click here to read original topic - full version ...

If you have any comments or questions about above example codes, please add your comments here.
Users browsing this topic
Forum Jump  
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Powered by YAF.NET | YAF.NET © 2003-2019, Yet Another Forum.NET
This page was generated in 0.045 seconds.

EXPLORE TUTORIALS

© All Rights Reserved, AdminSystem Software Limited.