Eirstream
25-04-2021, 19:53
Здравствуйте, подскажите, не могу понять, как мне лучше сделать.
В папке с 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.
В папке с 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.