后台上下文:使用 php8.1、Ubuntu 22.04 的新邮件服务器。旧服务器 php7.4,Debian Stretch 均使用 Phpmailer 5.5。
以前的服务器会发送带有附件的电子邮件,并将包含附件的副本放在已发送文件夹中。新服务器可以正确发送,但不会保存副本(到发送文件夹)。
错误信息是:
[服务器名称] 的 TLS/SSL 失败:SSL 协商失败 (errflg=2),在线 0 中
未知
我在 mail.log 中找不到此错误的任何详细信息
这是我之前成功使用的代码,扩展类(但使用临时调试行来验证传递给 imap_append 的数据):
$imapStream = imap_open("{" . $this->Host . "}" . $path , $this->Username, $this->Password);
echo "\nHost: ".$this->Host."\n";
echo "\npath: ".$path."\n";
echo "\nUsername: ".$this->Username."\n";
echo "\nPassword: ".$this->Password."\n";
echo "\nimapStream: ".$imapStream."\n";
imap_append($imapStream, "{" . $this->Host . "}" . $path, $message);
imap_close($imapStream);
Thunderbird 和 Dovecot 都工作得很好,实际上只是 PHPMailer 有问题。 PHP IMAP 扩展已安装。
我尝试将 Phpmailer 升级到较新的版本 -6.9.1,但这带来了许多其他问题。
这显然是一个 IMAP 身份验证问题,但我不知道从哪里获取信息来解决它。
任何帮助将不胜感激。
PHPMailer 确实不参与其中 - 它只是受其运行环境的影响,需要 IMAP 和 openssl PHP 扩展才能工作。您显示的错误表明 PHP 无法建立或验证安全的 IMAP 连接。这可能是由于您的邮件服务器配置错误(例如,如果它提供无效或不受信任的证书,或者您连接的端口不支持加密 - 检查您的端口号),或 PHP 本身配置错误(例如,您的 CA捆绑包已过时,或者您的 openssl 扩展已过时)。
我建议在服务器的命令行上使用 openssl 检查 IMAP 连接,例如:
openssl s_client -connect map.example.com:993 -crlf