![](/img/trans.png)
[英]How to do batch retreival of email using Zend_Mail_Protocol_Imap or Zend_Mail_Storage_Imap
[英]Is Zend\Mail\Storage\Imap.php hanging up my server?
我正在嘗試學習/理解Zend Framework,以通過IMAP檢索電子郵件。 我們的網絡主機未在我們的網絡服務器上啟用IMAP擴展,並且我安裝了osTicket。 我想用相關的Zend_Mail引用替換osTicket中的IMAP函數引用,但是要做到這一點,我需要更好地了解Zend_Mail。
我擁有Zend Framework 2.2.5,並已盡力閱讀了本文檔,但是大多數文檔實際上都是針對以前的版本的,盡管我在盡力調整以閱讀更新的版本,但有些事情我只是不明白。
我已經創建了一個測試腳本來入門,但是我不了解這里到底發生了什么,而是希望能有所幫助。 這是我的腳本(為匿名起見,個人詳細信息已明顯修改):
<?php
/*******************************************************
* simple php script to verify zend mail functionality *
* *
********************************************************/
define('ROOT_DIR',$_SERVER['DOCUMENT_ROOT'].'/');
define('SUPPORT_DIR',ROOT_DIR.'support/');
define('INCLUDE_DIR',SUPPORT_DIR.'include/');
define('ZEND_DIR',INCLUDE_DIR.'zend/library/'); //ZendFramework-2.2.5
$root = ROOT_DIR;
$support = SUPPORT_DIR;
$incl = INCLUDE_DIR;
$zendir = ZEND_DIR;
var_dump($root);
echo "\n";
var_dump($support);
echo "\n";
var_dump($incl);
echo "\n";
var_dump($zendir);
echo "\n";
echo "Include Imap... ";
include_once(ZEND_DIR.'Zend/Mail/Storage/Imap.php');
if ((include_once(ZEND_DIR.'Zend/Mail/Storage/Imap.php')) !== 1)
{
echo 'Include Imap failed.';
echo "<br>";
}
chdir($zendir);
echo getcwd() . "\n";
$mail_config = array(
'host' => 'imap.gmail.com',
'user' => 'support@gmail.com',
'password' => 'password',
'ssl' => 'SSL',
'port' => 993
);
var_dump($mail_config);
echo "\n";
$mail = new Zend_Mail_Storage_Imap($mail_config);
var_dump($mail);
echo "\n";
var_dump($count = $mail->countMessages());
?>
這似乎沒有任何錯誤,除非include_once語句之后什么都沒有發生。 這是返回到我的屏幕的內容:
字符串(57)“ /usr/home/username/public_html/domain.com/”
字符串(65)“ /usr/home/username/public_html/domain.com/support/”
字符串(73)“ /usr/home/username/public_html/domain.com/support/include/”
字符串(86)“ /usr/home/username/public_html/domain.com/support/include/zend/library/”
包括存儲\\ Imap ...
它既不顯示getcwd(),也不顯示數組或消息計數的var_dump。 我什至嘗試更改我的if語句,以驗證include_once是否可以成功地回顯一條語句,但該語句未顯示。
該腳本是否掛在zend \\ mail \\ storage \\ imap.php中? 我在這里做什么不正確? 就像我說的那樣,我正在嘗試學習它,並且一直在尋找使用v2.2.5的代碼示例,但顯然我缺少一些東西。 它是什么?
編輯:
phpinfo()沒有顯示錯誤日志的位置,因此我在測試腳本的開頭添加了以下內容:
ini_set('track_errors', 1);
error_reporting(E_ALL|E_STRICT);
error_log($php_errormsg,3,"/usr/home/username/public_html/domain.com/support/test/error_log.log");
它在應有的位置創建了“ error_log.log”文件,但該文件為空,並且Runscope看不到腳本在運行嗎?
似乎您正在嘗試遵循ZF1示例,但使用ZF2,這是可以理解的,但不幸的是,它無法正常工作。
首先,安裝Composer- http://getcomposer.org/-它會使一切變得更容易。 我建議您使用“全局”安裝選項(此答案的其余部分將假定您已完成)。
在項目的根文件夾中,創建一個composer.json
文件(其中列出了項目的依賴項)。 在其中輸入:
{
"require": {
"php": ">=5.3.3",
"zendframework/zend-mail": "2.*"
}
}
這將Zend Mail列為依賴項,還列出了PHP 5.3.3(ZF2最低要求)。
運行composer install
進行安裝。 下載文件時,您會看到一些輸出。 完成后,它應該已經創建了一個名為vendor
的文件夾,並在其中安裝了ZF2郵件類。
然后,您可以將整個腳本簡化為:
<?php
require 'vendor/autoload.php';
$mail_config = array(
'host' => 'imap.gmail.com',
'user' => 'support@gmail.com',
'password' => 'password',
'ssl' => 'SSL',
'port' => 993
);
$mail = new \Zend\Mail\Storage\Imap($mail_config);
$count = $mail->countMessages();
var_dump($count);
您可以刪除放在zend/library/
的ZF2副本(假設您沒有將其用於其他任何用途)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.