You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.so
    
    若输出中有not found项,需先安装对应系统依赖包。

Indy 10专属调整

  • 添加SSL库路径指定:
    在代码开头调用IdOpenSSLSetLibPath明确库文件位置,否则Indy会默认搜索系统库路径:
    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;
    
    端口465需启用SSL加密,必须为SMTP组件绑定TIdSSLIOHandlerSocketOpenSSL,否则无法建立加密连接。

XMailer专属调整

  • 确认路径与库文件匹配:
    检查IdOpenSSLSetLibPath指向的目录中,是否存在正确的软链接文件(libcrypto.so、libssl.so),而非仅编译生成的带版本号原文件。
  • 指定TLS版本:
    Gmail要求使用TLS 1.2及以上版本,若XMailer支持,明确设置TLS版本:
    Mail.Smtp.TLSVersion := tlsv1_2;
    

内容的提问来源于stack exchange,提问作者ThN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:44:55