powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отправка Email, Indy, ошибка ConnClosedGracefully
18 сообщений из 18, страница 1 из 1
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39711851
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отправляю письмо с вложениями через Gmail используя Indy (10.6.2.5263) c SSL в XE 8.
На одних компах отправлятеся нормально, на других вылетает ошибка ConnClosedGracefully.
На всех моих трех компах все нормально, поэтому даже проверить не могу что именно и когда вылетает.
Нашел тему на этом форуме тут , но она очень старая.
Не разобрался, что именно сделали.
Еще есть это .
Там в конце написали, что типа это часто бывает и надо просто игнорировать ошибку.
Пытался добавить исключение не помогло.
Может, кто сталкивался с этой проблемой ?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
  MessageEmail: TIdMessage;
  SMTP: TIdSMTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
  Attach: TIdAttachment;
  AttachFile: TIdAttachmentFile;
  AttachMemory : TIdAttachmentMemory;
  StreamFile : TMemoryStream;
begin
  Result := True;

  try
  try

    SMTP := TIdSMTP.Create(nil);
    MessageEmail := TIdMessage.Create(nil);
    SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

    SSL.SSLOptions.Method := sslvTLSv1;
    SSL.SSLOptions.Mode := sslmUnassigned;
    SSL.SSLOptions.VerifyMode := [];
    SSL.SSLOptions.VerifyDepth := 0;

    MessageEmail.ContentTransferEncoding := 'base64';
    MessageEmail.From.Address := Username;
    MessageEmail.Recipients.EMailAddresses := ToTarget;
    MessageEmail.CharSet := 'UTF-8';  // 'Windows-1251';
    MessageEmail.Subject := Subject; //  AnsiToUtf8(     UTF8Encode(WideString(         ConvertToWIN1251(
    MessageEmail.Body.text := Body;

    SMTP.IOHandler := SSL;
    SMTP.Host := TSMTP;
    SMTP.Port := TPort;
    SMTP.username := Username;
    SMTP.password := Password;
    SMTP.UseTLS := utUseExplicitTLS;


    if Path <> '' then
      begin
        try
          StreamFile := TMemoryStream.Create;

          MainForm.ExcelSS.SaveToStream(StreamFile, TdxSpreadSheetXLSFormat);   //
          StreamFile.Position := 0;
          AttachMemory := TIdAttachmentMemory.Create(MessageEmail.MessageParts, StreamFile);
          AttachMemory.ContentType := 'text/plain';
          AttachMemory.FileName := ClearFileName(StringReplace(Path, '*', 'х',[rfReplaceAll, rfIgnoreCase]), ' ');

        finally
          StreamFile.Free;
        end
      end;



    SMTP.Connect;
    SMTP.Send(MessageEmail);
    SMTP.Disconnect(False);

  Except
     on E : Exception do
      begin
        MessageDlg('Ошибка при отправки письма!'+#13+'Дополнительно ClassName "'+E.ClassName+'", Message"' +E.Message+'"',mtError, [mbOK], 0);
        Result := False;
      end;
  end;

  finally
    AttachMemory.Free;
    //AttachFile.Free;
    SMTP.Free;
    MessageEmail.Free;
    SSL.Free;
  end;
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712125
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik,

ConnClosedGracefully, как правило, это нормальное завершение протокола и его можно просто игнорировать.
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712471
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaonJonnik,

ConnClosedGracefully, как правило, это нормальное завершение протокола и его можно просто игнорировать.

Я отловил ошибку так, но письмо не отправилось. Есть еще вараинты ?

Код: pascal
1.
2.
3.
4.
5.
6.
 Except
     on E : EIdConnClosedGracefully do
     begin
       Exit;
     end;
 end;
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712501
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik,

Я делал когда-то так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function DoSendMessage(ASMTP: TIdSMTP; AMessage: TIdMessage):boolean;
begin
 Result:=False;
 if not ASMTP.Connected then exit;
 try
   ASMTP.Send(AMessage);
   Result:=True;
 except
   on E:EIdConnClosedGracefully do Result:=True;
   on E:EIdSMTPReplyError do
      begin
        Logging(E.Message+' Error code:'+IntToStr((E as EIdSMTPReplyError).ErrorCode)+
                ' Enhanced code: '+(E as EIdSMTPReplyError).EnhancedCode.ReplyAsStr,True);
        Result:=False;
      end;
   on E:Exception do
      begin
        Logging('Send e-mail message failed. '+E.Message,True);
        Result:=False;
      end;
 end;
end;
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712505
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JonnikmakhaonJonnik,

ConnClosedGracefully, как правило, это нормальное завершение протокола и его можно просто игнорировать.

Я отловил ошибку так, но письмо не отправилось. Есть еще вараинты ?

Код: pascal
1.
2.
3.
4.
5.
6.
 Except
     on E : EIdConnClosedGracefully do
     begin
       Exit;
     end;
 end;

И куда же ведет этот икзит, и откуда к нему приходит управление?
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712553
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КотовасияJonnikпропущено...


Я отловил ошибку так, но письмо не отправилось. Есть еще вараинты ?

Код: pascal
1.
2.
3.
4.
5.
6.
 Except
     on E : EIdConnClosedGracefully do
     begin
       Exit;
     end;
 end;

И куда же ведет этот икзит, и откуда к нему приходит управление?

Весь код в первом сообщении. Так будет понятнее. Ошибку отловил, но письмо не ушло

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
try
    SMTP.Connect;
    SMTP.Send(MessageEmail);
    SMTP.Disconnect(False);

Except
     on E : EIdConnClosedGracefully do
     begin
       Result := True;
     end;

     on E : Exception do
      begin
        MessageDlg('Ошибка при отправки письма!'+#13+'Дополнительно ClassName "'+E.ClassName+'", Message"' +E.Message+'"',mtError, [mbOK], 0);
        Result := False;
      end;
  end;
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712577
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik,

Оберни Connect() и Send() отдельно в try..except, чтобы понять, где ты ловишь исключение. EIdConnClosedGracefully приходит, если сервер разрывает соединение со своей стороны. Если оно на Connect() возникает - могут быть разные варианты.
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712738
MinGW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JonnikНа одних компах отправлятеся нормально, на других вылетает ошибка ConnClosedGracefully.
На тех компах, где ошибка, вообще никогда ни разу не отправляется, или иногда через раз?
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39712745
Недоработанное Беззумие:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
const
    LineBreak: String = #13#10;
    DoubleLineBreak: String = LineBreak+LineBreak;

...

var
    MessageEmail: TIdMessage;
    SMTP: TIdSMTP;
    SSL: TIdSSLIOHandlerSocketOpenSSL;
    Attach: TIdAttachment;
    AttachFile: TIdAttachmentFile;
    AttachMemory: TIdAttachmentMemory;
    StreamFile: TMemoryStream;
        procedure SMTP_PrepareSSL();
        begin
        SSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
        try
            SSL.SSLOptions.Method:=sslvTLSv1;
            SSL.SSLOptions.Mode:=sslmUnassigned;
            SSL.SSLOptions.VerifyMode:=[];
            SSL.SSLOptions.VerifyDepth:=0;
        except
            on Error: EException do
                FreeAndNil(SSL);
                // Logging('SMTP_PrepareSSL', Error);
                raise Error;
            end;
        end;
        procedure SMTP_PrepareSMTP();
        begin
        SMTP_PrepareSSL();
        SMTP:=TIdSMTP.Create(nil);
        try
            SMTP.IOHandler:=SSL;
            SMTP.Host:=TSMTP;
            SMTP.Port:=TPort;
            SMTP.username:=Username;
            SMTP.password:=Password;
            SMTP.UseTLS:=utUseExplicitTLS;
        except
            on Error: EException do
                FreeAndNil(SMTP);
                // Logging('SMTP_PrepareSMTP', Error);
                raise Error;
            end;
        end;
        procedure SMTP_PrepareEmail();
        begin
        MessageEmail:=TIdMessage.Create(nil);
        try
            MessageEmail.ContentTransferEncoding:='base64';
            MessageEmail.From.Address:=Username;
            MessageEmail.Recipients.EMailAddresses:=ToTarget;
            MessageEmail.CharSet:='UTF-8'; // 'Windows-1251';
            MessageEmail.Subject:=Subject; // AnsiToUtf8(UTF8Encode(WideString(ConvertToWIN1251(
            MessageEmail.Body.text:=Body;
        except
            on Error: EException do
                FreeAndNil(MessageEmail);
                // Logging('SMTP_PrepareEmail', Error);
                raise Error;
            end;
        end;
        procedure SMTP_PrepareAttach();
        begin
        if Length(Path)>0 then
            try
                StreamFile:=TMemoryStream.Create;
                MainForm.ExcelSS.SaveToStream(StreamFile, TdxSpreadSheetXLSFormat);
                StreamFile.Position:=0;
                AttachMemory:=TIdAttachmentMemory.Create(MessageEmail.MessageParts, StreamFile);
                try
                    AttachMemory.ContentType:='text/plain';
                    AttachMemory.FileName:=ClearFileName(StringReplace(Path, '*', 'х', [rfReplaceAll, rfIgnoreCase]), ' ');
                except
                    on Error: EException do
                        FreeAndNil(AttachMemory);
                        // Logging('SMTP_PrepareAttach', Error);
                        raise Error;
                    end;
            finally
                FreeAndNil(StreamFile);
                end;
        end;
        procedure SMTP_TryToSend();
        const MAX_ATTEMPTS_CNT = 10; WAIT_TIME = 100;
        var CurrentAttempt: Integer;
        begin
        CurrentAttempt:=0;
        while (CurrentAttempt<MAX_ATTEMPTS_CNT) do
            begin
            Inc(CurrentAttempt);
            try
                SMTP.Send(MessageEmail);
                Result:=True;
                Exit;
            except
                on Error: EIdConnClosedGracefully do
                    Sleep(WAIT_TIME);
                else
                    raise Error;
                end;
            end;
        end;
begin
Result:=False;
// Path:=Trim(Path); // ???
// if not FileExists(Path) then Path:=''; // ???
try
    SMTP_PrepareSMTP();
    try
        SMTP.Connect();
        try
            SMTP_PrepareEmail();
            try
                SMTP_PrepareAttach();
                try
                    SMTP_TryToSend();
                finally
                    if Assigned(AttachMemory) then FreeAndNil(AttachMemory);
                    end;
            finally
                FreeAndNil(MessageEmail);
                end;
        finally
            SMTP.Disconnect(False);
            end;
    finally
        FreeAndNil(SMTP);
    end;
except
    MessageDlg('Ошибка при отправки письма!'+DoubleLineBreak+'ClassName :: "'+E.ClassName+'"'+LineBreak+'Message :: "'+E.Message+'"', mtError, [mbOK], 0);
    end;
end;

Мне аж самому интересно, получится ли со всей этой фигнёй взлететь ... %)))
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39713838
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MinGWJonnikНа одних компах отправлятеся нормально, на других вылетает ошибка ConnClosedGracefully.
На тех компах, где ошибка, вообще никогда ни разу не отправляется, или иногда через раз?

