代码之家  ›  专栏  ›  技术社区  ›  Edgar Holguin

德尔福与印度

  •  1
  • Edgar Holguin  · 技术社区  · 12 年前

    我刚开始在Delphi 2010中使用indy10(今天),在阅读了所有内容后,我设法使其工作,我可以使用gmail发送电子邮件,它在我的计算机上运行良好,但当我在笔记本电脑上安装应用程序(用于测试)时,它不会发送电子邮件,我的应用程序也停止工作,我是否必须在笔记本电脑中安装其他东西,或者我如何使它在我安装程序的每台计算机上运行,到目前为止,我不得不在6台不同的计算机上安装它,有些使用WindowsXP,有些使用Windows7,我希望有一种方法可以使它成为多平台或其他什么的。

    这是我的代码:

    procedure SendIndyMail;
    begin
    
        Form_final.IdSMTP1 .IOHandler := Form_final.IdSSLIOHandlerSocketOpenSSL1;
        Form_final.IdSMTP1.Host:= 'smtp.gmail.com';
        Form_final.IdSMTP1.Password:= 'xxxxxx';
        Form_final.IdSMTP1.Port := 587;
        Form_final.IdSMTP1.UseTLS := utUseExplicitTLS;
        Form_final.IdSMTP1.Username := 'xxxxxx';
    
        Form_final.IdSSLIOHandlerSocketOpenSSL1.Destination := 'smtp.gmail.com:587';
        Form_final.IdSSLIOHandlerSocketOpenSSL1.Host := 'smtp.gmail.com';
        Form_final.IdSSLIOHandlerSocketOpenSSL1.Port := 587;
        Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
        Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
        Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [];
        Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 0;
    
        Form_final.IdMessage1.Subject:=conect.Q_selec_info_generalDescripcion.Text+' '+DateToStr(Date);
        Form_final.IdMessage1.Recipients.EMailAddresses:=conect.Q_config_seleccorreo.Text;
        TIdAttachmentFile.Create(Form_final.IdMessage1.MessageParts, conect.Q_config_selecfolder.Text+'\reporte_'+FormatDateTime('dddd d of mmmm yyyy', Date)+' Inventario '+Form_inventario.Edit_id_inventario.Text+'.pdf');
    
        Form_final.IdSMTP1.Connect;
        Form_final.IdSMTP1.Send(Form_final.IdMessage1);
        Form_final.IdSMTP1.Disconnect;
    end;
    

    我在笔记本电脑上运行了这个项目,上面写着:

    无法加载SSL库,现在,我做了很多事情来让它发挥作用,下载了很多东西,并尝试了很多其他东西,现在我不知道这些库在哪里,也不知道如何检索它们,我想知道一种在安装时加载它们的方法,这样我的安装程序就可以完成所需的一切。

    提前谢谢。

    1 回复  |  直到 12 年前
        1
  •  5
  •   Remy Lebeau    12 年前

    请确保您的目标计算机上有OpenSSL DLL,最好是在应用程序的安装文件夹中。如果你仍然有错误,Indy的 WhichFailedToLoad() 中的函数 IdSSLOpenSSLHeaders 单元可以告诉您为什么它无法加载OpenSSL DLL。至于DLL本身,您可以从Indy的下载与Indy兼容的副本 Fulgan mirror

    附带说明一下,您不需要设置IOHandler的 Destination , Host Port 属性。这个 Connect() 方法将在内部为您处理该问题。