可写 Zend 邮件存储消息的唯一标识符


Unique identifier for writable Zend Mail Storage messages

我正在尝试在 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 :(
}

感谢您提供的任何见解!

可以使用 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 添加的消息)。

希望对您有所帮助。