Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 ssl is not available on this server при отправке через TidSMTP  [new]
bilov
Member

Откуда: Санкт-Петербург
Сообщений: 494
Здравствуйте. Я отправляю письма с почты mail.ru, yandex.ru. отправляю с ssl так как иначе не дает.

+ код моей отправки...
procedure SendOnEmail;
var
 IdSMTP1: TIdSMTP;
 idMessage1: TIdMessage;
 idAttach: TidAttachment;
 idText1: TidText;
 p: TidMessageParts;
 DT:TDateTime;
 IdSSLIOHandlerSocketOpenSSL1:TIdSSLIOHandlerSocketOpenSSL;
 ExFileName2:string;
 NeedCopy:boolean;
 sa:TStringDynArray;
 I:integer;
begin



    IdSMTP1 := TIdSMTP.Create(nil);

    try
        IdSMTP1.Host:= MailHost;
        IdSMTP1.Password:= EmpPsw;
        IdSMTP1.Username:= EmpUser;


        if
        (Pos('.yandex.ru',MailHost)>0) or
        (Pos('.mail.ru',MailHost)>0) or
        (Pos('.gmail.ru',MailHost)>0)
        then
        begin

          IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(IdSMTP1);

          IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
          IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
          IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 0;

          IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
          if EmPort>0 then
          IdSMTP1.Port := EmPort
          else
          IdSMTP1.Port := 465;
          IdSMTP1.UseTLS := utUseExplicitTLS;
          IdSMTP1.ReadTimeout := 15000;
        end;




        idMessage1 := TIdMessage.Create(IdSMTP1);
        idMessage1.OnInitializeISO := LInitializeISO;
        idMessage1.From.Address := EmpEmail;
        idMessage1.From.Name := EmpName;//'Степан Иванов';
        idMessage1.Subject := EmSubject;//'Письмо с картинкой AComp'+FormatDateTime('dd.mm.yyyy hh:mm:ss',Now);

        idMessage1.CharSet := 'Windows-1251';
        idMessage1.ContentTransferEncoding  := '8bit';




        p := idMessage1.MessageParts;
        try
         // Load slBody with your HTML text...
          idText1 := TidText.Create(p);//, slBody);
          idText1.ContentType := 'text/html';
          idText1.CharSet := 'Windows-1251';
          idText1.ContentTransfer := '8bit';
          //if FileExists(EmBodyFileName) then
          idText1.Body.AddStrings(EmailBody);

          if EmailBody.Count>0 then
          if trim(FilePicture)<>'' then
          if not FileExists(FilePicture) then
          AddClSmallLog('А файла фотки тела письма "'+FilePicture+'" нету!')
          else
          begin
            idAttach := TIdAttachmentFile.Create(p,FilePicture);// TidAttachment.Create(p);

            idAttach.ContentType := 'image/jpeg';
            idAttach.ContentDisposition := 'inline';
            idAttach.ExtraHeaders.Values['content-id'] := ExtractFileName(FilePicture);

            idAttach.DisplayName := ExtractFileName(FilePicture);
            idMessage1.ContentType := 'multipart/mixed';
          end;
          //SetFilePath(s,False);


          if FileExists(ExFileName2) then
          TIdAttachmentFile.Create(idMessage1.MessageParts, ExFileName2);





          idMessage1.Recipients.EMailAddresses := Email;
          idSMTP1.Connect;
          idSMTP1.Send(idMessage1);

        finally
         if idSMTP1.Connected then
         idSMTP1.Disconnect;
         idSMTP1.Free;

        end;


    except
      on E:Exception do
      begin
       E.Message := STClCode +'- Ошибка E-mail: ' + E.Message;
       raise;
      end;
    end;


end;



На компе на котором скомпиллировано работает, и на одном другом тоже. На всех остальных нет, дает "ssl is not available on this server" при idSMTP1.Send(idMessage1);. У меня Delphi 2010 и Indy 10.5.5. Павда дома где Delphi XE7 ведет себя также. Если почта не такая а рабочая доменная типа @myfirm.ru то все норм как с IdSSLIOHandlerSocketOpenSSL1 так и без него.Скажите пожалуйста что тут можно сделать чтобы работала на всех.
12 июн 18, 22:36    [21486972]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
Exteris
Member

Откуда: Новосибирск
Сообщений: 942
Библиотеки ssleay32.dll и libeay32.dll есть в системе?
13 июн 18, 08:44    [21487297]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
L_argo
Member

Откуда:
Сообщений: 96
Вау !!! Я только хотел создать топик про сабж....
Меня конкретно интересует сабж для гмайл. На нем включен IMAP и разрешение работы с небезопасными приложениями.

Не смотря на обилие примеров, ни один из них так просто не работает.
Использование ИНДИ предусматривает установку ssleay32.dll и libeay32.dll. Но.... их разновидностей много и они специфичны для каждой ОС.
Мне не удалось подобрать вариант для Вин10. При этом у юзера могут быть какие угодно ОС: 32/64 XP/7/8/10/серверные.

