2012-02-07 13 views
18

Muszę opracować prosty klient poczty w symfony2 przy użyciu protokołu IMAP. Zastanawiam się, jaki jest najlepszy sposób na pobieranie wiadomości z serwera (pozwala wziąć na przykład gmail)?Prawidłowy sposób pobierania wiadomości przez IMAP w symfony2

zrobiłem coś takiego:

public function indexAction($name) 
{ 
    $user = '[email protected]'; 
    $password = 'password'; 
    $mailbox = "{imap.gmail.com:993/imap/ssl}INBOX"; 
    $mbx = imap_open($mailbox , $user , $password); 
    $ck = imap_check($mbx); 
    $mails = imap_fetch_overview($mbx,"1:5"); 
    return $this->render('HtstMailBundle:Mail:index.html.twig',array('name'=>$name,'mail'=>$mails)); 
} 

jest to właściwa droga, czy nie? Działa, ale czy jest zgodny z "standardami" symfony?

Odpowiedz

19

Nie ma to nic wspólnego z "standardami" symfony. Ale można dokonać kod bardziej OOP jeśli przenieść wszystkie logowanie do klasy usługi i wykorzystanie symfony DepencyInjection do tworzenia i uzyskać usługę:

public function indexAction($name) 
{ 
    $user = '[email protected]'; 
    $password = 'password'; 
    $mailbox = "{imap.gmail.com:993/imap/ssl}INBOX"; 
    $mails = $this->get("mail.checker")->receive($user, $password, $mailbox); 
    return $this->render('HtstMailBundle:Mail:index.html.twig',array('name'=>$name,'mail'=>$mails)); 
} 

deklaracji klasy:

class MailChecker 
{ 
    public function receive($user, $password, $mailbox) 
    { 
     ...imap_check()... 
    } 
} 

declartion usługę:

services: 
    mail.checker: 
     class: Project\YourBundle\Service\MailChecker 
1

Można również użyć do tego celu this Symfony bundle i używać go jako usługi. Zostałem zaprojektowany dla starej Symfony2, ale testowałem ją z Symfony 3 i działa :)

Powiązane problemy