Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可写Zend邮件存储邮件的唯一标识符_Php_Zend Framework - Fatal编程技术网

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

Php 可写Zend邮件存储邮件的唯一标识符,php,zend-framework,Php,Zend Framework,我正在尝试用PHP/Zend创建一个系统,可以收集来自各种不同帐户(主要是POP和IMAP)的电子邮件,并将它们合并到一个系统中进行分析(电子邮件内容等) 我的计划是从帐户中读取电子邮件并将其移动到本地,因为如果用户需要查看,我正在设计的系统将被调用以原始格式显示电子邮件。我已经使用Zend_Mail_Storage_Writable_Maildir创建了一个本地Maildir结构,并在邮件从每个帐户返回时添加邮件 我能够连接到各种帐户并检索电子邮件,并将它们添加到我的本地Maildir帐户,而

我正在尝试用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 :(
}
感谢您提供的任何见解


Dan

您可以使用
Zend\u Mail\u Storage\u Writable\u 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的,所以请注意这一点

另外,我不确定这是一个bug还是出于设计,但为新添加的文件返回的唯一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的消息)还没有大小

希望这能帮到你