德尔福与indy

时间:2012-09-05 23:03:49

标签: delphi delphi-2010 indy10

我刚刚开始在Delphi 2010中使用indy10(今天),在阅读了每一个我设法使其工作后,我可以使用gmail发送电子邮件,它在我的计算机上工作正常,但当我在我的笔记本电脑上安装应用程序时(用于测试),它没有发送电子邮件,我的应用程序停止工作,我是否必须在我的笔记本电脑上安装其他东西或如何让它在我安装我的程序的每台计算机上工作,到目前为止我必须安装在6个不同的计算机,一些使用Windows XP和一些Windows 7,我希望有一种方法可以使它成为多平台或其他东西。

这是我的代码:

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;

我在我的笔记本电脑上运行了proyect,它说:

无法加载SSL库,现在,我做了很多事情让它工作,下载了很多东西并尝试了很多其他的东西,现在我不知道这些库在哪里以及如何检索它们,我想知道一个通过安装加载它们的方法,以便我的安装程序可以使用所需的一切。

提前致谢。

1 个答案:

答案 0 :(得分:5)

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

在旁注中,您无需设置IOHandler的DestinationHostPort属性。 Connect()方法将在内部为您处理。