FastReport_2022_VCL/Source/ExportPack/frxExportMail.pas
2024-01-01 16:13:08 +01:00

839 lines
26 KiB
ObjectPascal

{******************************************}
{ }
{ 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.