SmtpClient-for-Qt不能使用ssl发送的处理办法

本文受Qt 5.13.2 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed启发

项目需要在特定的时刻通过邮件发送报警信息,主体框架使用Qt开发,找了一个基于Qt开发的邮件客户端程序SmtpClient-for-Qt。使用Qt5.12.6,编译、启动运行都很正常,但是在使用QQ邮箱进行发送的时候,遇到几个问题:

  • 无法连接QQ邮箱服务器smtp.qq.com
    原因是QQ邮箱未开启pop/smtp功能,需要web登录邮箱开启相应功能
  • 无法通过ssl连接465端口
    本文主要指导解决此问题

在使用ssl连接465端口时,Qt后台打印信息

qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

检索网上的解决方案,大多是指出缺少openssl库的缘故,绝大部分文章都指出需要找到libeay32.dll和ssleay32.dll这两个文件,并放到Qt安装目录中。但实操过后并未解决问题。

通过QSslSocket::supportsSsl()观察当前系统平台是否支持ssl,打印结果是false。

文章开头链接的文章中提到一个链接Win32OpenSSL。这里提供windows平台下编译好的openssl库文件的下载。

下载了32位/64位的openssl库,并:

  1. 从中拷贝libcrypto-1_1.dlllibssl-1_1.dll到d:\Programs\Qt\Qt5.12.6\5.12.6\mingw73_32\bin\中
  2. 拷贝libcrypto-1_1-x64.dlllibssl-1_1-x64.dll到d:\Programs\Qt\Qt5.12.6\5.12.6\mingw73_64\bin\中

再次运行打印QSslSocket::supportsSsl(),现在返回结果为true了。

再次通过ssl连接smtp.qq.com的465端口,可以正常发送邮件了。

这个问题出现的原因,在Qt官方论坛里有讨论,可以窥见Qt5.12.6这些高版本中的openssl使用的1.1.x版本,而libeay32.dll和ssleay32.dll对应的版本是openssl1.0.x。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值