Вообще ни разу не проходило.
Скоро все проверю и скажу точный результат, где падает.
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716243
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отправил письмо так и получается, что ошика ConnClosedGracefully вылетает при SMTP.Connect.
Может как-то можно узнать ее код ?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
try
    SMTP.Connect;
Except
     on E : EIdConnClosedGracefully do
     begin
       Result := True;
     end;
end;

try
    SMTP.Send(MessageEmail);
Except
     on E : EIdConnClosedGracefully do
     begin
       Result := True;
     end;
end;


try
    SMTP.Disconnect(False);

Except
     on E : EIdConnClosedGracefully do
     begin
       Result := True;
     end;
  end;
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716296
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik,

Смотри настройки SMTP сервера, файрволы, антивири... У себя сервер рвет входящий коннект - ищи причину.
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716298
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Ну и соответственно проверяй настройки своего соединения. Может ты не на тот порт идешь.
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716352
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterМожет ты не на тот порт идешь.Тогда ошибка будет другая.

Эта ошибка говорит о том, что соединение было установлено, но серверу что-то не понравилось и он его со своей стороны закрыл.

Логин/пароль/сертификат бы проверить
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716369
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_DarkMasterМожет ты не на тот порт идешь.Тогда ошибка будет другая.

Эта ошибка говорит о том, что соединение было установлено, но серверу что-то не понравилось и он его со своей стороны закрыл.

