2012-04-03 18 views
18

Mam problemy z wysyłaniem wiadomości e-mail z symfony2 i swiftmailer. Jestem też trochę zagubiony, jak debugować ten problem. Poniżej znajduje się kod. Najpierw tworzę formularz do wyświetlenia. Po przesłaniu (request-> method == post) próbuję wysłać wiadomość e-mail. Nie dostaję błędów i prowadzi mnie do strony z podziękowaniami, jednak nie otrzymuję żadnej wiadomości e-mail. Testowałem na prod i dev. W dev otworzyłem profiler po przesłaniu i pokazuje 0 e-maili. Każda pomoc jest doceniana! Dzięki!Symfony2 Swiftmailer nie wysyłający

public function contactAction(Request $request) 
{ 
    $defaultData = array('name' => 'Name', 'email' => 'Email', 'subject' => 'Subject', 'message' => 'Message'); 
    $form = $this->createFormBuilder($defaultData) 
     ->add('name', 'text') 
     ->add('email', 'email') 
     ->add('subject', 'text') 
     ->add('message', 'textarea') 
     ->getForm(); 

    if($request->getMethod() == 'POST') { 
     $form->bindRequest($request); 
     $data = $form->getData(); 
     $message = \Swift_Message::newInstance() 
      ->setSubject($data['subject']) 
      ->setFrom('[email protected]') 
      ->setTo('[email protected]') 
      ->setBody($this->renderView('AdaptiveSiteBundle:Default:email.txt.twig', array('name' => $data['name'], 'message' => $data['message']))) 
     ; 
     $this->get('mailer')->send($message); 

     return $this->redirect($this->generateUrl('thankyou')); 
    } 

    return array("form" => $form->createView()); 
} 
+1

Jeśli chcesz, aby profiler pokazywał wysłane wiadomości, musisz usunąć przekierowanie. –

+0

skonfigurowałeś serwer pocztowy? – Flukey

+1

Nie skonfigurowałem serwera pocztowego ... Jakieś sugestie dotyczące serwerów/dokumentacji tego? Używam ubuntu. –

Odpowiedz

9

Można tu całą procedurę, w jaki sposób do wysyłania e-maili z Symfony2. Właśnie przetestowałem to na, wydaje się, że działa dobrze.

http://tutorial.symblog.co.uk/docs/validators-and-forms.html#sending-the-email

http://symfony.com/doc/current/email.html

+0

Dobry samouczek, Gmail działa dla mnie, ale nie byłem w stanie użyć domyślnej konfiguracji localhost. –

+0

Działa na moim lokalnym serwerze, ale nie na odległym serwerze (online), co powinienem zrobić ??? – krachleur

+1

Sprawdź parametry swojego odległego serwera dla Swiftmailer. Być może masz niestandardowe parametry dla środowisk deweloperów i prod. –

4

często ustawić następującą konfigurację w config_dev.yml do -prevent- maile wysyłane podczas testowania, może zrobić to samo i zapomniałeś?

Jeśli jest to w config_dev.yml, ustaw ją na false:

swiftmailer: 
    disable_delivery: true 
+0

Nie, sprawdziłem i Nie wyłączam. To samo dzieje się przy produkcji –

+0

Kolejne długie ujęcie, ale często nie mam błędów pokazujących się w moich dziennikach Sf2, które pojawiają się w /var/log/apache2/error.log, widzisz cokolwiek tam? (Przepraszam, tak jak powiedziałem, odstrzał) – Dieter

+0

Po usunięciu przekierowania widzę, że e-mail jest wysyłany przez profilera. Nadal go nie odbieram. Nic w dziennikach apache, php lub symfony –

22

Czy umieścisz parametry parameters.yml?

Upewnij się także, że buforowanie jest wyłączone, aby wiadomość e-mail mogła zostać natychmiast wysłana. Jeśli masz wpis szpuli pod konfiguracji swiftmailer, należy go usunąć, na przykład:

 
swiftmailer: 
    transport: %mailer_transport% 
    host:  %mailer_host% 
    username: %mailer_user% 
    password: %mailer_password% 
    spool:  { type: memory } 

Powinno być:

 
swiftmailer: 
    transport: %mailer_transport% 
    host:  %mailer_host% 
    username: %mailer_user% 
    password: %mailer_password% 
+2

To działa na mnie jak ja korzystania z transportu Gmail – Rocco

+0

Dzięki ja nie widział błędu (Nie można ustanowić połączenia z hostem) – arsenik

0

config.yml

# Swiftmailer Configuration 
swiftmailer: 
    transport: smtp 
    encryption: ssl 
    auth_mode: login 
    host:  smtp.xx.eu 
    username: username 
    password: password 

kontroler/akcja

$messageObject = \Swift_Message::newInstance() 
      ->setSubject('Subject') 
      ->setFrom('[email protected]') 
      ->setTo('[email protected]') 
      ->setBody('message'); 
$this->get('mailer')->send($messageObject); 
4

Oprócz powyższego rozwiązania, proponuję, aby usunąć die lub exit z funkcji gdzie użyj kodu Swiftmailer. Naprawi twój problem, jeśli twój kod jest właściwy.

+0

Zastąpienie quick & dirty 'die()' z 'return new Response()' działało dla mnie. Dzięki! –

+0

Dzięki za oszczędność czasu –

Powiązane problemy