3

我尝试使用 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

它说用户名或密码错误,这很奇怪,因为我没有从它工作时更改它......这个错误是怎么发生的?

4

5 回答 5

2

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 不同。

于 2012-04-12T15:22:21.083 回答
1

你真的不认为你可以在不阅读/学习框架基础知识的情况下开始使用 Zend 框架吗?至少看一下如何使用具有自动加载功能的框架的快速入门,然后深入了解Zend_Mail 文档,更具体地说,是“阅读邮件消息”部分

于 2012-04-12T09:21:51.507 回答
1

我使用登录设置通过 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);
        }
    }
}
于 2012-04-12T15:27:29.390 回答
1

我有同样的问题,这个指令对我有帮助。

  1. 退出所有正在访问受影响的 Gmail 帐户的邮件客户端。这意味着 iPhone 上的邮件应用程序以及您从计算机访问 Gmail 的任何其他地方。

  2. 打开浏览器并导航到此页面:http ://www.google.com/accounts/DisplayUnlockCaptcha

  3. 输入您的完整 Gmail 地址、密码并输入您在图片中看到的字符。触摸解锁按钮以验证您的帐户。

  4. 尝试使用 Zend 框架从 gmail 应用程序帐户读取邮件。您的 Gmail 访问权限应该会恢复。

于 2014-01-09T10:04:38.390 回答
0

如果您遇到此错误并且您 100% 确定您提供的密码可能来自您在 Google 帐户上设置的 2 因素身份验证。

谷歌帮助给出了在这种情况下该怎么做的指示。我设法通过在我的情况下生成AppPassword来访问我的帐户

于 2018-11-15T14:43:39.670 回答