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

SendMail. Часть 2

Итак переходим к практике. В Лазаре создаем новое консольное приложение: “Проект->Создать проект…”, далее выбираем тип проекта: “Программа пользователя”.

Почему не “Консольное приложение” или не “Программа”? Потому что, “Консольное приложение” создает красивый класс обертку, очень удобно проверять параметры, доступ к переменным среды… Но если копнуть глубже, то класс много чего подтягивает наследуя от TComponent, а в нашем случае нужно именно маленькое приложение.

Просто “Программа” имеет практически тот же шаблон, только с подключением библиотеки cthreads, для сборки в Unix, мы пока не планируем писать конкурента стандартному *nix-овому mail.

Получаем вот такой шаблон.

program sendmail;
{$mode objfpc}{$H+}
uses
  Classes, SysUtils
  { you can add units after this };
{$IFDEF WINDOWS}{$R sendmail.rc}{$ENDIF}
begin
end.

Добавим необходимые модули и опишем основные функции, что определили в первой части. Получаем:

program sendmail;
{$mode objfpc}{$H+}
uses
  Classes, SysUtils,
  getopts,  // проверка параметров ком. строки
  smtpsend, // отправка почты
  mimemess, // обработка писем с вложениями
  mimepart  // обработка вложений
  { you can add units after this };

//  получить параметры
function Init:boolean;
begin
end;
//  проверить доступность файлов, наличие обязательных параметров
function Validate:boolean;
begin
end;
//  составить письмо
function CreateMsg:boolean;
begin
end;
{  Создать SMTP клиента
   подключить
   если все ОК, то отправить письмо
   отключить}
function Send:boolean;
begin
end;
// очистить созданные объекты
function Done:boolean;
begin
end;
// распечатать help параметров ком.строки
procedure Help;
begin
  writeln('usage sendmail ');
  writeln('Param:');
  writeln('-S str'#9'Server SMTP сервер');
  writeln('-U str'#9'Имя пользователя');
  writeln('-P str'#9'пароль');
  writeln('-p digit'#9'Порт');
  writeln('-r str'#9'Получатель (кому). может быть несколько');
  writeln('-s str'#9'Тема сообщения');
  writeln('-b str'#9'Тело письма, одной строкой');
  writeln('-f FileName'#9'Тело письма вставляемое из текстового файла');
  writeln('-a FileName'#9'Имя файла, который вкладываем в письмо');
end;

{$IFDEF WINDOWS}{$R sendmail.rc}{$ENDIF}
//  Тело программы
begin
end.

Я еще добавил сразу процедуру Help, которая просто печатает небольшой хелп, в случае если введены неправильные параметры.

После раздела подключения модулей и перед объявлением первой функции (Init) опишем наши переменные:

  { you can add units after this };

var
   Server,UserName,Password,
   Subject,Body,BodyFileName:string;
   Port:word;
   Reciepient,AttachedFileName:TStrings;

//  получить параметры

Думаю, проблем не вызывает. Единственное на чем хотелось бы остановиться, это получатели и вложенные файлы. Объявили их TStrings потому что, их может быть несколько.

Ну и хватит на сегодня.

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

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.