使用 Zend 框架阅读 gmail
Posted
技术标签:
【中文标题】使用 Zend 框架阅读 gmail【英文标题】:Read gmail with Zend Framework 【发布时间】:2012-04-12 09:18:21 【问题描述】:我正在尝试使用 Zend 框架从 gmail 应用程序帐户读取邮件。我刚刚将 Zend Framework 目录转移到我的服务器(路径:/Zend/library/)。
如何加载 Zend Framework 和 Mail 模块?以及如何进一步阅读邮件?
我尝试了以下方法,但没有结果:
$path = 'Zend/library/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
我相信阅读收件箱的语法类似于:
$mail = new Zend_Mail_Storage_Imap(array('host' => 'imap.gmail.com', 'user' => "name@domain.com", 'password' => "mypassword", 'ssl' => 'SSL'));
编辑
以下代码有效:
$path = 'Zend/library/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
$mail = new Zend_Mail_Storage_Imap(array('host' => 'imap.gmail.com',
'user' => 'mail@domain.com',
'password' => 'password',
'ssl' => 'SSL'));
echo $mail->countMessages();`
...但是当我尝试回显未读电子邮件时:
echo "Unread mails:\n";
foreach ($mail as $message)
if ($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN))
continue;
// mark recent/new mails
if ($message->hasFlag(Zend_Mail_Storage::FLAG_RECENT))
echo '! ';
else
echo ' ';
echo $message->subject . "\n";
我收到以下消息:
Fatal error: Uncaught exception 'Zend_Mail_Storage_Exception' with message 'cannot login, user or password wrong' in /var/www/zvinx.dk/test/Zend/library/Zend/Mail/Storage/Imap.php:279 Stack trace: #0 /var/www/zvinx.dk/test/gmail.php(11): Zend_Mail_Storage_Imap->__construct(Array) #1 main thrown in /var/www/zvinx.dk/test/Zend/library/Zend/Mail/Storage/Imap.php on line 279
它说用户名或密码错误,这很奇怪,因为我没有从它工作的时候更改它......为什么会出现这个错误?
【问题讨论】:
嗯,对我来说,错误信息非常明显cannot login, user or password wrong
确实——但是当我只是回显消息的数量时它工作正常,但在尝试回显未读消息时却不行。至少对我来说没有任何意义..
尝试添加端口我猜端口是995
你在 gmail 上启用 imap 了吗?
是的.. 我不明白如何在我的收件箱中获取我的电子邮件数量,但是当我尝试回显这些消息时,它说登录失败
【参考方案1】:
gmail 设置有点棘手。试试:
$mail = new Zend_Mail_Storage_Imap(array('host' => 'imap.gmail.com',
'user' => 'mail@domain.com',
'port' => '993',
'password' => 'password',
'ssl' => 'tls',
'auth' => 'login'
));
注意:gmail 使用的 SSL/TLS 协议显然与标准 SSL 不同。
【讨论】:
@Greg Forbes 我收到“无法连接到主机;错误 = 连接超时 (errno = 110)”错误。我该怎么办【参考方案2】:您真的认为不阅读/学习框架基础知识就可以开始使用 Zend 框架吗?至少看一下quickstart,了解如何使用具有自动加载功能的框架,然后深入了解Zend_Mail documentation,更具体地说是“Reading Mail Messages”部分
【讨论】:
感谢链接 - 我现在几乎可以正常工作了。我已经用新问题更新了问题。【参考方案3】:我使用登录设置通过 IMAP 阅读电子邮件并转储附件
public function imapAction()
$config = array('host'=> 'imap.gmail.com',
'user' => 'xx',
'password' => 'xx',
'ssl' => 'SSL',
'port' => 993);//995 pop, imap 993
$mail = new Zend_Mail_Storage_Imap($config);
$maxMessage = $mail->countMessages();
$this->logger->info($maxMessage);
for ($i = $maxMessage; $i <= $maxMessage; $i++)
$message = $mail->getMessage($i);
$this->logger->info($i.'Mail from '.$message->from.':'.$message->subject);
if($message->isMultipart())
$this->logger->info("has attachments");
$part = $message->getPart(2);
$cnt_typ = explode(";" , $part->contentType);
$name = explode("=",$cnt_typ[1]);
$filename = $name[1];//It is the file name of the attachement in browser
//This for avoiding " from the file name when sent from yahoomail
$filename = str_replace('"'," ",$filename);
$this->logger->info($filename);
$attachment = base64_decode($part->getContent());
$fhandle = fopen($filename, 'w');
fwrite($fhandle, $attachment);
fclose($fhandle);
【讨论】:
【参考方案4】:我遇到了同样的问题,这个说明对我有帮助。
退出所有正在访问受影响的 Gmail 帐户的邮件客户端。这意味着 iPhone 上的 Mail 应用程序以及您从计算机访问 Gmail 的任何其他地方。
打开浏览器并导航到此页面:http://www.google.com/accounts/DisplayUnlockCaptcha
输入您的完整 Gmail 地址、密码并输入您在图片中看到的字符。触摸解锁按钮以验证您的帐户。
尝试使用 Zend Framework 从 gmail 应用程序帐户读取邮件。您的 Gmail 访问权限应该会恢复。
【讨论】:
【参考方案5】:如果您遇到此错误并且您 100% 确定您提供的密码可能来自您在 Google 帐户上设置的 2 因素身份验证。
Google help 给出了在这种情况下应该做什么的指示。我设法通过在我的情况下生成 AppPassword 来访问我的帐户
【讨论】:
以上是关于使用 Zend 框架阅读 gmail的主要内容,如果未能解决你的问题,请参考以下文章
通过 Gmail smtp 服务器使用 Zend_Mail 发送邮件
无法使用 gmail SMTP 在 Zend 中发送电子邮件。出现致命错误:未捕获的异常“Zend_Mail_Protocol_Exception”。如何解决这个问题?