Использование исходящих SMTP Gmail от DELPHI (Indy) с использованием TLS - PullRequest
13 голосов
/ 12 августа 2011

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

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

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

Спасибо

Ответы [ 3 ]

6 голосов
/ 12 августа 2011

Этот код работает для 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;
1 голос
/ 13 августа 2011

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

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

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

0 голосов
/ 09 мая 2016

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

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

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

  • MailServer = smtp.gmail.com
  • PortServer = 465
  • FromText=account@gmail.com (тоже самое из почты)
  • SSLMethod = sslvTLSv1
...