|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Как проверить несколько файлов функцией File exests (FileЕxests) и отправить |
|
Delphi - Как проверить несколько файлов функцией File exests (FileЕxests) и отправить
|
Новый участник Сообщения: 11 |
Профиль | Отправить PM | Цитировать
Здравствуйте, подскажите, не могу понять, как мне лучше сделать.
В папке с 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
|
Профиль | Отправить PM | Цитировать Eirstream, создайте массив масок файлов на основе перечня:
и пользуйте поиск по маске для каждого элемента массива масок: FindFirst - Функция. Справочник - Основы Delphi + FindNext - Функция. Справочник - Основы Delphi. |
Отправлено: 23:02, 25-04-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Попробовал сделать с функциями, но не пойму как вывести и список или включить его куда-либо. 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
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 21:45, 29-04-2021 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|