我在使用 SquirrelMail 发送邮件时遇到问题。我向开源支持寻求帮助,以下是他们的回复。
您需要做的是查看日志并显示阻止此操作的错误。这是快速解决问题的唯一方法,尤其是在向其他人寻求帮助时。
哪些日志?我查看了 httpd 日志,但我认为那是不正确的,因为如果我没记错的话,那是 Web 服务器日志?
但是我在哪里可以找到 SquirrelMail 日志?我搜索了几个小时,却什么也没找到。
答案1
SquirrelMail 是一个 PHP 应用程序,因此其日志记录行为在 中配置php.ini
。通常此文件位于 之类的某个位置/etc/php/php.ini
。就我而言,它位于 中/usr/local/etc/php/php.ini
。我将其配置如下:
display_errors = Off
log_errors = On
error_log = /dev/stderr
这将导致 Apache 进程(在我的情况下在 Docker 容器中运行)打印出错误消息,但不会在浏览器中显示错误。
不幸的是,SquirrelMail 似乎故意使用@
运算符来隐藏错误消息,这使得我们无法判断到底发生了什么。就我而言,我得到了一个错误Error connecting to IMAP server
。为了找出更多详细信息,我必须在 SquirrelMail 源代码中搜索此错误,找到其上方以 为前缀的函数调用@
,删除@
,然后重新启动我的 Web 服务器。然后错误消息终于出现在日志中。我必须更改的行如下所示:
$imap_stream = @fsockopen($imap_server_address, $imap_port, $error_number, $error_string, 15);
但是根据您遇到的错误,您必须在不同的地方更改源代码。
答案2
这可能是一个 XY 问题,其中:
Y:SquirrelMail 日志在哪里?
SquirrelMail 是一个电子邮件客户端正式 邮件用户代理 (MUA)用 PHP 编写。它不发送或接收电子邮件,但充当 IMAP(和 SMTP)客户端。作为 PHPWeb应用程序它没有自己的日志记录,因此信息位于 Web 服务器日志中,通常分为使用权和错误日志。
X:我如何调试我的邮件传递?
这取决于邮件服务器您正在使用。稍微简化一下,邮件服务器有两个方面(例如 Wikipedia 文章电子邮件代理(基础设施)有助于了解整体情况):
- 消息传输代理(MTA)消息提交代理(MSA)使用 SMTP 协议建立用于传递邮件的网络。
- 消息传递代理 (MDA)将邮件传递到本地邮箱,存储邮件并允许使用 SquirrelMail 中使用的 IMAP 或 Microsoft 的 MAPI 等协议访问邮箱。
有些邮件服务器软件捆绑了所有内容,有些则专门提供 MTA 或 MDA 服务。这意味着为了调试电子邮件传递,您必须:
- 检查您的 SquirrelMail 配置并查看它连接到哪些服务器。
- 排除这些客户端-服务器连接失败的可能性。
- 如果问题出在发送邮件上,则集中在 SMTP 服务器上,如果问题出在接收邮件上,则集中在 IMAP 服务器上。
- 弄清楚使用了哪些服务器软件。
- 在他们的日志中查找问题。