Подтвердить что ты не робот

Использование Gmails Исходящий SMTP из DELPHI (Indy) с использованием TLS

Я использую INDY для отправки электронной почты с помощью SMTP-клиента на порт 25 без проблем.

Теперь мне нужно отправить электронную почту, используя учетную запись Gmail, и для этого мне нужно использовать TLS.

Может ли кто-нибудь предоставить простой пример того, как это сделать.

Спасибо

4b9b3361

Ответ 1

Этот код работает для GMail:

begin
  IDSMTP1 := TIDSMTP.Create;
  IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create;
  try

    with IDSMTP1 do
    begin
      Host := srvr.Host;
      Port := srvr.Port;
      if (srvr.needAuthentication = 'Y') then
        AuthType := satDefault
      else
        AuthType := satNone;
      IOHandler := IdSSLIOHandlerSocketOpenSSL1;

      if (srvr.secureMode = 'Y') then
        UseTLS := utUseRequireTLS
      else
        UseTLS := utNoTLSSupport;

      Username := srvr.Username;
      Password := srvr.Password;
    end;

    idMBHTML := TIdMessageBuilderHTML.Create;
    Idmessage1 := TIDMessage.Create;

    try
      with idMBHTML do
      begin
        enc := TEncoding.Unicode;
        HTML.LoadFromStream(FEmlMsg.MsgBody, enc);
        for c := 0 to FEmlMsg.Attachmnts.Count - 1 do
          Attachments.Add(FEmlMsg.Attachmnts[c]);
        FillMessage(IDMessage1);
      end;

      with Idmessage1 do
      begin
        Subject := FEmlMsg.MsgSubject;
        From.Address := FEmlMsg.FromAddress;
        From.Name := FEmlMsg.FromName;
        Recipients.EMailAddresses := FEmlMsg.RecipientAddress;
        if FEmlMsg.ReceiptRecipientAddress <> '' then
          ReceiptRecipient.Address := FEmlMsg.ReceiptRecipientAddress;
        if FEmlMsg.ReceiptRecipientName <> '' then
          ReceiptRecipient.Name := FEmlMsg.ReceiptRecipientName;
      end;

      with IDSMTP1 do
      begin
        if not Connected then
          Connect;
        Send(IdMessage1);
      end;

    finally
      Idmessage1.Free;
      idMBHTML.Free;
    end;
  finally
    IDSMTP1.Free;
    IdSSLIOHandlerSocketOpenSSL1.Free;
  end;
end;

Ответ 2

Для работы IdSSLIOHandler вам потребуется SSL dll.

Есть информация на Indy SSL Website которые перенаправляют вас на Fulgan Download Site

Вы можете загрузить один пакет, подходящий для вашей платформы, а затем включить 2 dll с вашим приложением. Я сам использую эти 2 dll с компонентами indy для отправки почты по электронной почте более 2 лет. Единственная проблема заключается в том, что отправка выполняется довольно медленно.

Ответ 3

Вы не говорите, какую версию Indy вы используете. Для использования TSL (последние изменения безопасности в Hotmail/GMaill) вам необходимо использовать Indy 10.

Смотрите описание здесь.

На самом деле, я использую эту конфигурацию для отправки писем с помощью GMail, и она работает правильно:

  • MailServer = smtp.gmail.com
  • PortServer = 465
  • [email protected](то же самое письмо)
  • SSLMethod = sslvTLSv1