致命 PHP-roundcube 错误(缺少 Mail_mimePart)

Fatal PHP-Error in roundcube (missing Mail_mimePart)

我们的 ubuntu 服务器上有一个 roundcube 实例。

从昨天开始,我们就不能再发送邮件了。点击 roundcube 中的发送按钮后,"Nachricht wird gesendet..."-消息(正在发送电子邮件)会不断加载。

搜索日志后,发现错误信息:

[30-Jun-2015 10:33:50 UTC] PHP Warning:  Missing argument 1 for Mail_mimePart::Mail_mimePart(), called in [***]/roundcube/vendor/pear/mail_mime/Mail/mime.php on line 1288 and defined in [***]/roundcube/vendor/pear/mail_mime-decode/Mail/mimePart.php on line 127
[30-Jun-2015 10:33:50 UTC] PHP Fatal error:  Call to undefined method Mail_mimePart::encodeHeader() in [***]/roundcube/vendor/pear/mail_mime/Mail/mime.php on line 1289

它仍然可以通过 SMTP / Dovecot 直接发送电子邮件,所以这边应该没问题。

我的第一个想法是安装 pear 软件包,但它们似乎已正确安装在 roundcube 中。

堆栈跟踪是:

[30-Jun-2015 11:52:26 UTC] Backtrace from warning 'Missing argument 1 for Mail_mimePart::Mail_mimePart(),
 called in [...]/roundcube/vendor/pear/mail_mime/Mail/mime.php on line 1334 and 
defined' at [...]/roundcube/vendor/pear/mail_mime-decode/Mail/mimePart.php 127: [...]/roundcube/index.php 290 calling include_once() |
 [...]/roundcube/program/steps/mail/sendmail.inc 509 calling headers() |
 [...]/roundcube/vendor/pear/mail_mime/Mail/mime.php 1101 calling encodeHeaders() |
 [...]/roundcube/vendor/pear/mail_mime/Mail/mime.php 1314 calling encodeHeader() |
 [...]/roundcube/vendor/pear/mail_mime/Mail/mime.php 1334 calling Mail_mimePart()
[30-Jun-2015 11:52:26 UTC] PHP Fatal error:  Call to undefined method Mail_mimePart::encodeHeader() in [...]roundcube/vendor/pear/mail_mime/Mail/mime.php on line 1335

备注:

我刚刚完全重新安装了 roudcube(用户数据在 MySQL 或 Dovecot 中,因此没有数据丢失)。

这是一个与@Alex Chorry 已经在评论中指出的类似的问题。这是由作曲家在安装插件时更新 mail_mime 包引起的(在我的例子中是 globaladdressbook,但我在其他插件上也看到过这个问题)。恢复 php 也没有用,因为它导致了插件错误。

所以为了解决这个问题,我完全忽略了composer,并没有安装它。我手动安装了她在 github:

上指出的所有插件
  • Place this plugin folder into plugins directory of Roundcube
  • Add globaladdressbook to $config['plugins'] in your Roundcube config

不确定在哪里报告,但目前您可以通过将 /vendor/pear/mail_mime/Mail/mime.php 中的第 75 行从 require_once 'Mail/mimePart.php'; 更改为 require_once 'mimePart.php';

来解决此问题

我从 composer.json

中删除了这 3 行
    "pear/mail_mime": ">=1.8.9",
    "pear/mail_mime-decode": "~1.5.5",
    "pear/net_smtp": "dev-master",

我接着运行phpcomposer.phar更新

然后我把台词放回去,运行 更新: incc:/var/lib/roundcube# php composer.phar 更新 使用包信息加载作曲家存储库 初始化 PEAR 存储库 http://pear.php.net 更新依赖项(包括 require-dev)- 安装 pear/pear_exception (dev-master 8c18719) 克隆 8c18719fdae000b690e3912be401c76e406dd13b

  • 正在安装 pear/console_getopt (v1.4.1) 从缓存中加载

  • 正在安装pear/pear-core-minimal(开发大师 0457483) 克隆 0457483add2e037a5e00eb186b9dce7ea3b49da2

  • 正在安装 pear/net_socket (dev-trunk bbe6a12) 克隆 bbe6a12bb4f7059dba161f6ddd43f369c0ec8d09

  • 正在安装 pear/net_smtp(开发大师 3ef8150) 克隆 3ef8150ef230314f2a70e803e13a9926e432f7af

  • 正在安装pear/mail_mime(开发大师 66b2a01) 克隆 66b2a01acabe0b8d0ce606833d5cefc1a49a8887

  • 正在安装pear/mail_mime-decode (1.5.5.2) 下载:100%

然后重新登录到 roundcube,我可以再次发送。

我不是很理解作者的回答,但据我所知,这可能是一个流氓插件(我已经安装并删除了一些),我想我会尝试一下是否有效。

我和发帖者的情况一样。我一直(没有成功地)弄乱插件,然后我不能再发送邮件了。 roundcube/logs/error 收到了与我尝试发送时相同的消息。

Roundcube 社区论坛有一个 solution 对我有用。

我删除了 roundcube/vendor 目录(实际上,我删除了 mv vendor vendor_bak 以防万一)并从 roundcube 目录中删除了 composer install

突然又可以发了