Ubuntu下Indy 10与XMailer发送邮件SSL库加载失败求助
解决Ubuntu下Indy 10/XMailer发送邮件时的SSL库加载错误
通用排查与修复步骤
- 匹配OpenSSL版本兼容性:
Indy 10和XMailer的新版本已不再支持OpenSSL 1.0.x系列(如你使用的1.0.2u),建议编译OpenSSL 1.1.x分支(如1.1.1w)或3.x版本,这两个分支仍受支持且兼容主流邮件组件。 - 修复库文件符号链接:
OpenSSL编译后生成的库文件带有版本后缀(例如libcrypto.so.1.1、libssl.so.1.1),但组件只会查找不带版本号的文件名。在项目目录下执行以下命令创建软链接:ln -s libcrypto.so.1.1 libcrypto.so ln -s libssl.so.1.1 libssl.so - 修正库文件权限:
确保库文件有全局可读权限,执行:chmod 644 libcrypto.so libssl.so - 验证库文件可用性:
用ldd命令检查库是否存在依赖缺失:
若输出中有ldd libcrypto.so ldd libssl.sonot found项,需先安装对应系统依赖包。
Indy 10专属调整
- 添加SSL库路径指定:
在代码开头调用IdOpenSSLSetLibPath明确库文件位置,否则Indy会默认搜索系统库路径:
端口465需启用SSL加密,必须为SMTP组件绑定uses IdSSLOpenSSL; procedure TForm1.Button1Click(Sender: TObject); begin IdOpenSSLSetLibPath('/home/bobby/testingemail/'); SMTP.Host := 'smtp.gmail.com'; SMTP.Port := 465; // 绑定SSL IOHandler SMTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP); (SMTP.IOHandler as TIdSSLIOHandlerSocketOpenSSL).SSLOptions.Method := sslvTLSv1_2; // ... 其余代码保持不变 end;TIdSSLIOHandlerSocketOpenSSL,否则无法建立加密连接。
XMailer专属调整
- 确认路径与库文件匹配:
检查IdOpenSSLSetLibPath指向的目录中,是否存在正确的软链接文件(libcrypto.so、libssl.so),而非仅编译生成的带版本号原文件。 - 指定TLS版本:
Gmail要求使用TLS 1.2及以上版本,若XMailer支持,明确设置TLS版本:Mail.Smtp.TLSVersion := tlsv1_2;
内容的提问来源于stack exchange,提问作者ThN
相关产品推荐
相关产品推荐

