可写Zend Mail Storage消息的唯一标识符

时间:2012-05-29 14:52:04

标签: php zend-framework

我正在尝试在PHP / Zend中创建一个系统,它可以从各种不同的帐户(主要是POP和IMAP)收集电子邮件,并将它们全部合并到一个系统中,以便进行分析(电子邮件内容等)

我的计划是阅读来自帐户的电子邮件并在本地移动它们,因为如果用户需要查看电子邮件,我将设计的系统将以原始格式显示电子邮件。我使用Zend_Mail_Storage_Writable_Maildir创建了一个本地Maildir结构,并且我在每个帐户返回时添加了这些消息。

我可以连接到各种帐户并检索电子邮件,并将其添加到我当地的Maildir帐户而不会出现任何问题。我的问题是我似乎无法找到一个唯一的标识符来分隔添加到Maildir帐户的每条消息(我计划将每封电子邮件的一些电子邮件信息与数据库中的唯一标识符一起存储)。

有谁知道如何获取最近添加到Zend_Mail_Storage_Writable_Maildir实例中的消息的唯一标识符?

我的基本代码如下:

// Set config array for connecting to an email account (Hotmail, gMail etc.)
$config = array(
    'host'=> 'xxxx',
    'user' => 'xxxx',
    'password' => 'xxxx',
    'ssl' => 'SSL',
    'port' => 995);

// Connect to the account and get the messages
$mail = new Zend_Mail_Storage_Pop3($config);

// Connect to the local Mairdir instance so we can add new messages
$mailWrite = new Zend_Mail_Storage_Writable_Maildir(array('dirname' => '/xxxx/xxxx/'));

// Loop through the messages and add them        
foreach ($mail as $messageId => $message)
{
    // ADDING THE MESSAGE WORKS FINE, BUT HOW DO I GET THE UNIQUE 
    //  IDENTIFIER FOR THE MESSAGE I JUST ADDED?
    $mailWrite->appendMessage($message);

    // FYI: $messageId seems to be the message ID from the originating account; it
    //  starts at one and increments, so this can't be used :(
}

感谢您提供的任何见解!

1 个答案:

答案 0 :(得分:2)

您可以使用Zend_Mail_Storage_Writable_Maildir::getUniqueId()方法获取已添加邮件的唯一ID。

如果您没有将id传递给函数,它将从邮件目录返回所有邮件的唯一ID的数组。

以下是一个例子:

foreach ($mail as $messageId => $message)
{
    // ADDING THE MESSAGE WORKS FINE, BUT HOW DO I GET THE UNIQUE 
    //  IDENTIFIER FOR THE MESSAGE I JUST ADDED?
    $mailWrite->appendMessage($message);

    $ids = $mailWrite->getUniqueId();
    $lastMessageId = $ids[sizeof($ids)];
}

值得注意的是,来自getUniqueId()的返回数组是基于1的而不是基于0的,所以请注意这一点。

此外,我不确定这是一个错误还是设计错误,但为新添加的文件返回的唯一ID不包含文件名中的邮件大小或信息字符串,但现有邮件将会。

这意味着,您的数组可能如下所示:

array(21) {
  [1]=>
  string(38) "1338311280.0773.1143.localhost.localdomain,S=34226"
  [2]=>
  string(38) "1338311278.5589.1143.localhost.localdomain,S=108985"
  [3]=>
  // ...
  [20]=>
  string(39) "1338311217.6442.18718.localhost.localdomain,S=2142"
  [21]=>
  string(31) "1338312073.7461.18715.localhost.localdomain"
}

注意上一条消息还没有大小(刚刚添加了appendMessage的消息)。

希望能帮到你。