{******************************************} { } { FastReport VCL } { E-mail export } { } { Copyright (c) 1998-2021 } { by Fast Reports Inc. } { } {******************************************} unit frxExportMail; interface {$I frx.inc} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, extctrls, frxClass, IniFiles, ComCtrls, {$IFDEF USE_INDY} IdSMTP, IdMessage, IdSSLOpenSSL, IdExplicitTLSClientServerBase, IdAttachmentFile, IdEMailAddress {$ELSE} frxSMTP {$ENDIF} {$IFDEF Delphi6}, Variants {$ENDIF}; type TMailTransport = (SMTP, MAPI, MSOutlook); TSMTPStartCommand = (EHLO, HELO); TfrxOnSendMailEvent = function (const Server: String; const Port: Integer;const UserField, PasswordField: String; FromField, ToField, SubjectField, CompanyField, TextField: WideString; FileNames: TStringList; Timeout: Integer; ConfurmReading: boolean; MailCc, MailBcc: WideString): String of object; TfrxOnAfterSendMailEvent = procedure (const MailResult: String) of object; TfrxMailExportDialog = class(TForm) OkB: TButton; CancelB: TButton; PageControl1: TPageControl; ExportSheet: TTabSheet; MessageGroup: TGroupBox; AddressLB: TLabel; SubjectLB: TLabel; MessageLB: TLabel; MessageM: TMemo; AttachGroup: TGroupBox; ExportsCombo: TComboBox; FormatLB: TLabel; SettingCB: TCheckBox; AccountSheet: TTabSheet; MailGroup: TGroupBox; RememberCB: TCheckBox; AccountGroup: TGroupBox; FromNameE: TEdit; FromNameLB: TLabel; FromAddrE: TEdit; FromAddrLB: TLabel; OrgLB: TLabel; OrgE: TEdit; SignatureLB: TLabel; SignatureM: TMemo; HostLB: TLabel; HostE: TEdit; PortE: TEdit; PortLB: TLabel; LoginLB: TLabel; LoginE: TEdit; PasswordE: TEdit; PasswordLB: TLabel; SignBuildBtn: TButton; AddressE: TComboBox; SubjectE: TComboBox; ReqLB: TLabel; TimeoutLB: TLabel; TimeoutE: TEdit; ReadingCB: TCheckBox; Radio_SMTP: TRadioButton; Radio_MAPI: TRadioButton; Radio_Outlook: TRadioButton; MailTransportLB: TLabel; procedure FormCreate(Sender: TObject); procedure SignBuildBtnClick(Sender: TObject); procedure OkBClick(Sender: TObject); procedure PortEKeyPress(Sender: TObject; var Key: Char); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure PageControl1Change(Sender: TObject); end; {$IFDEF DELPHI16} [ComponentPlatformsAttribute(pidWin32 or pidWin64)] {$ENDIF} TfrxMailExport = class(TfrxCustomExportFilter) private FExportFilter: TfrxCustomExportFilter; FAddress: String; FSubject: String; FMessage: TStrings; FShowExportDialog: Boolean; FOldSlaveStatus: Boolean; FFromName: String; FFromMail: String; FFromCompany: String; FSignature: TStrings; FSmtpHost: String; FSmtpPort: Integer; FLogin: String; FPassword: String; FUseIniFile: Boolean; FLogFile: String; FTimeOut: Integer; FConfurmReading: boolean; FUseMAPI: TMailTransport; FSMTPStartCommand: TSMTPStartCommand; FOnSendMail: TfrxOnSendMailEvent; FOnAfterSendMail: TfrxOnAfterSendMailEvent; FMailCc: String; FMailBcc: String; FMAPISendFlag: Integer; procedure SetMessage(const Value: TStrings); procedure SetSignature(const Value: TStrings); protected property DefaultPath; property Stream; property CurPage; property PageNumbers; property FileName; property UseFileCache; property ExportNotPrintable; public constructor Create(AOwner: TComponent); override; function CreateDefaultIOTransport: TfrxCustomIOTransport; override; destructor Destroy; override; class function GetDescription: String; override; function ShowModal: TModalResult; override; function Start: Boolean; override; function Mail(const Server: String; const Port: Integer;const UserField, PasswordField: String; FromField, ToField, SubjectField, CompanyField, TextField: WideString; FileNames: TStringList; Timeout: integer = 60; ConfurmReading: boolean = false; MailCc: WideString = ''; MailBcc: WideString = ''): String; procedure ExportObject(Obj: TfrxComponent); override; property ExportFilter: TfrxCustomExportFilter read FExportFilter write FExportFilter; property SMTPStartCommand: TSMTPStartCommand read FSMTPStartCommand write FSMTPStartCommand; published property Address: String read FAddress write FAddress; property Subject: String read FSubject write FSubject; property Lines: TStrings read FMessage write SetMessage; property ShowExportDialog: Boolean read FShowExportDialog write FShowExportDialog; property FromMail: String read FFromMail write FFromMail; property FromName: String read FFromName write FFromName; property FromCompany: String read FFromCompany write FFromCompany; property Signature: TStrings read FSignature write SetSignature; property SmtpHost: String read FSmtpHost write FSmtpHost; property SmtpPort: Integer read FSmtpPort write FSmtpPort; property Login: String read FLogin write Flogin; property Password: String read FPassword write FPassword; property UseIniFile: Boolean read FUseIniFile write FUseIniFile; property LogFile: String read FLogFile write FLogFile; property TimeOut: integer read FTimeOut write FTimeOut; property ConfurmReading: boolean read FConfurmReading write FConfurmReading; property OnSendMail: TfrxOnSendMailEvent read FOnSendMail write FOnSendMail; property OnAfterSendMail: TfrxOnAfterSendMailEvent read FOnAfterSendMail write FOnAfterSendMail; property UseMAPI: TMailTransport read FUseMAPI write FUseMAPI; property MailCc: String read FMailCc write FMailCc; property MailBcc: String read FMailBcc write FMailBcc; property MAPISendFlag: Integer read FMAPISendFlag write FMAPISendFlag; end; implementation uses frxDsgnIntf, frxFileUtils, frxNetUtils, frxUtils, frxUnicodeUtils, frxRes, frxrcExports, Registry, frxSendMAPI, ComObj; {$R *.dfm} const EMAIL_EXPORT_SECTION = 'EmailExport'; { TfrxMailExport } constructor TfrxMailExport.Create(AOwner: TComponent); begin inherited Create(AOwner); FAddress := ''; FSubject := ''; FMessage := TStringList.Create; FShowExportDialog := True; FFromName := ''; FFromMail := ''; FFromCompany := ''; FSignature := TStringList.Create; FSmtpHost := ''; FSmtpPort := 25; FLogin := ''; FPassword := ''; FUseIniFile := True; FTimeOut := 60; FConfurmReading := false; FUseMAPI := SMTP; FSMTPStartCommand := HELO; FMailCc := ''; FMailBcc := ''; FMAPISendFlag := 0; end; function TfrxMailExport.CreateDefaultIOTransport: TfrxCustomIOTransport; begin FDefaultIOTransport := TfrxCustomIOTransport(frxDefaultIOTransportClass.NewInstance); FDefaultIOTransport.CreateNoRegister; Result := FDefaultIOTransport; end; destructor TfrxMailExport.Destroy; begin FMessage.Free; FSignature.Free; inherited; end; class function TfrxMailExport.GetDescription: String; begin Result := frxResources.Get('EmailExport'); end; function TfrxMailExport.ShowModal: TModalResult; var i: Integer; ini: TCustomIniFile; Section: String; begin with TfrxMailExportDialog.Create(nil) do begin try case FUseMapi of SMTP: Radio_Smtp.Checked := True; MAPI: Radio_MAPI.Checked := True; else Radio_Outlook.Checked := True end; AttachGroup.Visible := not SlaveExport; SendMessage(GetWindow(ExportsCombo.Handle,GW_CHILD), EM_SETREADONLY, 1, 0); for i := 0 to frxExportFilters.Count - 1 do begin if (TfrxCustomExportFilter(frxExportFilters[i].Filter).ClassName <> 'TfrxDotMatrixExport') and (TfrxCustomExportFilter(frxExportFilters[i].Filter).ClassName <> 'TfrxMailExport') then ExportsCombo.Items.AddObject(TfrxCustomExportFilter(frxExportFilters[i].Filter).GetDescription, TfrxCustomExportFilter(frxExportFilters[i].Filter)); end; ExportsCombo.Items.AddObject(frxResources.Get('FastReportFile'), nil); SettingCB.Checked := ShowExportDialog; if Radio_Smtp.Checked then FUseMapi := SMTP else if Radio_MAPI.Checked then FUseMapi := MAPI else if Radio_Outlook.Checked then FUseMapi := MSOutlook; // CheckBox1.Checked := FUseMAPI; if Assigned(Report) then ini := Report.GetIniFile else ini := TRegistryIniFile.Create('\Software\Fast Reports'); try if not FUseIniFile then RememberCB.Visible := False; Section := EMAIL_EXPORT_SECTION + '.Properties'; if ini.SectionExists(Section) and FUseIniFile then begin FromNameE.Text := ini.ReadString(Section, 'FromName', ''); FromAddrE.Text := ini.ReadString(Section, 'FromAddress', ''); OrgE.Text := ini.ReadString(Section, 'Organization', ''); SignatureM.Lines.Text := ini.ReadString(Section, 'Signature', ''); HostE.Text := ini.ReadString(Section, 'SmtpHost', ''); PortE.Text := ini.ReadString(Section, 'SmtpPort', '25'); LoginE.Text := String(Base64Decode(AnsiString(ini.ReadString(Section, 'Login', '')))); PasswordE.Text := String(Base64Decode(AnsiString(ini.ReadString(Section, 'Password', '')))); ExportsCombo.ItemIndex := ini.ReadInteger(Section, 'LastUsedExport', 0); ini.ReadSection(EMAIL_EXPORT_SECTION + '.RecentAddresses' , AddressE.Items); ini.ReadSection(EMAIL_EXPORT_SECTION + '.RecentSubjects' , SubjectE.Items); TimeoutE.Text := ini.ReadString(Section, 'Timeout', '60'); end else begin FromNameE.Text := FFromName; FromAddrE.Text := FFromMail; OrgE.Text := FFromCompany; SignatureM.Lines.Text := FSignature.Text; HostE.Text := FSmtpHost; PortE.Text := IntToStr(FSmtpPort); LoginE.Text := FLogin; PasswordE.Text := FPassword; TimeoutE.Text := IntToStr(FTimeout); if not Assigned(FExportFilter) then ExportsCombo.ItemIndex := 0 else ExportsCombo.ItemIndex := ExportsCombo.Items.IndexOfObject(FExportFilter); end; AddressE.Text := FAddress; SubjectE.Text := FSubject; MessageM.Text := FMessage.Text; ReadingCB.Checked := FConfurmReading; Result := ShowModal; if Result = mrOk then begin FAddress := AddressE.Text; FFromName := FromNameE.Text; FFromMail := FromAddrE.Text; FFromCompany := OrgE.Text; FSignature.Text := SignatureM.Lines.Text; FSmtpHost := HostE.Text; FSmtpPort := StrToInt(PortE.Text); FLogin := LoginE.Text; FPassword := PasswordE.Text; FSubject := SubjectE.Text; FMessage.Text := MessageM.Lines.Text; FTimeOut := StrToInt(TimeoutE.Text); FConfurmReading := ReadingCB.Checked; if Radio_Smtp.Checked then FUseMapi := SMTP else if Radio_MAPI.Checked then FUseMapi := MAPI else if Radio_Outlook.Checked then FUseMapi := MSOutlook; // FUseMAPI := CheckBox1.Checked; if RememberCB.Checked and FUseIniFile then begin ini.WriteString(Section, 'FromName', FromNameE.Text); ini.WriteString(Section, 'FromAddress', FromAddrE.Text); ini.WriteString(Section, 'Organization', OrgE.Text); ini.WriteString(Section, 'Signature', SignatureM.Lines.Text); ini.WriteString(Section, 'SmtpHost', HostE.Text); ini.WriteString(Section, 'SmtpPort', PortE.Text); ini.WriteString(Section, 'Login', String(Base64Encode(AnsiString(LoginE.Text)))); ini.WriteString(Section, 'Password', String(Base64Encode(AnsiString(PasswordE.Text)))); ini.WriteString(Section, 'Timeout', String(TimeoutE.Text)); end; if FUseIniFile then begin ini.WriteInteger(Section, 'LastUsedExport', ExportsCombo.ItemIndex); ini.WriteString(EMAIL_EXPORT_SECTION + '.RecentAddresses' , AddressE.Text, ''); ini.WriteString(EMAIL_EXPORT_SECTION + '.RecentSubjects' , SubjectE.Text, ''); end; ShowExportDialog := SettingCB.Checked; FExportFilter := TfrxCustomExportFilter(ExportsCombo.Items.Objects[ExportsCombo.ItemIndex]); end; finally ini.Free; end; finally Free; end; end; end; function TfrxMailExport.Start: Boolean; var s, f: String; i: Integer; fname, Oldfname, FullFileName: String; OldShowProgress, OldShowDialog: Boolean; Files: TStringList; begin s := ''; if Assigned(FExportFilter) and (FExportFilter.FileName <> '') then f := ExtractFileName(frxUnixPath2WinPath(FExportFilter.FileName)) else if Report.ReportOptions.Name = '' then f := StringReplace(ExtractFileName(frxUnixPath2WinPath(Report.FileName)), ExtractFileExt(frxUnixPath2WinPath(Report.FileName)), '', []) else f := Report.ReportOptions.Name; if Assigned(FExportFilter) and (FExportFilter.FileName = '') then f := f + FExportFilter.DefaultExt; if Assigned(FExportFilter) then begin Oldfname := FExportFilter.FileName; if FExportFilter.DefaultPath <> '' then begin FDefaultIOTransport.BasePath := FExportFilter.DefaultPath; FExportFilter.FileName := f; end else begin FDefaultIOTransport.CreateTempContainer; FExportFilter.FileName := FDefaultIOTransport.BasePath + PathDelim + f; end; FOldSlaveStatus := FExportFilter.SlaveExport; FExportFilter.SlaveExport := True; OldShowDialog := FExportFilter.ShowDialog; OldShowProgress := FExportFilter.ShowProgress; FExportFilter.IOTransport := FDefaultIOTransport; try FExportFilter.ShowDialog := ShowDialog and ShowExportDialog; FExportFilter.ShowProgress := ShowProgress; if Report.Export(FExportFilter) then begin Files := TStringList.Create; try if FExportFilter.Files = nil then begin if (FUseMAPI = MSOutlook) and (FExportFilter.DefaultPath <> '') then FullFileName := FExportFilter.DefaultPath + PathDelim + ExtractFileName(FExportFilter.FileName) else FullFileName := FExportFilter.FileName; if FUseMAPI = SMTP then Files.Add(FullFileName + '=' + f) else Files.Add(FullFileName) end else Files.AddStrings(FExportFilter.Files); s := Mail(FSmtpHost, FSmtpPort, FLogin, FPassword, FFromMail, FAddress, FSubject, FFromCompany, FMessage.Text + FSignature.Text, Files, FTimeOut, FConfurmReading, FMailCc, FMailBcc); finally //FExportFilter.IOTransport := nil; if Assigned(FOnAfterSendMail) then FOnAfterSendMail(s); //FDefaultIOTransport.FreeTempContainer; for i := 0 to Files.Count - 1 do DeleteFile(Files.Names[i]); Files.Free; end; end; finally FDefaultIOTransport.FreeTempContainer; FExportFilter.SlaveExport := FOldSlaveStatus; FExportFilter.ShowDialog := OldShowDialog; FExportFilter.ShowProgress := OldShowProgress; FExportFilter.FileName := Oldfname; FExportFilter.IOTransport := nil; //FDefaultIOTransport.FreeTempContainer; end; end else begin f := f + '.fp3'; fname := GetTempFile; Report.PreviewPages.SaveToFile(fname); Files := TStringList.Create; try if FUseMAPI = SMTP then Files.Add(fname + '=' + f) else Files.Add(fname); s := Mail(FSmtpHost, FSmtpPort, FLogin, FPassword, FFromMail, FAddress, FSubject, FFromCompany, FMessage.Text + FSignature.Text, Files); finally if Assigned(FOnAfterSendMail) then FOnAfterSendMail(s); for i := 0 to Files.Count - 1 do DeleteFile(Files.Names[i]); Files.Free; end; end; if s <> '' then case Report.EngineOptions.NewSilentMode of simSilent: Report.Errors.Add(s); simMessageBoxes: frxErrorMsg(s); simReThrow: raise Exception.Create(s); end; Result := False; end; procedure TfrxMailExport.ExportObject(Obj: TfrxComponent); begin // Fake end; function TfrxMailExport.Mail(const Server: String; const Port: Integer;const UserField, PasswordField: String; FromField, ToField, SubjectField, CompanyField, TextField: WideString; FileNames: TStringList; Timeout: integer = 60; ConfurmReading: boolean = false; MailCc: WideString = ''; MailBcc: WideString = ''): String; const olMailItem = 0; var {$IFDEF USE_INDY} mailer : TIdSMTP; EMsg: TIdMessage; sslIOHandler: TIdSSLIOHandlerSocketOpenSSL; p: Integer; {$ELSE} frxMail: TfrxSMTPClient; {$ENDIF} frxMapi: TMapiControl; Outlook: OLEVariant; MailItem: Variant; i, j: Integer; s: String; OutlockVailable: Boolean; {$IFDEF USE_INDY} procedure AddRecipients(EmailAddressList: TIdEmailAddressList; RcptList: string); var i,j, len: integer; begin i := 1; j := 1; len := Length(RcptList); while i <= len do begin if RcptList[i] = ',' then begin s := Copy(RcptList, j, i - j); EmailAddressList.Add.Text := s; j := i + 1; end; Inc(i); end; s := Copy(RcptList, j, i - j); EmailAddressList.Add.Text := s; end; {$ENDIF} begin if Assigned(FOnSendMail) then begin Result := FOnSendMail(Server, Port, UserField, PasswordField, FromField, ToField, SubjectField, CompanyField, TextField, FileNames , TimeOut, ConfurmReading, MailCc, MailBcc); if Result = '' then exit; end; case FUseMAPI of // ---------------------- SMTP ------------------------- SMTP: begin {$IFDEF USE_INDY} mailer := TIdSMTP.Create(nil); // try mailer.AuthType := satDefault; // satSASL; // mailer.Host := Server;; mailer.UserName := UserField; mailer.Password := PasswordField; sslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create; sslIOHandler.SSLOptions.Method := sslvSSLv23; mailer.IOHandler := sslIOHandler; case Port of 465, 587: mailer.UseTLS := utUseImplicitTLS else mailer.UseTLS := utUseExplicitTLS; end; EMsg := TIdMessage.Create(mailer); EMsg.ContentTransferEncoding := '8bit'; EMsg.From.Address := FromField; EMsg.Organization := CompanyField; AddRecipients(EMsg.Recipients, ToField); if MailCc <> '' then AddRecipients(EMsg.CCList, MailCc); if MailBCc <> '' then AddRecipients(EMsg.BCCList, MailBCc); EMsg.Subject := SubjectField; EMsg.CharSet := 'UTF-8'; EMsg.Body.Append( StringReplace(TextField, '\n', #13#10, [rfReplaceAll])); for i := 0 to FileNames.Count - 1 do begin p := Pos('=', FileNames[i]); if p <> 0 then begin with TIdAttachmentFile.Create(EMsg.MessageParts, Copy(FileNames[i], 1, p - 1)) do FileName := Copy(FileNames[i], p + 1, length(FileNames[i]) - p); end else TIdAttachmentFile.Create(EMsg.MessageParts, FileNames[i]); end; EMsg.AfterConstruction; mailer.Connect; if mailer.Connected then mailer.Send(EMsg); mailer.Disconnect; EMsg.Free; sslIOHandler.Free; mailer.Free; { except on E: Exception do case Report.EngineOptions.NewSilentMode of simSilent: Report.Errors.Add(E.Message); simMessageBoxes: frxErrorMsg(E.Message); simReThrow: raise Exception.Create(E.Message); end; end; } {$ELSE} frxMail := TfrxSMTPClient.Create(nil); try frxMail.Host := Server; frxMail.Port := Port; frxMail.User := UserField; frxMail.Password := PasswordField; frxMail.MailFrom := FromField; frxMail.MailTo := ToField; frxMail.MailSubject := SubjectField; frxMail.Organization := CompanyField; frxMail.MailText := StringReplace(TextField, '\n', #13#10, [rfReplaceAll]); frxMail.MailFiles.Assign(FileNames); frxMail.ShowProgress := ShowProgress; frxMail.TimeOut := Timeout; frxMail.ConfirmReading := FConfurmReading; frxMail.MailCc := FMailCc; frxMail.MailBcc := FMailBcc; if SMTPStartCommand = HELO then frxMail.StartCommand := 'HELO' else frxMail.StartCommand := 'EHLO'; {$IFDEF FR_DEBUG} frxMail.LogFile := GetCurrentDir + '\fr_mail.log'; {$ELSE} frxMail.LogFile := LogFile; {$ENDIF} frxMail.Open; finally Result := frxMail.Errors.Text; frxMail.Free; end {$ENDIF} end; // ---------------------- MAPI ------------------------- MAPI: begin frxMapi := TMapiControl.Create(nil); frxMapi.FromName := FromField; i := 1; j := 1; while i <= Length(ToField) do begin if ToField[i] = ',' then begin s := Copy(ToField, j, i - j); frxMapi.Recipients.Add(s); j := i + 1; end; Inc(i); end; s := Copy(ToField, j, i - j); frxMapi.Recipients.Add(s); frxMapi.Subject := SubjectField; frxMapi.Body := StringReplace(TextField, '\n', #13#10, [rfReplaceAll]); frxMapi.AttachedFiles.Assign(FileNames); frxMapi.ShowDialog := false; frxMapi.MAPISendFlag := MAPISendFlag; Result := frxMapi.Sendmail(UserField, PasswordField); frxMapi.Free; end; // ---------------------- Outlook ------------------------- MSOutlook: begin OutlockVailable := false; try Outlook:= GetActiveOleObject('Outlook.Application'); OutlockVailable := true; except end; { if Not OutlockVailable then try OutlockVailable := false; Outlook:= CreateOleObject('Outlook.Application'); OutlockVailable := true; except end; } if Not OutlockVailable then begin Result := 'Cannot access to Microsoft Outlook.'; exit end; MailItem:= Outlook.CreateItem(olMailItem); MailItem.Subject:= SubjectField; i := 1; j := 1; while i <= Length(ToField) do begin if ToField[i] = ',' then begin s := Copy(ToField, j, i - j); MailItem.Recipients.Add(s); j := i + 1; end; Inc(i); end; s := Copy(ToField, j, i - j); MailItem.Recipients.Add(s); if MailCc <> '' then MailItem.Recipients.Add(MailCc).Type := 2; if MailBCc <> '' then MailItem.Recipients.Add(MailBCc).Type := 3; MailItem.Body:= StringReplace(TextField, '\n', #13#10, [rfReplaceAll]); for i := 0 to FileNames.Count -1 do MailItem.Attachments.Add(FileNames[i]); MailItem.Send; Outlook := Unassigned; end; end; end; procedure TfrxMailExport.SetMessage(const Value: TStrings); begin FMessage.Assign(Value); end; procedure TfrxMailExport.SetSignature(const Value: TStrings); begin FSignature.Assign(Value); end; { TfrxMailExportDialog } procedure TfrxMailExportDialog.FormCreate(Sender: TObject); begin Caption := frxGet(8900); OkB.Caption := frxGet(1); CancelB.Caption := frxGet(2); ExportSheet.Caption := frxGet(8901); AccountSheet.Caption := frxGet(8902); AccountGroup.Caption := frxGet(8903); AddressLB.Caption := frxGet(8904); AttachGroup.Caption := frxGet(8905); FormatLB.Caption := frxGet(8906); FromAddrLB.Caption := frxGet(8907); FromNameLB.Caption := frxGet(8908); HostLB.Caption := frxGet(8909); LoginLB.Caption := frxGet(8910); MailGroup.Caption := frxGet(8911); MessageGroup.Caption := frxGet(8912); MessageLB.Caption := frxGet(8913); OrgLB.Caption := frxGet(8914); PasswordLB.Caption := frxGet(8915); PortLB.Caption := frxGet(8916); RememberCB.Caption := frxGet(8917); ReqLB.Caption := frxGet(8918); SettingCB.Caption := frxGet(8919); SignatureLB.Caption := frxGet(8920); SignBuildBtn.Caption := frxGet(8921); SubjectLB.Caption := frxGet(8922); ReadingCB.Caption := frxGet(8989); MailTransportLB.Caption := frxGet(8925); TimeoutLB.Caption := frxGet(8926); AddressE.Hint := frxResources.Get('expMailAddr'); if UseRightToLeftAlignment then FlipChildren(True); {$IFDEF DELPHI24} ScaleForPPI(Screen.PixelsPerInch); {$ENDIF} end; procedure TfrxMailExportDialog.SignBuildBtnClick(Sender: TObject); begin SignatureM.Clear; SignatureM.Lines.Add('--'); SignatureM.Lines.Add(frxGet(8923) + ','); if Length(FromNameE.Text) > 0 then SignatureM.Lines.Add(' ' + FromNameE.Text); if Length(FromAddrE.Text) > 0 then SignatureM.Lines.Add(' mailto: ' + FromAddrE.Text); if Length(OrgE.Text) > 0 then SignatureM.Lines.Add(' ' + OrgE.Text); end; procedure TfrxMailExportDialog.OkBClick(Sender: TObject); var i: Integer; begin for i := 0 to ComponentCount - 1 do if Components[i] is TLabel then (Components[i] as TLabel).Font.Style := []; if AddressE.Text = '' then begin ExportSheet.Show; AddressLB.Font.Style := [fsBold]; ModalResult := mrNone; end; if SubjectE.Text = '' then begin ExportSheet.Show; SubjectLB.Font.Style := [fsBold]; ModalResult := mrNone; end; if Radio_Smtp.Checked then begin if FromAddrE.Text = '' then begin AccountSheet.Show; FromAddrLB.Font.Style := [fsBold]; ModalResult := mrNone; end; if HostE.Text = '' then begin AccountSheet.Show; HostLB.Font.Style := [fsBold]; ModalResult := mrNone; end; if PortE.Text = '' then begin AccountSheet.Show; PortLB.Font.Style := [fsBold]; ModalResult := mrNone; end; end; ReqLB.Visible := ModalResult = mrNone end; procedure TfrxMailExportDialog.PortEKeyPress(Sender: TObject; var Key: Char); begin case key of '0'..'9':; #8:; else key := #0; end; end; procedure TfrxMailExportDialog.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_F1 then frxResources.Help(Self); end; procedure TfrxMailExportDialog.PageControl1Change(Sender: TObject); begin {$IFDEF Delphi6} // if (PageControl1.ActivePageIndex = 1) and (CheckBox1.Checked) then // PageControl1.ActivePageIndex := 0; {$ENDIF} end; end.