Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отправка Email, Indy, ошибка ConnClosedGracefully / 18 сообщений из 18, страница 1 из 1
02.10.2018, 17:12
    #39711851
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
Отправляю письмо с вложениями через 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
02.10.2018, 22:37
    #39712125
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
Jonnik,

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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
 Except
     on E : EIdConnClosedGracefully do
     begin
       Exit;
     end;
 end;
...
Рейтинг: 0 / 0
03.10.2018, 15:25
    #39712501
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
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
03.10.2018, 15:27
    #39712505
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
JonnikmakhaonJonnik,

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

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

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

И куда же ведет этот икзит, и откуда к нему приходит управление?
...
Рейтинг: 0 / 0
03.10.2018, 16:48
    #39712553
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
Котовасия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
03.10.2018, 17:28
    #39712577
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
Jonnik,

Оберни Connect() и Send() отдельно в try..except, чтобы понять, где ты ловишь исключение. EIdConnClosedGracefully приходит, если сервер разрывает соединение со своей стороны. Если оно на Connect() возникает - могут быть разные варианты.
...
Рейтинг: 0 / 0
04.10.2018, 00:19
    #39712738
MinGW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
JonnikНа одних компах отправлятеся нормально, на других вылетает ошибка ConnClosedGracefully.
На тех компах, где ошибка, вообще никогда ни разу не отправляется, или иногда через раз?
...
Рейтинг: 0 / 0
04.10.2018, 02:43
    #39712745
Отправка Email, Indy, ошибка 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.
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
06.10.2018, 01:21
    #39713838
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
MinGWJonnikНа одних компах отправлятеся нормально, на других вылетает ошибка ConnClosedGracefully.
На тех компах, где ошибка, вообще никогда ни разу не отправляется, или иногда через раз?

Вообще ни разу не проходило.
Скоро все проверю и скажу точный результат, где падает.
...
Рейтинг: 0 / 0
11.10.2018, 16:29
    #39716243
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
Отправил письмо так и получается, что ошика 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
11.10.2018, 17:22
    #39716296
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка Email, Indy, ошибка ConnClosedGracefully
Jonnik,

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

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

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

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

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

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

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

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

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

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

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

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


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