使用TLS使用来自DELPHI(Indy)的Gmails传出SMTP

时间:2011-08-12 09:08:19

标签: delphi email smtp indy ssl

我使用INDY在端口25上使用SMTP客户端发送电子邮件没有问题。

现在我需要使用Gmail帐户发送电子邮件,因此我需要使用TLS。

任何人都可以提供一个关于如何做到的简单示例。

由于

3 个答案:

答案 0 :(得分:6)

此代码适用于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 :(得分:1)

您需要SSL dll才能使IdSSLIOHandler正常工作。

Indy SSL Website有信息 将您重定向到Fulgan Download Site

您可以下载适合您平台的一个软件包,然后在您的应用程序中包含2个dll。我自己正在使用带有indy组件的2个dll通过电子邮件发送邮件超过2年。唯一的问题是发送速度很慢。

答案 2 :(得分:0)

你没有说你正在使用什么版本的Indy。 要使用TSL(Hotmail / GMaill中的最后一次安全更改),您需要使用Indy 10。

请参阅description here

实际上Y使用此配置来使用GMail发送邮件并且它可以正常工作:

  • 邮件服务器= smtp.gmail.com
  • 的PortServer = 465
  • FromText=account@gmail.com(同样是邮件)
  • SSLMethod = sslvTLSv1