📄 frxexportmail.pas
字号:
{******************************************}
{ }
{ FastReport v4.0 }
{ E-mail export }
{ }
{ Copyright (c) 1998-2008 }
{ by Alexander Fediachov, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit frxExportMail;
interface
{$I frx.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, extctrls, frxClass, IniFiles, ComCtrls, frxSMTP
{$IFDEF Delphi6}, Variants {$ENDIF};
type
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;
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);
end;
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;
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;
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): String;
procedure ExportObject(Obj: TfrxComponent); override;
property ExportFilter: TfrxCustomExportFilter read FExportFilter write FExportFilter;
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;
end;
implementation
uses frxDsgnIntf, frxFileUtils, frxNetUtils, frxUtils,
frxUnicodeUtils, frxRes, frxrcExports, Registry;
{$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;
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
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 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);
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;
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;
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;
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -