Note: This is not the complete source code--just the main source file.
You can download the full source (with include files) from our sample code archive by clicking on the diskette icons.

SimpleEAV.pas

unit SimpleEAV;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, HexValidEmailLib;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    editEmail: TEdit;
    btnValidate: TButton;
    btnExit: TButton;
    memoResult: TMemo;
    Label2: TLabel;
    procedure btnExitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnValidateClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

function GetErrorString( error: Integer ): String;
function GetLicenseErrorString( error: Integer ) : String;

var
  Form1: TForm1;
  hve: IConnectionSync;

implementation

{$R *.dfm}

procedure TForm1.btnExitClick(Sender: TObject);
begin
  Application.Terminate();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Create an instance
  hve := CoConnection.CreateLicensed( 'Put your runtime key here' );

  // Identify yourself for SMTP (use your own information here)
  // See http://www.hexillion.com/docs/guides/HexValidEmail/concepts/polite_usage.htm
  hve.FromDomain := 'hexillion.com';                // The domain name of your machine
  hve.FromEmail := 'HexValidEmail@hexillion.com';   // Email address of technical contact person

  // Set timeouts (optional)
  hve.Timeouts.Item(hexVeTimeoutDnsTotal).Value := 4000;
  hve.Timeouts.Item(hexVeTimeoutSmtpTotal).Value := 30000;

  memoResult.Text := '';
end;

procedure TForm1.btnValidateClick(Sender: TObject);
var
  iRating: Integer;
  sOut: String;
begin
  btnValidate.Enabled := false;

  // Do the validation to SMTP level
  iRating := hve.Validate( editEmail.Text, hexVeLevelSmtp );

  sOut := editEmail.Text + #13#10;

  // If the address is definitely bad...
  if (hexVeLevelBad = iRating) then

    // Display the reason why
    sOut := sOut + 'Bad address: ' + GetErrorString(hve.Error)

  // If validation didn't reach intended level...
  else if (iRating < hexVeLevelSmtp) then

    // Say why
    sOut := sOut + Format( 'No problems were found with the address, ' +
                           'but the validation failed at level %d ' +
                           'with the following error: %s', [iRating+1, GetErrorString(hve.Error)] )

  else
    // No problems encountered
    sOut := sOut + 'No problems were found with the address.'#13#10'That does not guarantee it is good.';

  memoResult.Text := sOut;
  btnValidate.Enabled := true;
end;

// Gets message strings based on HexValidEmail error codes
function GetErrorString( error: Integer ): String;
begin
  case error of
    hexVeErrTimedOut: Result := 'Timed out';
    hexVeErrConnectionRefused: Result := 'Connection refused';
    hexVeErrConnectionReset: Result := 'Connection reset';
    hexVeErrHostUnreachable: Result := 'Host unreachable';
    hexVeErrAddressNotAvailable: Result := 'Address not available';
    hexVeErrNetworkDown: Result := 'Network down';
    hexVeErrNetworkUnreachable: Result := 'Network unreachable';
    hexVeErrConnectionAborted: Result := 'Connection aborted';
    hexVeErrHostNotFound: Result := 'Host not found';
    hexVeErrTryAgain: Result := 'Try again';
    hexVeErrNoRecovery: Result := 'No recovery';
    hexVeErrNoData: Result := 'No data';
    hexVeErrUnexpected: Result := 'Unexpected error';
    hexVeErrAddrTooLong: Result := 'Address too long';
    hexVeErrExtraTextPresent: Result := 'Extra text is present';
    hexVeErrIllegalChar: Result := 'Illegal character';
    hexVeErrUnbalancedParenthesis: Result := 'Unbalanced parenthesis';
    hexVeErrUnbalancedSquareBracket: Result := 'Unbalanced square bracket';
    hexVeErrUnbalancedAngleBracket: Result := 'Unbalanced angle bracket';
    hexVeErrQuotationMarksNotClosed: Result := 'Quotation marks not closed';
    hexVeErrDomainLiteralPresent: Result := 'A domain literal is present';
    hexVeErrMisplacedDomainLiteral: Result := 'Misplaced domain literal';
    hexVeErrMisplacedQuotedString: Result := 'Misplaced quoted string';
    hexVeErrNoLocalPart: Result := 'No local part specified';
    hexVeErrNoDomain: Result := 'No domain specified';
    hexVeErrInvalidDomain: Result := 'Invalid domain';
    hexVeErrInvalidDomainLiteral: Result := 'Invalid domain literal';
    hexVeErrNoDnsServerConfigured: Result := 'No DNS servers configured';
    hexVeErrDomainDoesNotExist: Result := 'Domain does not exist';
    hexVeErrNoMxForDomain: Result := 'No mail exchange for domain';
    hexVeErrCouldNotVerifyRecipient: Result := 'Could not verify recipient';
    hexVeErrRecipientRejected: Result := 'Recipient rejected';
    hexVeErrNoAddrSpecified: Result := 'No address was specified';
    hexVeErrMailboxFull: Result := 'Mailbox is full';
    hexVeErrBogusMxRecords: Result := 'MX records do not have valid IP addresses';
    hexVeErrSenderBlocked: Result := 'SMTP server is blocking email from this sender';
    hexVeErrDetectedCatchAll: Result := 'SMTP server does not reject bad addresses';
  else
    Result := GetLicenseErrorString( error );
  end;
end;


function GetLicenseErrorString( error: Integer ) : String;
begin
  case error of
    0: Result := 'Success';
    2: Result := 'License file not found';
    3: Result := 'Could not open license file';
    4: Result := 'License file is corrupt';
    5: Result := 'License is for wrong product';
    6: Result := 'License is for wrong version';
    7: Result := 'License does not cover all processors in the machine';
  else
    Result := Format( 'Other error: %d', [error] );
  end;
end;

end.