ivan
  • ivan
  • 100% (Exalted)
  • Administration Topic Starter
14 years ago
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.


// 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.

EXPLORE TUTORIALS

© All Rights Reserved, AIFEI Software Limited & AdminSystem Software Limited.