все что связано с моей работой
Главная » Програмирование » SendMail. Часть 5

SendMail. Часть 5

Итак оформим нашу задачку в виде класса. Логика остается та же, принципиальных отличий нет. Сначало заполняем/подготавливаем все что можем, потом Prepare (в той реализации было CreateMsg) и отправка (Send)

type
  { TSendMail }

  TSendMail = class
  private
    FAttachedFileName: TStrings;
    FBody: TStrings;
    FFrom_EMail: string;
    FFrom_Name: string;
    FPassword: string;
    FPort: word;
    F_To: TStrings;
    FServer: string;
    FSubject: string;
    FUserName: string;
    FPrepared: boolean;

    FSMTP:TSMTPSend;
    FMsg:TMimeMess;

    procedure SetFrom_EMail(const AValue: string);
    procedure SetFrom_Name(const AValue: string);
    procedure SetPassword(const AValue: string);
    procedure SetPort(const AValue: word);
    procedure SetServer(const AValue: string);
    procedure SetSubject(const AValue: string);
    procedure SetUserName(const AValue: string);
  public
    constructor Create (AServer:string; APort:word; AUserName, APassword:string);
    destructor Destroy; override;
    procedure AddTo(AName, AEMail:string);
    procedure AddFileName(aFileName:string);
    function Prepare:boolean;
    function Send:boolean;

    property Server:string read FServer write SetServer;
    property Port:word read FPort write SetPort;
    property UserName:string read FUserName write SetUserName;
    property Password:string read FPassword write SetPassword;
    property From_Name:string read FFrom_Name write SetFrom_Name;
    property From_EMail:string read FFrom_EMail write SetFrom_EMail;
    property _To:TStrings read F_To;
    property Subject:string read FSubject write SetSubject;
    property Body:TStrings read FBody;
    property AttachedFileName:TStrings read FAttachedFileName;
    property Prepared:boolean read FPrepared;
  end;              

Реализация. Процедуры Set/Get от property описывать не буду, они стандартные, сгенерированные средой. Для нас интересно начало блока public:

  public
    constructor Create (AServer:string; APort:word; AUserName, APassword:string);
    destructor Destroy; override;
    procedure AddTo(AName, AEMail:string);
    procedure AddFileName(aFileName:string);
    function Prepare:boolean;
    function Send:boolean;  

конструктор – должен все подготовить к работе

constructor TSendMail.Create(AServer: string; APort: word; AUserName,
  APassword: string);
begin
  F_To:=TStringList.Create;
  FBody:=TStringList.Create;
  FAttachedFileName:=TStringList.Create;
  FMsg:=nil;
  FSMTP:=nil;
  FPrepared:=false;
  FServer:=AServer;
  FPort:=APort;
  FUserName:=AUserName;
  FPassword:=APassword;
end;

Создали списки “Кому”, “Вложенные файлы” и “Тело сообщения”. Сохранили переменные для подключения к серверу, маркер “Подготовлено” установили в ложь. Переменные FMsg и FSMTP не создаем т.к. они нам нужны на небольшой промежуток времени, только в момент отправки и чтоб не занимать память их создавать будем непосредственно когда они нам понадобятся.

Соответственно деструктор все за собой подчистить:

destructor TSendMail.Destroy;
begin
  if FSMTP<>nil then FreeAndNil(FSMTP);
  if FMsg<>nil then FreeAndNil(FMsg);
  if F_To<>nil then FreeAndNil(F_To);
  if FBody<>nil then FreeAndNil(FBody);
  if FAttachedFileName<>nil then FreeAndNil(FAttachedFileName);
  inherited Destroy;
end;

Проверяем какие объекты у нас есть и соответственно освобождаем их.

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.