Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как проверить несколько файлов функцией File exests (FileЕxests) и отправить

Ответить
Настройки темы
Delphi - Как проверить несколько файлов функцией File exests (FileЕxests) и отправить

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Eirstream
Дата: 25-04-2021
Здравствуйте, подскажите, не могу понять, как мне лучше сделать.
В папке с exe файлом есть папка "Рапорта на выезд", в нее каждое утро кидаю файлы pdf с определенными именами (всего их 33, и к каждому имени может быть добавлена цифра от 1 до 4, пример: Андроповский2) - с этим проблем нет.
Мне нужно, чтобы программа сама проверяла есть ли файлы или нет, и если есть хотя бы один файл, то отправляла на определенный адрес, если есть оба, то отправлала оба. В этом основная суть.

Пример списка файлов в папке "Рапорта на выезд":
Александровский.pdf
Александровский2.pdf
Пятигорск.pdf
Ессентуки.pdf
Нефтекумск.pdf


Проблема в том, что если нет какого-либо из файлов (в строках ниже), то письмо не отправляется, выдает 'Не удалось отправить сообщение #'
Если оба файла есть Александровский.pdf и Александровский2.pdf, то отправляет без проблем.
Или можете кто-то посоветует реализовать отправку файлов по другому.
Самое главное, чтобы отправлял на определенные адреса - определенные файлы. Если есть хотя бы один файл, то отправлял, а если файлов нет вообще, то не отправлял, но продолжал отправку на другие адреса, других файлов.

Часть кода:
IF FileExists(Dir+'\Рапорта на выезд\Александровский.pdf') and
FileExists(Dir+'\Рапорта на выезд\Александровский2.pdf') then

Send(IdMessage1)
else
ShowMessage ('Не удалось отправить сообщение 1');
Disconnect()
....

Заранее благодарю за помощь и ответы.
Код программы ниже.

Код: Выделить весь код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,IdAttachmentFile, StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdSMTPBase, IdSMTP, IdMessage, ImgList, ExtCtrls, IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdServerIOHandler;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdSMTP1: TIdSMTP;
    IdMessage1: TIdMessage;
    IdMessage2: TIdMessage;
    IdMessage3: TIdMessage;
        Label1: TLabel;
         Label2: TLabel;
    Label3: TLabel;
      Image1: TImage;
    IdServerIOHandlerSSLOpenSSL1: TIdServerIOHandlerSSLOpenSSL;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;

    procedure Button1Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
dir : string;
filename : string;
  SSLOpen : TIdSSLIOHandlerSocketOpenSSL;
begin
dir:= GetCurrentDir;
With IdSMTP1 do Begin
  Host := 'smtp.yandex.ru';
  Port := 465;
  AuthType := satDefault;
  Username := 'МОЙ АДРЕС@yandex.ru';
  Password := 'МОЙ ПАРОЛЬ К АДРЕСУ';

  // для SSL
  SSLOpen := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSLOpen.Destination := Host+':'+IntToStr(Port);
  SSLOpen.Host := Host;
  SSLOpen.Port := Port;
  SSLOpen.DefaultPort := 0;
  SSLOpen.SSLOptions.Method := sslvSSLv23;
  SSLOpen.SSLOptions.Mode := sslmUnassigned;

  IOHandler := SSLOpen;
  UseTLS := utUseImplicitTLS;

  Connect() ;
      if Connected then
  //IdMessage1:= TIdMessage.Create(Application);
  IdMessage1.ContentType:='text/html; charset=windows-1251';
  IdMessage1.Body.Text:='Привет из Delphi';
  IdMessage1.Subject := 'Проверка почты';
  IdMessage1.From.Address := 'МОЙ АДРЕС@yandex.ru';
  IdMessage1.From.Name := 'МОЙ АДРЕС@yandex.ru';
  IdMessage1.Recipients.EMailAddresses :='АДРЕС1@yandex.ru';
 IdMessage1.ContentType := 'multipart/mixed';
TIdAttachmentFile.Create(IdMessage1.MessageParts, Dir+'\Рапорта на выезд\Андроповский.pdf') ;
TIdAttachmentFile.Create(IdMessage1.MessageParts, Dir+'\Рапорта на выезд\Андроповский2.pdf') ;
IF FileExists(Dir+'\Рапорта на выезд\Александровский.pdf') and
FileExists(Dir+'\Рапорта на выезд\Александровский2.pdf') then
//ShowMessage ('Сообщение отправлено')
Send(IdMessage1)
    else
   ShowMessage ('Не удалось отправить сообщение 1');
  Disconnect();