Также есть полезный ресурс где много примеров.
Там можно выкачать некислого размера инсталл для СОМ-объекта EA_SendMail.DLL. с которым идут многочисленные примеры.
Делфийский пример таки работает. Но.... он открывает браузерное окно для входа в гугл-эккаунт, чтобы получить оттуда токен безопасности, который помещается в качестве пароля в TMail: oSmtp.Password := m_accessToken.
Как попроще получить этот токен, я пока не разобрался.

А еще встречал экзотический способ: выполнение powershell-скрипта. :)

Не исключаю, что у разных почтовых служб, публичных или корпоративных будут свои отличия и косяки.

зы: Куда катится ИТ ??? Мегабайты кода, куча внешних специфичных и глючных DLL, браузеров, JSON-парсеров и это только для отправки сраного письма.
13 июн 18, 09:52    [21487420]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 11885
L_argo
Мне не удалось подобрать вариант для Вин10. При этом у юзера могут быть какие угодно ОС: 32/64 XP/7/8/10/серверные.

Не забывайте о прокси, портах, брандмауэрах.
Стараюсь использовать ssleay32.dll и libeay32.dll последних версий. Не забывайте про x86/x64.
13 июн 18, 12:09    [21487871]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 11885
Не забывайте про тип шифрования, т.е. нужно выбирать TLS 2.1 / SSL 2.3.
13 июн 18, 12:17    [21487891]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
L_argo
Member

Откуда:
Сообщений: 96
X11
L_argo
Мне не удалось подобрать вариант для Вин10. При этом у юзера могут быть какие угодно ОС: 32/64 XP/7/8/10/серверные.

Не забывайте о прокси, портах, брандмауэрах.
Стараюсь использовать ssleay32.dll и libeay32.dll последних версий. Не забывайте про x86/x64.
Порты и прокси не мешают.
Через EA_SendMail все работает.

Кароч универсального и надежного способа по сабжу наверно не существует в природе. :(
13 июн 18, 12:17    [21487896]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 11885
по SMTP:
https://support.google.com/mail/answer/7126229?hl

для SSL порт = 465, для TLS порт = 587
13 июн 18, 12:19    [21487906]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 11885
L_argo
Кароч универсального и надежного способа по сабжу наверно не существует в природе. :(


Всё существует. Только нужно документацию читать по конкретному серверу.
13 июн 18, 12:20    [21487912]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
bilov
Member

Откуда: Санкт-Петербург
Сообщений: 494
Сейчас проверяю на одном компе. Раньше там не высылало на недоменную почту давало 'Read timed out'. После того как рядом с прогой положил libeay32.dll и ssleay32.dll такое стало давать только в первый раз после запуска проги, а потом нормально высылает. Это уже замечательно. Но при закрытии проги выдает сообщение 'Rutime error 216 at 00404DFA'. Нужно ещё узнать в какой конкретно момент это происходит. Это сообщение нужно будет обязательно убрать так как моя прога автоматически запускается, обо всех ошибках должна писать в лог и не выдавать никаких окон с сообщениями
13 июн 18, 13:05    [21488131]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10301
L_argo
Использование ИНДИ предусматривает установку ssleay32.dll и libeay32.dll. Но.... их разновидностей много и они специфичны для каждой ОС.
Более того - эти библиотеки должны быть заточены целенаправленно под инди 20771195, 20771658
13 июн 18, 13:47    [21488259]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
L_argo
Member

Откуда:
Сообщений: 96
_Vasilisk_
L_argo
Использование ИНДИ предусматривает установку ssleay32.dll и libeay32.dll. Но.... их разновидностей много и они специфичны для каждой ОС.
Более того - эти библиотеки должны быть заточены целенаправленно под инди 20771195, 20771658
Поставил.
Результат стал чуть другой:

Error connecting with SSL.
-- ОК --

Это лютый ппц, как для такой простой задачи....
У мну Вин10.
13 июн 18, 13:56    [21488309]     Ответить | Цитировать Сообщить модератору
 Re: ssl is not available on this server при отправке через TidSMTP  [new]
bilov
Member

Откуда: Санкт-Петербург
Сообщений: 494
Проверял на компах на которых глючило. Раньше там не высылало на недоменную почту давало 'Read timed out'. После того как рядом с прогой положил libeay32.dll и ssleay32.dll такое стало давать только в первый раз после запуска проги, а потом нормально высылает. Это уже замечательно. Но при закрытии проги выдает сообщение 'Rutime error 216 at 00404DFA'. Преодолеть это пока удалось только таким жестким способом
procedure TForm1.FormDestroy(Sender: TObject);
begin
 Application.Terminate;
end;
Form1 - главная форма проги. У меня все важные компоненты динамически сознаются и в той же процедуре удаляются. Так что скорее всего это допустимо
15 июн 18, 15:08    [21494063]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить