Using Gmails Outgoing SMTP from DELPHI(Indy) using TLS

十年热恋 提交于 2019-11-27 17:37:35

问题


I am using INDY to send Email using the SMTP client on port 25 with no problem.

Now I need to send an Email using a Gmail account and for that I need to use TLS.

Can anyone provide a simple sample on how to do that.

Thanks


回答1:


This code works for 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:


You need the SSL dll to make the IdSSLIOHandler work.

There is info at Indy SSL Website which redirect you to Fulgan Download Site

You can download one package suitable for your platform and then include the 2 dlls with your application. I myself are using that 2 dlls with the indy components to send mail through email for over 2 years. The only problem is the sending is quite slow.




回答3:


You not say what version of the Indy that you are using. For use TSL (last security changes in Hotmail/GMaill) you need to use Indy 10.

See description here.

Actually Y use this configuraction to send mails using GMail and it work correctly:

  • MailServer=smtp.gmail.com
  • PortServer=465
  • FromText=account@gmail.com (same of mail)
  • SSLMethod=sslvTLSv1


来源:https://stackoverflow.com/questions/7037929/using-gmails-outgoing-smtp-from-delphiindy-using-tls

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!