Connect() ;
      if Connected then
  //IdMessage1:= TIdMessage.Create(Application);
  IdMessage2.ContentType:='text/html; charset=windows-1251';
  IdMessage2.Body.Text:='Привет из Delphi';
  IdMessage2.Subject := 'Проверка почты';
  IdMessage2.From.Address := 'МОЙ АДРЕС@yandex.ru'; {<<Должно совпадать с SMTP.UserName}
  IdMessage2.From.Name := 'МОЙ АДРЕС@yandex.ru';
  IdMessage2.Recipients.EMailAddresses :='АДРЕС2@yandex.ru';
 IdMessage2.ContentType := 'multipart/mixed';
TIdAttachmentFile.Create(IdMessage2.MessageParts, Dir+'\Рапорта на выезд\Пятигорск.pdf') ;
TIdAttachmentFile.Create(IdMessage2.MessageParts, Dir+'\Рапорта на выезд\Пятигорск2.pdf') ;
IF FileExists(Dir+'\Рапорта на выезд\Пятигорск.pdf') and
FileExists(Dir+'\Рапорта на выезд\Пятигорск2.pdf') Then
//ShowMessage ('Сообщение отправлено')
Send(IdMessage2)
    else
   ShowMessage ('Не удалось отправить сообщение 2');
  Disconnect();
end;
end;
 end.

Отправлено: 19:53, 25-04-2021

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Eirstream, создайте массив масок файлов на основе перечня:
Код: Выделить весь код
Александровский
Пятигорск
Ессентуки
Нефтекумск
…
и пользуйте поиск по маске для каждого элемента массива масок: FindFirst - Функция. Справочник - Основы Delphi + FindNext - Функция. Справочник - Основы Delphi.

Отправлено: 23:02, 25-04-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
создайте массив масок файлов на основе перечня:
Код:
Александровский
Пятигорск
Ессентуки
Нефтекумск

и пользуйте поиск по маске для каждого элемента массива масок: FindFirst - Функция. Справочник - Основы Delphi + FindNext - Функция. Справочник - Основы Delphi »
Спасибо за идею и совет, но у меня не сильно большой опыт в этом всем, можно сказать начинающий. Я так понял, что необходимо с помощью процедуры с функциями find... найти все файлы с расширением pdf в нужной мне папке. Записать те файлы, которые процедура нашла, а затем сделать условие, что если в списке есть такой файл, то добавить его и отправить письмо.
Попробовал сделать с функциями, но не пойму как вывести и список или включить его куда-либо.
Код: Выделить весь код
procedure ScanFiles(Dir: string; Mask: string);
var
SR: TSearchRec;
ListBox1: TStrings;
Begin
dir:= GetCurrentDir;
Mask:= '*.pdf';
​ ​ if FindFirst(Dir+'\Рапорта на выезд\' + Mask, faAnyFile, SR) = 0 then
begin
​ ​ repeat
​ ​ Application.ProcessMessages;
​ ​ if (SR.Attr and faDirectory)<> faDirectory then
​ ​ ​ ​ ​ ​ ​ begin
​ ​ ​ ​ ​ ​ ListBox1.Add(Dir+'\Рапорта на выезд\' + SR.Name);
​ ​ ​ ​ ​ ​ ​ ​ end;
​ ​ until FindNext(SR) <> 0;
​ ​ ​ ​ ​ ​ ​ FindClose(SR);
end;
End;
end.
Не пойму как связать две процедуры. Или можно сделать список файлов, и если в папке есть эти файлы, то добавлять и отправлять, но пока не знаю как это сделать

При нажатии на кнопку, вот так получилось, а вот как дальше?
Скрытый текст


Последний раз редактировалось Eirstream, 27-04-2021 в 10:44.


Отправлено: 13:50, 26-04-2021 | #3


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Eirstream, создайте массив масок файлов на основе перечня:
Код:
Александровский
Пятигорск
Ессентуки
Нефтекумск

и пользуйте поиск по маске для каждого элемента массива масок: FindFirst - Функция. Справочник - Основы Delphi + FindNext - Функция. Справочник - Основы Delphi. »
А обязательно нужно выводить в список, и не пойму как сделать выборку из этого списка для отправки?

Отправлено: 21:45, 29-04-2021 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как проверить несколько файлов функцией File exests (FileЕxests) и отправить

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] просканировать несколько строк и отправить s.i.p.a Скриптовые языки администрирования Windows 9 21-02-2019 10:23
CMD/BAT - [решено] Проверить несколько файлов оператором if Stavral Скриптовые языки администрирования Windows 3 03-02-2016 13:40
VBS/WSH/JS - [решено] Как прикрепить несколько файлов в письме? staw2ros Скриптовые языки администрирования Windows 23 25-02-2013 01:44
Прочее - [решено] Как проверить включил ли мне провайдер P2P и проверить сервис? Kenobith Сетевые технологии 22 03-04-2012 22:14
CMD/BAT - [решено] Как проверить в определённой директории наличие файлов (не подкаталогов!) ? SANIOK_AV Скриптовые языки администрирования Windows 26 21-06-2011 12:25




 
Переход