2012-04-23 125 views
5

德尔福7与Indy 10.5.8.0。德尔福和Indy与SSL

我很抱歉,如果这是重新调整以前提出的问题,但我不能解决这个问题。

我使用Indy TidMessageBuilderHTML发送带有嵌入式图像的HTML电子邮件来构建我的html电子邮件。这非常酷,迄今为止完美。

我现在的问题是要满足需要SSL/TLS身份验证的SMTP服务器。我有OPENSSL DLL文件有这么多问题,现在看来,32位版本不能运行在64位等。我想要避免使用DLL文件的解决方法。 (最好我需要保持它单个EXE应用程序)。

我的问题是:我想使用Indy V10,因为它不需要运送OPENSSL dll。有没有办法做到这一点?是否没有可用的支持Indy SSL(TIdSSLIOHandlerSocketOpenSSL)的delphi SSL库?

此外,我接受其他建议,这将有助于我的HTML电子邮件与嵌入式图像。谢谢。

+0

如果你想把所有东西都放到你的exe文件中,你需要在你的dpr文件的uses子句中的所有其他单元之前嵌入dll,添加一个单元,它的唯一目的是在初始化时从应用程序中提取dll 。似乎很奇怪,你的dll在x64上无法工作...... – ComputerSaysNo 2012-04-23 21:06:40

+0

SSL的静态链接似乎是没有人做的,可能是因为C库依赖关系太复杂。嵌入然后加载SSL DLL似乎是你唯一的选择,是的,一个32位的DLL将在64位窗口上工作。为什么不呢? – 2012-04-23 21:20:12

+2

只是一个旁注。您可以从['here'](http://indy.fulgan.com/SSL/)获得与Indy兼容的'OpenSSL'库。在那里你会发现这些库的64位版本。 – TLama 2012-04-23 21:32:36

回答

2

您问过在TIdSSLIOHandlerSocketOpenSSL.StartSSL方法中支持TIdSSLIOHandlerSocketOpenSSL类的库,但这正是需要外部DLL的类。

最简单的解决方案是发布DLL(32位或64位版本),并在运行时检查DLL的存在性,然后尝试调用您的“SendMail”函数,这样您可以向用户展示更易于理解的错误消息,准确指出应用程序预计会找到哪些文件。