使用ZF3将邮件添加到IMAP文件夹

时间:2018-07-06 19:40:53

标签: zend-framework imap zend-framework3 dovecot zend-mail

我正在尝试使用Zend Framework 3将新消息添加到IMAP文件夹。 我使用的代码如下:

...
$draftMessage = new \Zend\Mail\Storage\Message([
  'headers' => [
    'subject' => 'voyteck0@gmail.com',
  ],
  'content' => 'ala ma kota',
]);  
[valid-imap-connection]->appendMessage($draftMessage, 'Drafts', [\Zend\Mail\Storage::FLAG_DRAFT]);
...

但是我总是会抛出一个异常: Zend \ Mail \ Storage \ Exception \ RuntimeException:“无法创建消息,请检查文件夹是否存在以及您的标志是否已放入/.../zendframework/zend-mail/src/Storage/Imap.php(480)

我在这里还使用了一个伪元素[valid-imap-connection]来模糊问题,但该连接工作正常(检索消息,发送消息,在文件夹之间移动等)

该文件夹存在-即使在ZF中我也已经进行了一些调试,发现在该行480中,该命令在上述代码上返回NULL。如果我将文件夹更改为不存在的文件夹-它返回false。 异常本身会被抛出一次(!结果)-因此对于这种情况,null也为真。

但是,即使删除了引发异常的代码(并且该代码使用该NULL值完成了执行),该消息仍未出现在文件夹中(直接在磁盘上检查)。 Dovecot日志中没有任何有趣的内容(除了连接已成功建立的事实)。

任何想法都非常受欢迎:)

1 个答案:

答案 0 :(得分:0)

我认为问题出在两件事上

  1. 我应该使用\ Zend \ Mail \ Message类(而不是... \ Storage ...一个)
  2. draftMessage应该是字符串版本(实际上不知道为什么-因为appendMessage已经使用toString()函数)

因此有效的代码如下:

...
$draftMessage = new \Zend\Mail\Message();  
$draftMessage->setSubject('voyteck0@gmail.com');
$draftMessage->setBody('ala ma kota');
[valid-imap-connection]->appendMessage($draftMessage->toString(), 'Drafts', [\Zend\Mail\Storage::FLAG_DRAFT]);
...