我正在尝试学习/了解Zend Framework,以便通过IMAP检索电子邮件。我们的Web主机没有在我们的Web服务器上启用IMAP扩展,并且我安装了osTicket。我想用osnd_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语句后没有任何反应。这是返回到我的屏幕的内容:
string(57)“/ usr / home / username / public_html / domain.com /”
string(65)“/ usr / home / username / public_html / domain / support /”
的字符串(73) “/usr/home/username/public_html/domain.com/support/include /”
的字符串(86) “/usr/home/username/public_html/domain.com/support/include/zend/library /”
包含Storage \ 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没有看到脚本运行?
答案 0 :(得分:0)
看起来您正在尝试遵循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副本(假设您没有将其用于其他任何内容)。