Логин/пароль/сертификат бы проверить

Я же с пяти компов могу отправить все без проблем. А с двух не могу.
Явно тут дело не в паролях и логинах и портах подключения.
Из антивирусников, только Нод и то я его выключал, не помогло.
Вот про сертификат может быть. Но я использую эти стандартные 2 DLL libeay32.dll и ssleay32.dll для SSL, что бы если их нет, то они были всегда под рукой у программы. И они лежат в папке с программой.
Может в винде еще чего не хватает или не той версии и тогда все падает ?
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716379
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik,

может быть что угодно. для начала стоит проверить сторонним софтом то же самое действие. мейлеров хватает разных. обязательно сделай те же самые настройки и пробуй. понятно, что пока сторонний мейлер не простучится, твой тоже.
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716505
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_DarkMasterМожет ты не на тот порт идешь.Тогда ошибка будет другая.

Эта ошибка говорит о том, что соединение было установлено, но серверу что-то не понравилось и он его со своей стороны закрыл.

Логин/пароль/сертификат бы проверить

Да я в общем и целом - я уже говорил выше, что может вызвать ConnectionClosedGracefully.
...
Рейтинг: 0 / 0
Отправка Email, Indy, ошибка ConnClosedGracefully
    #39716802
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnikя использую эти стандартные 2 DLL libeay32.dll и ssleay32.dll для SSLС каких пор они стали стандартными, если они компилируются отдельно, специально для инди?

Проверьте, что везде совпадают версии этих библиотек
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отправка Email, Indy, ошибка ConnClosedGracefully
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]