Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用TLS从DELPHI(Indy)使用Gmail发送SMTP_Delphi_Email_Smtp_Indy_Ssl - Fatal编程技术网

使用TLS从DELPHI(Indy)使用Gmail发送SMTP

使用TLS从DELPHI(Indy)使用Gmail发送SMTP,delphi,email,smtp,indy,ssl,Delphi,Email,Smtp,Indy,Ssl,我使用INDY在端口25上使用SMTP客户端发送电子邮件,没有问题 现在我需要使用Gmail帐户发送电子邮件,为此我需要使用TLS 谁能提供一个简单的例子来说明如何做到这一点 谢谢此代码适用于GMail: begin IDSMTP1 := TIDSMTP.Create; IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create; try with IDSMTP1 do begin

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

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

谁能提供一个简单的例子来说明如何做到这一点


谢谢

此代码适用于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;
开始
IDSMTP1:=tidstp.Create;
IdSSLIOHandlerSocketOpenSSL1:=TIdSSLIOHandlerSocketOpenSSL.Create;
尝试
使用IDSMTP1 do
开始
主机:=srvr.Host;
端口:=srvr.Port;
如果(srvr.needAuthentication='Y'),则
AuthType:=默认值
其他的
AuthType:=satNone;
IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
如果(srvr.secureMode='Y'),则
UseTLS:=utUseRequireTLS
其他的
UseTLS:=utNoTLSSupport;
用户名:=srvr.Username;
密码:=srvr.Password;
结束;
idMBHTML:=TIdMessageBuilderHTML.Create;
Idmessage1:=TIDMessage.Create;
尝试
用idMBHTML做什么
开始
enc:=TEncoding.Unicode;
HTML.LoadFromStream(FEmlMsg.MsgBody,enc);
对于c:=0到FEmlMsg.attachments.Count-1 do
附件。添加(FEmlMsg.附件[c]);
FillMessage(IDMessage1);
结束;
用Idmessage1做什么
开始
主题:=FEmlMsg.MsgSubject;
From.Address:=FEmlMsg.FromAddress;
From.Name:=FEmlMsg.FromName;
Recipients.EMailAddresses:=FEmlMsg.RecipientAddress;
如果FEmlMsg.ReceiptRecipientAddress为“”,则
ReceiptRecipient.Address:=FEmlMsg.ReceiptRecipientAddress;
如果FEmlMsg.ReceiptRecipientName为“”,则
ReceiptRecipient.Name:=FEmlMsg.ReceiptRecipientName;
结束;
使用IDSMTP1 do
开始
如果没有连接,那么
连接
发送(IdMessage1);
结束;
最后
Idmessage1.免费;
idMBHTML.Free;
结束;
最后
IDSMTP1.免费;
IdSSLIOHandlerSocketOpenSSL1.免费;
结束;
结束;

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

有信息在 它将你重定向到


您可以下载一个适合您的平台的软件包,然后在应用程序中包含两个DLL。我本人使用这两个DLL和印第组件通过电子邮件发送邮件超过2年。唯一的问题是发送速度很慢。

您没有说您使用的是哪个版本的Indy。 要使用TSL(Hotmail/Gmail中的最后一次安全更改),您需要使用Indy 10

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

  • MailServer=smtp.gmail.com
  • 端口服务器=465
  • FromText=account@gmail.com(与邮件相同)
  • SSLMethod=sslvTLSv1

谷歌“indy+smtp+gmail”的排名结果显示:我曾经使用过马可·坎图的指南:你测试过自己吗?我在connect上收到一个错误:EIDOSSLColdNotLoadsSlibrary,消息为“无法加载SSL库”。请确保您的Indy版本使用的是正确版本的OpenSSL DLL。使用Indy的
WhichFailedToLoad()
函数来确定OpenSSL的哪些部分未能加载。正如Remy上面提到的,您必须将OpenSSL DLL文件与应用程序一起包含。它们应该与应用程序可执行文件位于同一文件夹中,或者应该位于系统路径中(例如System32文件夹)。您可以从Indy网站下载最新文件。