2012-04-12 11 views
3

Ich versuche, Mails von einem Google Mail App-Konto mit Zend Framework zu lesen. Ich habe gerade das Zend Framework Verzeichnis auf meinen Server übertragen (Pfad:/Zend/library /).Gmail mit Zend Framework lesen

Wie lade ich das Zend Framework und das Mail-Modul? Und wie lese ich die Mail weiter?

Ich habe versucht, die folgenden ohne Ergebnisse:

$path = 'Zend/library/'; 
set_include_path(get_include_path() . PATH_SEPARATOR . $path); 

ich die Syntax zum Lesen der Posteingang glauben ist so etwas wie:

$mail = new Zend_Mail_Storage_Imap(array('host' => 'imap.gmail.com', 'user' => "[email protected]", 'password' => "mypassword", 'ssl' => 'SSL')); 

EDIT

Der folgende Code funktioniert:

$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'  => '[email protected]', 
             'password' => 'password', 
             'ssl'  => 'SSL')); 
echo $mail->countMessages();` 

... aber wenn ich versuche ungelesene E-Mails an echo:

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"; 
} 

bekomme ich folgende Meldung:

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 

Er sagt, der Benutzername oder das Passwort falsch ist, die seltsame Sache ist ich änderte es nicht, als es funktionierte ... Wie kommt es, dass dieser Fehler auftritt?

+0

hmm für mich Fehlermeldung ziemlich offensichtlich, 'kann nicht anmelden, Benutzer oder Passwort wrong' – Vytautas

+0

der Tat - aber es funktioniert gut, wenn ich die Anzahl der Meldungen nur echo aber nicht, wenn die ungelesenen Nachrichten zu Echo versuchen .. es Doesnt keinen Sinn für mich mindestens .. – Christoffer

+0

Versuchen Sie, Port hinzuzufügen Ich denke, Port ist '995' – Vytautas

Antwort

1

Sie glauben wirklich nicht, dass Sie anfangen können, Zend Framework zu verwenden, ohne die Grundlagen des Frameworks zu lesen/zu lernen? Zumindest einen Blick auf die quickstart, wie mit den autoloading Funktionen den Rahmen zu verwenden, und tauchen dann in die Zend_Mail documentation, insbesondere den Teil, der „Reading Mail Messages

+0

Thx für die Links - Ich habe es fast funktioniert jetzt. Ich habe die Frage mit dem neuen Problem aktualisiert. – Christoffer

1

die gmail Einstellungen sind ein wenig kompliziert sagt. versuchen:

$mail = new Zend_Mail_Storage_Imap(array('host'  => 'imap.gmail.com', 
             'user'  => '[email protected]', 
             'port'  => '993', 
             'password' => 'password', 
             'ssl'  => 'tls', 
             'auth'  => 'login' 
             )); 

HINWEIS: die gmail die SSL/TLS-Protokoll verwenden, die offensichtlich anders als der Standard-SSL ist.

+0

@Greg Forbes Ich bekomme "kann nicht mit Host verbinden; error = Verbindung Zeitüberschreitung (errno = 110)" Fehler. Was soll ich machen – mujaffars

1

Es gibt die Login-Einstellung i verwenden E-Mails über IMAP zu lesen und Dump angehängten Dateien

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); 
     } 
    } 
} 
1

ich das gleiche Problem hatte und dieser Befehl hat mir geholfen.

  1. Beenden Sie alle E-Mail-Clients, die auf das betroffene Google Mail-Konto zugreifen. Dies bedeutet, dass die Mail-App auf dem iPhone und an jedem anderen Ort, auf den Sie über einen Computer zugreifen, von Ihrem Google Mail-Konto aus erreichbar ist.

  2. Browser öffnen und navigieren Sie zu dieser Seite: http://www.google.com/accounts/DisplayUnlockCaptcha

  3. Geben Sie Ihre vollständige Google Mail-Adresse, Passwort und geben Sie die Zeichen auf dem Bild zu sehen. Berühren Sie die Entsperrtaste, um Ihr Konto zu bestätigen.

  4. Versuchen Sie, E-Mails von einem Google Mail App-Konto mithilfe von Zend Framework zu lesen. Ihr Google Mail-Zugriff sollte wiederhergestellt werden.