Rank: Administration
Groups: Administrators
Joined: 11/11/2010(UTC) Posts: 1,153
Thanks: 9 times Was thanked: 55 time(s) in 55 post(s)
|
Delphi ExampleThe 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 + '<' +
oMail.From.Address + '>' + '<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 + '<' + addr.Address + '>';
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 + '<' + addr.Address + '>';
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.
|